PageSourceSearch

https://5tree.co.kr/js/member_config.1789362410.js

js 5tree.co.kr collected 2026-09-28 23:47:33 UTC 371,671 bytes, 8,647 lines download raw bytes

1if(typeof LANG == 'undefined') var LANG = getLanguage(); 
2  
3$(window).load(function(data) {
4	setLanguage(LANG);
5	collectionSortable();
6});
7
8$(function() {
9	$('.pageIcon.nonpage a[href="#"]').click(function(e) {
10		e.preventDefault();
11	});
12
13	$.fheader = {
14		refreshFixedSub: function() {
15			// console.log('refreshFixedSub');
16			//ver4 ( ver3 + menu height )
17
18			var body_width = (PAGE_MODE == 'c') ? $('body').width() : window.innerWidth,
19				$fh = (typeof isElviewPage != 'undefined' && isElviewPage === true) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
20				fh_type = $fh.attr('data-fh-type'),
21				fh_postion = (typeof $fh.attr('data-position') != 'undefined') ? $fh.attr('data-position') : '',
22				fh_transparent = ($fh.hasClass('transparent')) ? true : false,
23				checkFixTypeMenu = (typeof $fh.attr('data-fixtype') != 'undefined' && $fh.attr('data-fixtype')) ? true : false;
24
25			if( $fh.find('#fixed-menu').length == 0 ||
26				$fh.hasClass('sidebar') ||
27				fh_type != 'right' ||
28				$fh.find(' > .container[data-fh-align]').length == 0
29			) { return false; }
30
31			var fixedSubOn = ($fh.find('.fh-container').css('display') == 'none') ? false : true;
32
33			if(!checkFixTypeMenu && window.innerWidth > 768) {
34				var collapse_w	= $fh.find('.collapse').width(),
35					tpl_nav_w	= $fh.find('#tpl-menu').outerWidth(),
36					fixed_nav_w	= parseInt($fh.find('#fixed-menu').outerWidth()) + parseInt($fh.find('#fixed-menu').css('margin-left')) + parseInt($fh.find('#fixed-menu').css('margin-right')),
37					checkWidth	= (parseInt(collapse_w) < parseInt(tpl_nav_w) + fixed_nav_w) ? true : false;
38
39				if(checkWidth) {
40					var checkOnepx = ((parseInt(tpl_nav_w) + fixed_nav_w) - parseInt(collapse_w) === 1) ? true : false;
41					if(checkOnepx) checkWidth = false;
42				}
43
44				var tpl_nav_cnt	= $fh.find('#tpl-menu > li').length,
45					tpl_nav_th	= (tpl_nav_cnt == 0) ? 0 : $fh.find('#tpl-menu > li').eq(0).position().top,
46					tpl_nav_h	= (tpl_nav_cnt == 0) ? 0 : $fh.find('#tpl-menu > li').eq(tpl_nav_cnt-1).position().top,
47					checkHeight	= (parseInt(tpl_nav_th) != parseInt(tpl_nav_h)) ? true : false;
48
49				if(fixedSubOn) { // aready fixed menu sub show
50					if(!checkWidth && !checkHeight) fixedSubOn = false;
51				} else {
52					if(checkWidth || checkHeight) fixedSubOn = true;
53				}
54			}
55
56			if(fixedSubOn) {
57				if($fh.hasClass('transparent')) {
58					$fh.find('#tpl-menu').addClass('overflow-menu');
59					$fh.find('#fixed-menu').addClass('overflow-menu');
60					$fh.find('#fixed-menu-sub').addClass('overflow-menu');
61				}
62				var fh_nav_pdRight = parseInt($fh.find('#tpl-menu > li > a').css('padding-right')) + parseInt($fh.find('.collapse').css('padding-right')) - 10;
63
64				if($fh.find('.navbar-center').length==0) {
65					if(checkFixTypeMenu) return false;
66					$('#fixed-menu').hide();
67					$('#fixed-menu-sub').closest('.fh-container').eq(0).show().addClass('active');
68				} 
69				
70				$('#fixed-menu-sub').css('margin-right',fh_nav_pdRight+'px');
71			} else {
72				$fh.find('#tpl-menu').removeClass('overflow-menu');
73				$fh.find('#fixed-menu').removeClass('overflow-menu');
74				$fh.find('#fixed-menu-sub').removeClass('overflow-menu');
75
76				$('#fixed-menu').show();
77				$('#fixed-menu-sub').closest('.fh-container').eq(0).hide().removeClass('active');
78			}
79
80			if($fh.hasClass('transparent') && $fh.hasClass('overflow-menu') && !$fh.find('#tpl-menu').hasClass('overflow-menu')) {
81				$fh.find('#tpl-menu').addClass('overflow-menu');
82				$fh.find('#fixed-menu').addClass('overflow-menu');
83				$fh.find('#fixed-menu-sub').addClass('overflow-menu');
84			}
85
86
87			if(PAGE_MODE == 'c') {
88				$('.addElementButton.addel-menu').css('top',$('header.navbar').outerHeight() + 'px');
89			}
90
91			if($('.element[data-feature*=fixedscroll]').length > 0) gjs01SetFixedscroll($('.element[data-feature*=fixedscroll]').eq(0));
92		},
93		init: function(mode) {
94			// console.log('fheader init');
95			var checkElviewer = '';
96			if(window.parent && window.parent != this && $('.elviewhtml').length > 0) {
97				checkElviewer = $('#el-list-image .elgrid.active', window.parent.document).find('.blockname-str').text().trim();
98			}
99
100			var s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
101				s_service = (PAGE_MODE == 'c') ? SERVICE : property.SERVICE,
102				checkGabia = (s_service.indexOf('gabia') > -1) ? true : false,
103				checkEllist = (typeof mode != 'undefined' && mode == 'ellist') ? true : false,
104				checkTemplate = (typeof property != 'undefined' && property.TEMPLATE && property.TEMPLATE=='1') ? true : false,
105				sid = (PAGE_MODE == 'c') ? ((checkEllist) ? checkElviewer.replace(/menu-/gi,'') : SID) : property.SID,
106				$pc_nav = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
107				pc_nav_name = (checkEllist) ? $pc_nav.attr('data-name') : 'menu-'+sid,
108				$mobile_nav = $pc_nav.find('#tpl-menu').closest('.navbar-'+pc_nav_name).clone(),
109				checkFixTypeMenu = (typeof $pc_nav.attr('data-fixtype') != 'undefined' && $pc_nav.attr('data-fixtype')) ? true : false;
110
111			if($pc_nav.find('.cl-menu-option').length > 0) $.moption.init(mode);
112
113			$mobile_nav.prop({id:'mobile-nav'}).removeAttr('class').removeAttr('style');
114			
115			if(!$pc_nav.hasClass('navbar-fheader') || (checkFixTypeMenu && $pc_nav.find('.cl-fixed-menu').length>0)) return false;
116			if(!checkFixTypeMenu && ($.inArray(s_validtype, ['BS','BN','SM']) > -1 || (checkGabia && s_validtype == 'FR'))) {
117
118				var fh_sub = '',
119					fh_type = $pc_nav.attr('data-fh-type');
120
121				switch(s_validtype) {
122					case 'FR':
123					case 'BS':
124						fh_sub = '\
125							<li class="siteLANG"><a href="#"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a></li>\
126						';
127						break;
128					case 'BN':
129						fh_sub = '\
130							<li class="siteUM"><a href="#"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></li>\
131							<li class="siteLANG"><a href="#"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a></li>\
132						';
133						break;
134					case 'SM':
135						fh_sub = '\
136							<li class="siteSEARCH"><a href="#"><i class="cl-icon cl_icon_magnifier" aria-hidden="true"></i></a></li>\
137							<li class="siteUM"><a href="#"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></li>\
138							<li class="siteCART"><a href="#"><i class="cl-icon cl_icon_cart" aria-hidden="true"></i></a></li>\
139							<li class="siteLANG"><a href="#"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a></li>\
140						';
141
142
143						/* Shopping Only KO Site */
144						// var slang = (PAGE_MODE == 'c') ? SLANG : property.SLANG;
145						// if(typeof slang != 'undefined' && typeof slang.select_code != 'undefined' && slang.select_code != 'ko') {
146						// 	fh_sub = '\
147						// 	<li class="siteUM"><a href="#"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></li>\
148						// 	<li class="siteLANG"><a href="#"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a></li>\
149						// 	';
150						// }
151						break;
152					default:
153						break;
154				}
155
156				if(fh_type == 'top') {
157					var menu_container = $pc_nav.find(' > .container').attr('class'),
158						fh_line = '<hr class="fh-line"  style="display: none;"/>',
159						fh_nav_pdRight = parseInt($pc_nav.find('#tpl-menu > li > a').css('padding-right')) + parseInt($pc_nav.find('.collapse').css('padding-right')) - 10,
160						fh_content = '\
161							<div class="' + menu_container +' fh-container" style="display: none;">\
162								<div class="navbar-wrap">\
163									<ul class="navbar-nav navbar-top" id="fixed-menu">\
164									' + fh_sub + '\
165									</ul>\
166								</div>\
167							</div>\
168						';
169
170					if($pc_nav.find('.cl-drop-fixed-menu').length > 0) $pc_nav.find('.cl-drop-fixed-menu').remove();
171
172					if($pc_nav.find('.fh-line').length > 0) $pc_nav.find('.fh-line').replaceWith(fh_line);
173					else $pc_nav.prepend(fh_line);
174
175					if($pc_nav.find('#fixed-menu').length > 0) $pc_nav.find('.fh-container').replaceWith(fh_content);
176					else $pc_nav.prepend(fh_content);
177
178
179					if(!checkEllist) {
180						if($mobile_nav.find('#fixed-menu').length > 0) $mobile_nav.find('#fixed-menu').replaceWith($(fh_content).find('#fixed-menu').clone());
181						else $mobile_nav.prepend($(fh_content).find('#fixed-menu').clone());
182					}
183
184				} else if(fh_type == 'right' || fh_type == 'sidebar') {
185					var fixed_menu_str = (fh_type == 'sidebar') ? '' : 'navbar-right',
186						fh_line = '<hr class="fh-line visible-xs" style="display: none;"/>',
187						fh_content = '\
188							<ul class="navbar-nav ' + fixed_menu_str + '" id="fixed-menu" style="display: none;">\
189							' + fh_sub + '\
190							</ul>\
191						';
192
193					if(checkEllist) {
194						if(fh_type == 'right' && $pc_nav.find('.mini-home').length > 0) {
195							$pc_nav.find('.mini-home').closest('.navbar-collapse').attr('style','display: inline-block !important');
196						}
197					} else {
198						var fh_container = $pc_nav.find(' > .container[data-fh-align]'),
199							fh_nav_pdRight = parseInt($pc_nav.find('#tpl-menu > li > a').css('padding-right')) + parseInt($pc_nav.find('.collapse').css('padding-right')) - 10,
200							fh_content2 = (	fh_type == 'sidebar' || fh_container.length == 0 ) ? '' : '\
201							<div class="' + fh_container.attr('class') +' fh-container" style="display: none;">\
202								<div class="navbar-wrap">\
203									<ul class="navbar-nav navbar-top" id="fixed-menu-sub" style="margin-right: '+fh_nav_pdRight+'px;">\
204										' + fh_sub + '\
205									</ul>\
206								</div>\
207							</div>\
208						';
209					}
210
211					if($pc_nav.find('#fixed-menu').length > 0) $pc_nav.find('#fixed-menu').replaceWith(fh_content);
212					else $pc_nav.find('#tpl-menu').before(fh_content);
213
214					if($pc_nav.find('.fh-line').length > 0) $pc_nav.find('.fh-line').replaceWith(fh_line);
215					else $pc_nav.find('#tpl-menu').before(fh_line);
216
217					if(!checkEllist) {
218						if(fh_content2.length > 0) {
219							if($pc_nav.find('#fixed-menu-sub').length > 0) $pc_nav.find('.fh-container').replaceWith(fh_content2);
220							else $pc_nav.prepend(fh_content2);
221						}
222
223						if($mobile_nav.find('#fixed-menu').length > 0) $mobile_nav.find('#fixed-menu').replaceWith($(fh_content).removeAttr('style').clone());
224						else $mobile_nav.prepend($(fh_content).removeAttr('style').clone());
225					}
226
227				}
228			}
229
230			/* 메뉴 ::: 확장기능 버튼 추가 버전(20220928) *********************************************************/
231			if(checkFixTypeMenu && ($.inArray(s_validtype, ['BS','BN','SM']) > -1 || (checkGabia && s_validtype == 'FR'))) {
232				var fh_sub = '',
233					fixbtnData = $.menuFixBtn.getData($pc_nav),
234					parent_dsgnbody = (checkEllist && typeof PAGE_MODE!='undefined' && PAGE_MODE=='c') ? window.parent.document : '',
235					lang_txt = (checkEllist) ? $(parent_dsgnbody).find('header.navbar-fheader .siteLANG.cl-fixbtn').attr('data-fixlang') : '',
236					lang_code = (checkEllist) ? $(parent_dsgnbody).find('header.navbar-fheader .siteLANG.cl-fixbtn').attr('data-fixlangcode') : '',
237					lang_sidebar = (fixbtnData['fh-type']=='sidebar') ? false : true,
238					slang_html = '',
239					lang_str = LANG,
240					validArray = {},
241					validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
242					validplan = (PAGE_MODE == 'c') ? VALIDPLAN : property.VALIDPLAN;
243
244				if(checkEllist && typeof SLANG == 'undefined') {
245					var slang_obj = {
246							use_language : 'off',
247							lists : {},
248							select : lang_txt,
249							select_code : lang_code
250						}
251					SLANG = slang_obj;
252				} else SLANG = (PAGE_MODE == 'c') ? SLANG : property.SLANG;
253				
254				if((typeof SLANG != 'undefined' && typeof SLANG.select_code != 'undefined' && SLANG.select_code)
255			                || (!$.isEmptyObject(SLANG) && SLANG.use_language == 'on' && SLANG.select_code)) {
256			        lang_str = (SLANG['select_code'].toLowerCase()!='ko') ? 'en' : 'ko';
257			    } 
258			   
259				var validArray = {
260					'validtype' : validtype,
261					'validplan' : validplan
262				}
263			
264				$mobile_nav.attr('data-fixtype',fixbtnData['fixtype'])
265							.attr('data-fixlangtype',fixbtnData['fixlangtype'])
266							.attr('data-fixsize',fixbtnData['fixsize'])
267							.attr('data-fixlangsize',fixbtnData['fixlangsize']);			
268			
269				if(fixbtnData['fixtypeText']=='top') fh_sub += $.menuFixBtn.topSet(fixbtnData['fixtypeNum'],false,validArray,SLANG);
270				else fh_sub += $.menuFixBtn.sidebarSet(fixbtnData['fixtypeNum'],false,validArray,SLANG); 				
271
272				if(fixbtnData['fh-type'] == 'top') {
273					var menu_container = $pc_nav.find(' > .container').attr('class'),
274						/*fh_line = '<hr class="fh-line"  style="display: none;"/>',*/
275						fh_nav_pdRight = parseInt($pc_nav.find('#tpl-menu > li > a').css('padding-right')) + parseInt($pc_nav.find('.collapse').css('padding-right')) - 10,
276						fh_content = '\
277							<div class="' + menu_container +' fh-container">\
278								<div class="navbar-wrap">\
279									<ul class="navbar-nav navbar-top cl-fixed-menu" id="fixed-menu">\
280									' + fh_sub + '\
281									</ul>\
282								</div>\
283							</div>\
284						';
285
286					if($pc_nav.find('input[class*="cl-menu-"]').length > 0) $pc_nav.find('input[class*="cl-menu-"]').last().after(fh_content);
287					else $pc_nav.prepend(fh_content);
288					
289					//if(!checkEllist) {
290						if($mobile_nav.find('#fixed-menu').length > 0) $mobile_nav.find('#fixed-menu').replaceWith($(fh_content).find('#fixed-menu').clone());
291						else $mobile_nav.prepend($(fh_content).find('#fixed-menu').clone());
292					//}
293				} else if(fixbtnData['fh-type'] == 'right' || fixbtnData['fh-type'] == 'sidebar') {
294					var fixed_menu_str = (fixbtnData['fh-type'] == 'sidebar') ? '' : 'navbar-right',
295						fh_line = '<hr class="fh-line visible-xs" style="display: none;"/>',
296						fh_content = '\
297							<ul class="navbar-nav ' + fixed_menu_str + ' cl-fixed-menu" id="fixed-menu">\
298							' + fh_sub + '\
299							</ul>\
300						';
301
302					if(checkEllist) {
303						if(fixbtnData['fh-type'] == 'right' && $pc_nav.find('.mini-home').length > 0) {
304							$pc_nav.find('.mini-home').closest('.navbar-collapse').attr('style','display: inline-block !important');
305						}
306					}
307
308					$pc_nav.find('#fixed-menu').remove();
309					$pc_nav.find('#tpl-menu').before(fh_content);
310
311					//if(!checkEllist) {
312						if($mobile_nav.find('#fixed-menu').length > 0) $mobile_nav.find('#fixed-menu').replaceWith($(fh_content).removeAttr('style').clone());
313						else {
314							$(fh_content).removeAttr('style').clone();
315							$mobile_nav.prepend($(fh_content).removeAttr('style').clone());
316						}
317					//}
318				}
319
320				/* 메뉴 디자인변경 :: slang make X => fheader init(pc_nav)에서 적용 ***/
321				if(checkEllist) {
322					slang_html = $.menuFixBtn.fixLangSet(fixbtnData['fixlangtypeNum'],lang_sidebar,SLANG,'',validArray);
323					$pc_nav.find('.siteLANG.cl-fixbtn').remove();
324					(fixbtnData['fh-type']=='sidebar') ? $pc_nav.find('.menu-inner').after(slang_html) : $pc_nav.find('#fixed-menu').append(slang_html);
325											
326					$pc_nav.find('.siteLANG').removeClass('dropup').removeClass('dropdown');
327					$pc_nav.find('.siteLANG .cl-lang').removeClass('dropdown-toggle');
328					$pc_nav.find('.siteLANG .dropdown-menu').remove();
329				}
330			}
331
332			// $mobile_nav.find('#fixed-menu').removeAttr('class');
333			// $mobile_nav.find('#tpl-menu').prop({class:'nav navbar-nav'}).find('ul').prop({class:'',id:''});
334			// $mobile_nav.find('#tpl-menu').removeAttr('class');
335			$mobile_nav.find('#tpl-menu').removeClass('hide').removeClass('preloading');
336			$mobile_nav.find('#tpl-menu').removeAttr('style');
337
338			$mobile_nav.find('.dropdown').not('.siteUM.cl-fixbtn').each(function() {
339				$(this).addClass('menu-has-children').removeClass('dropdown');
340				$(this).find('> a').removeClass('dropdown-toggle');
341				$(this).find('> a i').remove();
342
343				if(($(this).hasClass('active') || $(this).hasClass('open')) && $(this).find('li.active').length > 0) {
344					if($(this).find('li.active').length > 0) $(this).removeClass('active').addClass('open');
345					$(this).find('> a').nextAll('ul').eq(0).slideToggle();
346					$(this).prepend('<i class="fa fa-chevron-up"></i>');
347				} else {
348					$(this).prepend('<i class="fa fa-chevron-down"></i>');
349				}
350			});
351
352			if(checkFixTypeMenu && ($.inArray(s_validtype, ['BS','BN','SM']) > -1 || (checkGabia && s_validtype == 'FR'))) {
353				$mobile_nav.find('#fixed-menu').wrap('<div class="mobilenav_top"></div>');
354				
355				/* 메뉴 디자인변경 :: slang make X => fheader init(mobile_nav)에서 적용 ***/
356				if(checkEllist) {
357					var psearch_ellist = `
358						<li class="siteSEARCH">
359							<a href="javascript:;" class="psearch-btn"><i class="cl-icon cl_icon_magnifier" aria-hidden="true"></i></a>
360							<div class="psearch-overlay">
361								<span class="psearch-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Product Search"></span></span>
362								<div class="psearch-body">
363									<span class="psearch-wrap">
364										<a href="#" class="psearch-icon"><i class="cl-icon cl_icon_magnifier"></i></a>
365										<input class="psearch-input" type="text" name="" placeholder="${$.lang[LANG]['psearch.input.placeholder']}">
366									</span>
367								</div>
368							</div>
369						</li>
370					`;
371					var sitelangStr = $.menuFixBtn.fixLangSet(fixbtnData['fixlangtypeNum'],false,'',true);
372
373					var hide_UM = (s_validtype=='BN' || s_validtype=='SM') ? '' : 'hide';
374					$mobile_nav.find('.mobilenav_top').prepend('<div class="login-content siteUM"><a href="javascript:;" class="login '+hide_UM+'">' + $.lang[lang_str]['manager.site-um.mobile.login'] + clSVG('select_arrow',16,16) + '</a></div>');
375					if(s_validtype=='SM') {
376						$mobile_nav.find('#fixed-menu .siteSEARCH').replaceWith(psearch_ellist);
377					}
378					if(s_validtype && sitelangStr) $mobile_nav.append(sitelangStr).find('.cl-fixbtn.siteLANG');
379				}
380				//if(checkEllist) $mobile_nav.find('#fixed-menu .mobilenav_top').prepend(ellist_mobile_logincontent);
381			}
382			
383			var fh_line = '<hr class="fh-line" />';
384			(checkFixTypeMenu) ? $mobile_nav.find('.mobilenav_top').after(fh_line) : $mobile_nav.find('#fixed-menu').after(fh_line);
385			//$mobile_nav.find('#tpl-menu').after(fh_line);
386
387			var menu_selector = (checkEllist) ? '.elviewhtml .menu-'+sid : '.el-menu .menu-'+sid,
388				$checkMenuEL = $(menu_selector),
389				check_mobile_design = $checkMenuEL.hasClass('mobile-design-clear') ? false : true,
390				check_mnormal = ($checkMenuEL.find('.cl-menu-normal').length > 0) ? true : false,
391				check_msidebar = ($checkMenuEL.find('.cl-menu-sidebar').length > 0) ? true : false,
392				check_moption = ($checkMenuEL.find('.cl-menu-option').length > 0) ? true : false;
393			if(checkEllist) $mobile_nav.addClass('elview');
394			if(check_moption) $mobile_nav.addClass('moption');
395			else if(check_mnormal) $mobile_nav.addClass('mnormal');
396			else if(check_msidebar) $mobile_nav.addClass('msidebar');
397			if(!check_mobile_design) {
398				$mobile_nav.addClass('mobile-design-clear menu-'+sid);
399				$mobile_nav.find('.menu-has-children > ul').addClass('dropdown-menu');
400			}
401			
402			$('.dsgn-body').append($mobile_nav);
403			$('.dsgn-body').append('<div id="mobile-body-overly"><span class="pull-right hand" id="mobile-nav-toggle"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Menu"></span></div>');
404
405			if(checkTemplate) {
406				$(document).find('#mobile-nav').find('.mobilenav_top').hide();
407				$(document).find('#mobile-nav').find('.mobilenav_top').next('.fh-line').hide();
408			}
409
410			var mobile_selector = (checkEllist) ? ['.elview','.elviewhtml'] : ['','.el-menu'];
411			if(check_moption || check_mnormal || check_msidebar) {
412				
413				mobile_selector[0] += (check_moption) ? '.moption' : ((check_msidebar) ? '.msidebar' : '.mnormal');
414				mobile_selector[1] +=  (check_moption) ? ' .cl-menu-option ~ .container' : ((check_msidebar) ? ' .cl-menu-sidebar ~ .container' : ' .cl-menu-normal ~ .container');
415				
416				var nav_font = getComputedStyle(document.querySelector(menu_selector)).getPropertyValue('--menu-fname'),
417					nav_color = getComputedStyle(document.querySelector(menu_selector)).getPropertyValue('--menu-color'),
418					nav_color_active = getComputedStyle(document.querySelector(menu_selector)).getPropertyValue('--menu-color-active'),
419					nav_fixed_key = (check_mobile_design) ? '--menu-fname' : '--fixed-menu-color',
420					fixed_color = (checkFixTypeMenu) ? getComputedStyle(document.querySelector(menu_selector)).getPropertyValue(nav_fixed_key) : '';
421			} else {
422				var nav_font = (checkFixTypeMenu) ? $('.menu-' + sid + ' ul#tpl-menu > li > a').css('font-family') : $('.menu-' + sid + ' ul.navbar-nav > li > a').css('font-family');
423				if(typeof nav_font != 'undefined' && nav_font) {
424					nav_font = nav_font.replace(/\'/gi,'').replace(/\"/gi,'');
425
426					var nav_color = $('.menu-' + sid + ' ul.navbar-nav > li > a:not(:hover)').css('color'),
427						nav_color_active = $('.menu-' + sid + ' ul.navbar-nav > li.active > a').css('color'),
428						fixed_color = '';
429					if(checkFixTypeMenu) {
430						fixed_color = ($('.el-menu .navbar-fheader').hasClass('mobile-design-clear')) ? $('.menu-' + sid + ' ul.cl-fixed-menu >
430 li.cl-fixbtn a').css('color') : $('.el-menu .navbar-toggle .icon-bar').css('background-color');
431					}
432				}
433
434				if(typeof nav_color_active == 'undefined' || nav_color_active == '') nav_color_active = nav_color;
435				var mcss_fixed = (checkFixTypeMenu) ? '\
436						'+mobile_selector[1]+' .siteCART.micon {color : ' + fixed_color + '; }\
437						#mobile-nav'+mobile_selector[0]+'.mobile-design-clear .mobilenav_top a {color : ' + fixed_color + '; }\
438						#mobile-nav'+mobile_selector[0]+'.mobile-design-clear .mobilenav_top svg {fill : ' + fixed_color + '; }\
439					' : '',
440					mcss_more = '\
441					@media only screen and (max-width:768px) {\
442						#mobile-nav'+mobile_selector[0]+' { font-family: ' + nav_font + '; }\
443						#mobile-nav'+mobile_selector[0]+'.mobile-design-clear #tpl-menu li.menu-has-children i,\
444						#mobile-nav'+mobile_selector[0]+'.mobile-design-clear #tpl-menu li.menu-has-children i:focus { color: ' + nav_color + '; }\
445						#mobile-nav'+mobile_selector[0]+'.mobile-design-clear #tpl-menu li.menu-has-children.active i { color: ' + nav_color_active + '; }\
446						'+ mcss_fixed +'\
447					}\
448				';
449	
450				var menu_css_selector = (checkEllist) ? '.elviewcss' : '#menu-'+sid;
451				$(menu_css_selector).append(mcss_more);
452			}
453
454			$('.el-menu').removeClass('_ready');
455		},
456		set: function(mode) {
457			// console.log('fheader set');
458			var checkEllist = (typeof mode != 'undefined' && mode=='ellist') ? true : false,
459				checkStorageCapture = (typeof isStoragebox != 'undefined' && isStoragebox && typeof isCapture != 'undefined' && isCapture) ? true : false,
460				$fh = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
461				fh_type = $fh.attr('data-fh-type'),
462				checkFixTypeMenu = (typeof $fh.attr('data-fixtype') != 'undefined' && $fh.attr('data-fixtype')) ? true : false;
463				
464			if($fh.find('#fixed-menu').children().length == 0) {
465				if(fh_type == 'top') $fh.find('.fh-container').remove();
466				else if(fh_type == 'right' || fh_type == 'sidebar') $fh.find('#fixed-menu, .fh-line').remove();
467				$('#mobile-nav #fixed-menu, #mobile-nav .fh-line').remove();
468			}
469			
470			if(!checkFixTypeMenu) {
471				if(checkStorageCapture) {
472				} else {
473					if(fh_type == 'top') {
474						$fh.find('.fh-container').eq(0).slideToggle();
475					} else if(fh_type == 'right' || fh_type == 'sidebar') {
476						$fh.find('#fixed-menu').slideToggle();
477					}
478					
479					$fh.find('.fh-line').slideToggle();
480				}
481			}			
482			
483			setTimeout(function() {				
484				if(checkEllist) {
485					if(fh_type == 'right' && $fh.find('.mini-home').length > 0) {
486						$fh.find('.mini-home').closest('.navbar-collapse').attr('style','display: inline-block !important');
487					} else if(checkFixTypeMenu && fh_type == 'sidebar') {
488						$fh.find('#fixed-menu').css('overflow','');
489					}
490				} else {
491					if($('#page-loading-css').length == 0) {
492						setTimeout(function() {
493							$.fheader.position();
494						},400);
495					}
496				}
497							
498			},400);
499		},
500		position: function() {
501			if(!$('header.navbar').hasClass('navbar-fheader')) {
502	            var parentDocument = $(window.parent.document),
503	                $detail_modal = parentDocument.find('.product-detail-modal');
504	            if($detail_modal.length) {
505	            	($('.openBandBanner').length) ? 
506	            		$('.dsgn-body').css('padding-top','120px') :
507	            		$('.dsgn-body').css('padding-top','0px');
508	            }
509				return false;
510			}
511
512			// console.log('fheader position');
513			// if(!$('header.navbar').hasClass('navbar-fheader')) return false;
514
515			var checkEllist = (typeof isElviewPage != 'undefined' && isElviewPage === true) ? true : false,
516				$fh = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
517				fh_type = $fh.attr('data-fh-type'),
518				fh_postion = (typeof $fh.attr('data-position') != 'undefined') ? $fh.attr('data-position') : '',
519				fh_transparent = ($fh.hasClass('transparent')) ? true : false,
520				checkFixTypeMenu = (typeof $fh.attr('data-fixtype') != 'undefined' && $fh.attr('data-fixtype')) ? true : false;
521				
522			var body_width = (PAGE_MODE == 'c') ? $('body').width() : window.innerWidth;
523			
524			if(body_width <= 768) {
525				if(fh_type == 'right' && $fh.find('.mini-home').length > 0) { 
526					$fh.find('.mini-home').parent().removeAttr('style'); 
527				}
528				$fh.find('.psearch-overlay.open').removeClass('open');
529				$('.cl-popupBanner').removeClass('zindex20');
530				if(!checkFixTypeMenu) $fh.find('#fixed-menu-sub').closest('.fh-container').eq(0).hide();
531			} else {
532				if(fh_type == 'right' && $fh.find('.mini-home').length > 0) {
533					if(!checkFixTypeMenu) {
534						$fh.find('.mini-home').closest('.navbar-collapse').attr('style','display: inline-block !important');
535					} 
536				}
537
538				if(fh_type == 'right' && !$fh.hasClass('sidebar') && $fh.find(' > .container[data-fh-align]').length > 0) {
539					$.fheader.refreshFixedSub();
540				}
541
542				$('#mobile-nav .psearch-overlay.open').removeClass('open');
543				$('.cl-popupBanner').removeClass('zindex20');
544				if($('.dsgn-body').hasClass('mobile-nav-active')) $fh.find('.navbar-toggle').click();
545			}
546
547			if(fh_transparent) {
548				if($('.cl-bandBanner').length == 0) {
549					$('.dsgn-body').css('padding-top','0px');
550					if(PAGE_MODE == 'c') $('.el-menu_ctrl .config-element').removeAttr('style');
551				}
552			} else if(fh_postion != 'relative') {
553				if(fh_type == 'sidebar' && body_width > 768) {
554					var pt = '0px';
555					if(typeof getComputedStyle(document.querySelector('body')).getPropertyValue('--bandBanner-height-pc') != 'undefined') {
556						pt = getComputedStyle(document.querySelector('body')).getPropertyValue('--bandBanner-height-pc');
557					}
558					$('.dsgn-body').css('padding-top',pt);
559					return false;
560				}
561			}
562
563			if(PAGE_MODE == 'c') {
564				if($('.dsgn-body').get(0).scrollHeight  > $('.dsgn-body').innerHeight()) {
565					var scrollbar_gap = window.innerWidth - $('.dsgn-body').get(0).clientWidth;
566					$('.navbar-fixed-top, .navbar-fixed-bottom').css('right',scrollbar_gap);
567				} else {
568	                $('.navbar-fixed-top, .navbar-fixed-bottom').removeAttr('style');
569				}
570			}
571			if(checkEllist) {
572				if(checkFixTypeMenu) setFixedMenuCss(true);
573			} else {
574				var delay_time = (PAGE_MODE == 'c') ? 800 : 0;
575				setTimeout(function() {
576					var header_h = (fh_transparent || ($fh.hasClass('sidebar') && $('.dsgn-body').width() > 767) ) ? 0 : $fh.outerHeight(),
577						band_h = $.siteBanner.getBandHeight();
578					if($fh.find('.cl-menu-option.open:not(.single:not(.nfullDrop))').length > 0 && $fh.find('.cl-menu-option.open').is('[data-moption="nfull"], [data-moption="ntoggle"]')) {
579						var hide_h = $fh.find('.moption-container').outerHeight();
580						header_h -= hide_h;
581					}
582					$('.dsgn-body').css('padding-top', (band_h + header_h)+'px'); 
583					if($('.el_0.element').is('[data-type="gallery"][data-type2="premium"][data-feature*=fixedscroll]')) gjs01SetFixedscroll($('.el_0.element'));
584				}, delay_time);
585
586				if(PAGE_MODE == 'c') {
587					setTimeout(function() {
588						var btn_top = $('header.navbar').outerHeight();
589						$('.addElementButton.addel-menu').css('top',btn_top + 'px');
590					}, delay_time+200);
591				}
592			}
593		}
594	}
595
596	$.moption = {
597		getList: function(menu_selector) {
598			var checkEditList = (menu_selector.match(/^\.elmenu-color-edit/gi)) ? true : false,
599				moption_list = [];
600
601			$(menu_selector).find('#tpl-menu > li').each(function() {
602				var tmp_child = [],
603					tmp_main = $(this);
604				if(tmp_main.hasClass('dropdown')) {
605					tmp_main.find('.dropdown-menu > li').each(function() {
606						var tmp_sub = $(this);
607						tmp_child.push({
608							'idx0': moption_list.length,
609							'idx1': tmp_child.length,
610							'name': tmp_sub.find(' > a').eq(0).text().trim(),
611							'active': (tmp_sub.hasClass('active')) ? 'active' : '',
612							'href': (checkEditList) ? 'javascript:;' : '',
613							'target': '',
614							'isbookmark': '',
615							'isflink': '',
616							'depth': 1,
617							'children': tmp_child, 
618						});
619					});
620				}
621			
622				moption_list.push({
623					'idx0': moption_list.length,
624					'name': tmp_main.find(' > a').eq(0).text().trim(),
625					'active': (tmp_main.hasClass('active')) ? 'active' : '',
626					'href': (checkEditList) ? 'javascript:;' : '',
627					'target': '',
628					'isbookmark': '',
629					'isflink': '',
630					'depth': 0,
631					'children': tmp_child, 
632				});
633			});
634			return moption_list;
635		},
636		init: function(mode) {
637			// console.log('fh moption(mode: '+mode+')');
638
639			var checkElviewer = '';
640			if(window.parent && window.parent != this && $('.elviewhtml').length > 0) {
641				checkElviewer = $('#el-list-image .elgrid.active', window.parent.document).find('.blockname-str').text().trim();
642			}
643
644			var s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
645				s_service = (PAGE_MODE == 'c') ? SERVICE : property.SERVICE,
646				checkGabia = (s_service.indexOf('gabia') > -1) ? true : false,
647				checkEllist = (typeof mode != 'undefined' && mode == 'ellist') ? true : false,
648				checkMenuEdit = (typeof mode != 'undefined' && mode == 'menuedit') ? true : false,
649				checkTemplate = (typeof property != 'undefined' && property.TEMPLATE && property.TEMPLATE=='1') ? true : false,
650				sid = (PAGE_MODE == 'c') ? ((checkEllist) ? checkElviewer.replace(/menu-/gi,'') : SID) : property.SID,
651				pc_seletor = (checkEllist) ? '.elviewhtml header.navbar' : ((checkMenuEdit) ? '.elmenu-color-edit header.navbar' : '.el-menu header.navbar'),
652				$pc_nav = $(pc_seletor),
653				$mobile_nav = $pc_nav.find('#tpl-menu').closest('.navbar-menu-'+sid).clone(),
654				checkFixTypeMenu = (typeof $pc_nav.attr('data-fixtype') != 'undefined' && $pc_nav.attr('data-fixtype')) ? true : false;
655
656			var moption = $pc_nav.find('.cl-menu-option').attr('data-moption'),
657				checkDrawClmoption = ($.inArray(moption, ['nfull','ntoggle']) > -1) ? true : false;
658			if(checkDrawClmoption) {
659				var moption_table = '<ul class="cl-'+moption+' cl-moption"></ul>',
660					moption_col = '<li class="cl-moption-col"></li>',
661					moption_row = '<div class="cl-moption-row"></div>';
662
663				if($pc_nav.find('.container.moption-container').length > 0) $pc_nav.find('.container.moption-container').html('<div class="moption-row"></div>');
664				else $pc_nav.find('.container:not(:is(.fh-container, .moption-container))').after('<div class="container moption-container"><div class="moption-row"></div></div>');
665				var $moptionContainer = $pc_nav.find('.container.moption-container'),
666					$moptionRow = $moptionContainer.find('.moption-row');
667				if($pc_nav.find('.container:not(:is(.fh-container, .moption-container))').hasClass('full-width')) $moptionContainer.addClass('full-width');
668
669				$moptionRow.append(moption_table);
670				var menu_option = (PAGE_MODE == 'c') ? MENUOPTION : property.MENUOPTION,
671					$moptionTable = $moptionContainer.find('.cl-moption');
672
673				if(checkMenuEdit) menu_option = $.moption.getList(pc_seletor);
674				$.each(menu_option, function(idx0, obj0) {
675					var $tmpCol = $(moption_col),
676						tmp_row = moption_row.replace(/cl\-moption\-row\"\>\</g,'cl-moption-row '+obj0.active+'"><a href="' + obj0.href + '" ' + obj0.target + obj0.isbookmark + obj0.isflink + '>
676' + obj0.name + '</a><');
677					if(obj0.children.length > 0) {
678						$.each(obj0.children, function(idx1, obj1) {
679							tmp_row += moption_row.replace(/cl\-moption\-row\"\>\</g,'cl-moption-row '+obj1.active+'" data-parent="'+obj1.idx0+'"><a href="' + obj1.href + '" ' + obj1.target + obj1.isbookmark + obj1.isflink + '>' + obj1.name + '</a><');
680						});
681					}
682
683					$tmpCol.append(tmp_row);
684					if($tmpCol.find('.cl-moption-row').length > 1) $tmpCol.addClass('has-sub');
685					if(menu_option.length-1 == idx0) $tmpCol.addClass('last-sub');
686					$moptionTable.append($tmpCol);
687				});
688			}
689
690			switch(moption) {
691				case 'nfull':
692
693					var hasSubMenu = (PAGE_MODE == 'c') ? MENUCHECK.sub : property.MENUCHECK.sub;
694					if(hasSubMenu) $pc_nav.find('.cl-menu-option').removeClass('single');
695					else $pc_nav.find('.cl-menu-option').addClass('single');
696
697					$pc_nav.find('#tpl-menu > li, .moption-container').off('mouseover mouseleave').on({
698						mouseover: function(e) {
699							if($(this).find('.cl-moption').is(':empty') || (PAGE_MODE == 'c' && $('#el-blockConfig').hasClass('open') && selectEL != 'el-menu')) return false;
700
701							$(this).closest('header').find('.cl-menu-option').addClass('open');
702						},
703						mouseleave: function(e) {
704							if($(this).find('.cl-moption').is(':empty')) return false;
705
706							if(	$(this).closest('header').find('.cl-menu-option').hasClass('fixed') ||
707								$(this).closest('header').find('.cl-menu-option').hasClass('nfullDrop') ||
708								$('#el-blockConfig').is('.open')
709							) {
710								return false;
711							}
712
713							$(this).closest('header').find('.cl-menu-option').removeClass('open');
714							if($(this).closest('header').find('.cl-menu-option').is('[data-mwidth="all"]')) {
715								$.fheader.position();
716							}
717						}
718					});
719					break;
720
721				case 'ntoggle':
722					break;
723
724				default:
725					break;
726			}
727
728			$pc_nav.find('.cl-drop-fixed-menu ~ .navbar-toggle, .cl-menu-option ~ .container .navbar-toggle').off('click').on({
729				click: function() {
730					if($('body').width() > 767) $.moption.setRootBlock($pc_nav,'--block-height',true);
731				},
732			});
733
734
735			$pc_nav.ready(function() {
736				setTimeout(function() {
737					if($pc_nav.find('.cl-menu-option[data-moption="nfull"]').length > 0) $.moption.checkNfullDrop(pc_seletor);
738					else if($pc_nav.find('.cl-menu-option[data-moption="ntoggle"]').length > 0 && $pc_nav.is('[data-fh-type="right"]')) $.moption.drawClDropFixedmenu($pc_nav);
739				}, 300);
740			});
741
742            $(window).resize(function() {
743                if(this.moptionResizeTO) {
744                    clearTimeout(this.moptionResizeTO);
745                }
746                this.moptionResizeTO = setTimeout(function() {
747                    $(this).trigger('resizeMoptionEnd');
748                }, 300);
749            });
750            $(window).on('resizeMoptionEnd', function() {
751                $.fheader.position();
752                if($pc_nav.find('.cl-menu-option[data-moption="nfull"]').length > 0) $.moption.checkNfullDrop(pc_seletor);
753				else if($pc_nav.find('.cl-menu-option[data-moption="ntoggle"]').length > 0 && $pc_nav.is('[data-fh-type="right"]')) $.moption.drawClDropFixedmenu($pc_nav);
754
755				if($pc_nav.find('.cl-menu-option').length > 0  && $('body').width() < 767) {
756					$pc_nav.find('.cl-menu-option').removeClass('open');
757				} else {
758			        if ($('header #tpl-menu').children().length) $('header.navbar-fheader .navbar-toggle').css({ 'visibility': 'visible' });
759			        else $('header.navbar-fheader .navbar-toggle').css({ 'visibility': 'hidden' });
760			        $('.dsgn-body').removeClass('mobile-nav-active');
761			        $('#mobile-body-overly').removeClass('in');
762			        $('#mobile-nav .siteLANG.cl-fixbtn').hide();
763				}
764            });
765		},
766		setRootBlock(thisBlock,root_key,usedtoggle) {
767			if(	typeof thisBlock != 'undefined' && thisBlock.length > 0 && thisBlock.find('.cl-menu-option').length > 0) {
768				if(root_key == '--block-height') {
769					var h = thisBlock.outerHeight();
770					document.querySelector('header').style.setProperty('--block-height', h + 'px', null);
771
772					if($('#el-blockConfig').hasClass('open')) {
773						if(!thisBlock.find('.cl-menu-option').hasClass('open')) thisBlock.find('.cl-menu-option').toggleClass('open');
774					} else if(usedtoggle) {
775						thisBlock.find('.cl-menu-option').toggleClass('open');
776					} else {
777						thisBlock.find('.cl-menu-option').removeClass('open');
778					}
779
780					if(thisBlock.find('.cl-menu-option').is('.nfullDrop[data-mo
780ption="nfull"]')) {
781						var h_p_b = thisBlock.css('padding-bottom').replace(/[^0-9]/g,'') * 1;
782						document.querySelector('header').style.setProperty('--cl-nfull-top', h_p_b + 'px', null);
783					}
784				}
785			}
786
787		},
788		drawClDropFixedmenu: function(pcNav) {
789			if($('header #fixed-menu').length > 0) {
790				var drop_fixed_menu = '<ul class="cl-drop-fixed-menu">' + $('header #fixed-menu').html() + '</ul>';
791				if(pcNav.find('.cl-drop-fixed-menu').length > 0) pcNav.find('.cl-drop-fixed-menu').replaceWith(drop_fixed_menu);
792				else if(pcNav.find('.navbar-header .micon').length > 0) pcNav.find('.navbar-header .micon').before(drop_fixed_menu);
793				else pcNav.find('.navbar-header .navbar-toggle').before(drop_fixed_menu);
794			}
795		},
796		checkNfullDrop: function(nav_selector) {
797			var $pc_nav = $(nav_selector),
798				isellist = (nav_selector.match(/^\.elviewhtml/gi)) ? true : false,
799				iselmenuedit = (nav_selector.match(/^\.elmenu-color-edit/gi)) ? true : false,
800				isparent = (typeof window.parent != 'undefined' && window.parent != this) ? true : false;
801
802			if($pc_nav.find('.cl-menu-option[data-moption="nfull"]').length > 0) {
803
804				var checkBlockConfig = $('#el-blockConfig').hasClass('open');
805				if(checkBlockConfig || isparent) {
806					$pc_nav.find('.cl-drop-fixed-menu').remove();
807					$pc_nav.find('.cl-menu-option').removeAttr('data-nfull-drop').removeClass('nfullDrop');
808				}
809
810				var delay = (checkBlockConfig) ? 500 : 0;
811				setTimeout(function() {
812					var checkMfullDrop = $pc_nav.find('.cl-menu-option').is('[data-nfull-drop]'),
813						// checkMenuOrg = ($pc_nav.find('.cl-menu-option').is('[data-mwidth]')) ? false : true,
814						// tpl_menu_selector = (checkMenuOrg) ? nav_selector+' #tpl-menu' : nav_selector+' .cl-moption',
815						tpl_menu_selector = nav_selector + ' #tpl-menu',
816						m_wrap = $(tpl_menu_selector).first().width(),
817						m_w = 0,
818						mdrop_onoff = (checkMfullDrop) ? $pc_nav.find('.cl-menu-option').hasClass('nfullDrop') : false;
819
820					var fixed_menu_w = $pc_nav.find('#fixed-menu').outerWidth();
821					if($pc_nav.is('[data-fh-type="right"][data-fixtextalign="center"]')) {
822						$pc_nav.find(nav_selector+' #tpl-menu').css('padding-left',fixed_menu_w + 'px');
823					} else {
824						document.querySelector(nav_selector+' #tpl-menu').style.removeProperty('padding-left');
825					}
826
827					if(checkMfullDrop) {
828						var m_container = $pc_nav.find('.container:not(.moption-container, .fh-container)').eq(0).width(),
829							m_drop = $pc_nav.find('.cl-menu-option').attr('data-nfull-drop');
830						if(Number(m_drop) > 0 && m_container > Number(m_drop)) {
831							$pc_nav.find('.cl-menu-option[data-moption="nfull"]').removeClass('nfullDrop');
832						} else {
833							$pc_nav.find('.cl-menu-option[data-moption="nfull"]').addClass('nfullDrop');
834							setFixedMenuCss(isellist);
835						}
836					} else {
837						$(tpl_menu_selector).first().children().each(function() {
838							m_w += $(this).outerWidth();
839						});
840
841						var m_top = $(tpl_menu_selector).first().children().first().offset().top,
842							m_last = $(tpl_menu_selector).first().children().last().offset().top;
843						if(m_top != m_last || m_w > m_wrap) {
844							var mcontainer = $pc_nav.find('.container:not(.moption-container, .fh-container)').eq(0).width(),
845								mdrop = mcontainer + (m_w - m_wrap);
846
847							$pc_nav.find('.cl-menu-option[data-moption="nfull"]').attr('data-nfull-drop',mdrop).addClass('nfullDrop');
848							setFixedMenuCss(isellist);
849						} else {
850							$pc_nav.find('.cl-menu-option[data-moption="nfull"]').removeAttr('data-nfull-drop');
851						}
852					}
853
854					if($pc_nav.is('[data-fh-type="right"]') && $pc_nav.find('.cl-menu-option').hasClass('nfullDrop')) {
855						$.moption.drawClDropFixedmenu($pc_nav);
856					}
857
858					// if(iselmenuedit) $pc_nav.find('.cl-menu-option[data-moption="nfull"]').removeClass('nfullDrop');
859					if($('body').width() > 767) $.moption.setRootBlock($pc_nav,'--block-height',false);
860				}, delay);
861			} else {
862				if($('body').width() > 767) $.moption.setRootBlock($pc_nav,'--block-height',false);
863			}
864
865		},
866	}
867
868	$.psearch = {
869		init: function() {
870			// console.log('psearch init');
871			if(!$('.el-menu header.navbar').hasClass('navbar-fheader')) return false;
872
873			// psearch - 쇼핑몰 요금제 사용여부 체크 후 on/off
874            var s_validplan = (PAGE_MODE == 'c') ? VALIDPLAN : property.VALIDPLAN,
875                s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
876                checkSM = (s_validplan && s_validtype == 'SM') ? true : false;
877
878            if(checkSM) $.psearch.set('on');
879			else $.psearch.set('off');
880		},
881		set: function(onoff) {
882			// console.log('psearch set');
883			if(!$('.el-menu header.navbar').hasClass('navbar-fheader')) return false;
884
885			if(onoff.match(/on/gi)) $.psearch.makeSiteSEARCH();
886			else {
887				$('#fixed-menu, #fixed-menu-sub').find('.siteSEARCH').remove();
888			}
889		},
890		makeSiteSEARCH: function() {
891			// console.log('psearch makeSiteSearch');
892			// 우선 PC, MOBILE 구조 동일하게 적용함 => (menufixbtn적용 전 메뉴블럭)
893			
894			/* Shopping Only KO Site */
895			// var slang = (PAGE_MODE == 'c') ? SLANG : property.SLANG;
896			// if(typeof slang != 'undefined' && typeof slang.select_code != 'undefined' && slang.select_code != 'ko') {
897			// 	$('#fixed-menu, #fixed-menu-sub').find('.siteSEARCH').remove();
898			// 	return false;
899			// }
900
901			var pc_nav = $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub');
902			var mobile_nav = $('#mobile-nav #fixed-menu');
903			var checkFixTypeMenu = (typeof $('.el-menu header.navbar').attr('data-fixtype') != 'undefined' && $('.el-menu header.navbar').attr('data-fixtype')) ? true : false;
904			var checkLux = (PAGE_MODE == 'c') ? LUX : property.LUX;
905			var search_icon = (checkFixTypeMenu) ? clSVG('fixbtn_search4',28,28) : '<i class="cl-icon cl_icon_magnifier" aria-hidden="true"></i>';
906				
907			var content = (checkFixTypeMenu) ? `
908				<div class="psearch-overlay">
909                    <span class="psearch-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Product Search"></span></span>
910                    <div class="psearch-body">
911                        <span class="psearch-wrap">
912                            <a href="#" class="psearch-icon"><i class="cl-icon cl_icon_magnifier"></i></a>
913                            <input class="psearch-input" type="text" name="" placeholder="${$.lang[LANG]['psearch.input.placeholder']}">
914                        </span>
915                    </div>
916                </div>
917			` : `
918				<li class="siteSEARCH">
919                    <a href="javascript:;" class="psearch-btn"><i class="cl-icon cl_icon_magnifier" aria-hidden="true"></i></a>
920                    <div class="psearch-overlay">
921                        <span class="psearch-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Product Search"></span></span>
922                        <div class="psearch-body">
923                            <span class="psearch-wrap">
924                                <a href="#" class="psearch-icon"><i class="cl-icon cl_icon_magnifier"></i></a>
925                                <input class="psearch-input" type="text" name="" placeholder="${$.lang[LANG]['psearch.input.placeholder']}">
926                            </span>
927                        </div>
928                    </div>
929                </li>
930			`;
931			var mobile_content = `
932				<li class="siteSEARCH">
933					<a href="javascript:;" class="psearch-btn">${search_icon}</a>
934					<div class="psearch-overlay">
935						<span class="psearch-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Product Search"></span></span>
936						<div class="psearch-body">
937							<span class="psearch-wrap">
938								<a href="#" class="psearch-icon"><i class="cl-icon cl_icon_magnifier"></i></a>
939								<input class="psearch-input" type="text" name="" placeholder="${$.lang[LANG]['psearch.input.placeholder']}">
940							</span>
941						</div>
942					</div>
943				</li>
944			`;
945			
946			if(pc_nav.find('.siteSEARCH').length > 0) {
947				if(checkFixTypeMenu){
948					pc_nav.find('.siteSEARCH').find('a').addClass('psearch-btn');
949					pc_nav.find('.siteSEARCH').append(content);
950				} else pc_nav.find('.siteSEARCH').replaceWith(content);
951			} else pc_nav.prepend(content);
952			
953			if(mobile_nav.find('.siteSEARCH').length>0) {
954				if(checkFixTypeMenu) {
955					var regExp = new RegExp(/cl\-fixbtn|cl\-visible/, "gi"),
956						addClass = (mobile_nav.find('.siteSEARCH').attr('class').match(regExp)!==null) ? mobile_nav.find('.siteSEARCH').attr('class').match(regExp).join(" ") : '',
957						$site_search = mobile_nav.find('.siteSEARCH');
958
959					mobile_nav.find('.siteSEARCH').find('a').addClass('psearch-btn');
960					mobile_nav.find('.siteSEARCH').replaceWith(mobile_content);
961					mobile_nav.find('.siteSEARCH').addClass(addClass);
962
963					if(pc_nav.find('.siteSEARCH').css('display')=='none') mobile_nav.find('.siteSEARCH').hide();
964				} else mobile_nav.find('.siteSEARCH').replaceWith(mobile_content);
965			} else mobile_nav.prepend(mobile_content);
966			
967			// #fixed-menu-sub psearch not working 
968			// pc_nav.each(function() {
969			// 	if($(this).attr('id') == 'fixed-menu-sub') {
970			// 		$(this).find('.psearch-overlay').remove();
971			// 	}
972			// });
973		},
974		groupByTab: function(list) {
975			var groups = {
976				all: [],
977				shopping: [],
978				forum: [],
979				gallery: [],
980				etc: []
981			};
982
983			for (var i = 0; i < list.length; i++) {
984				var o = list[i];
985				var tab = o.tab || 'etc';
986
987				groups.all.push(o);
988
989				if (!groups[tab]) tab = 'etc';
990				groups[tab].push(o);
991			}
992
993			return groups;
994		},
995		initTabs: function($wrap){
996			var groups = $wrap.data('psearchGroups') || {};
997			var $tabs = $wrap.find('.psearch-tabs');
998			if($tabs.length==0) return;
999
1000			var active = $tabs.attr('data-active') || 'all';
1001
1002			// 초기 활성화
1003			$wrap.find('.psearch-tab-nav .tab-item').removeClass('active');
1004			$wrap.find('.psearch-tab-nav .tab-item[data-tab="'+active+'"]').addClass('active');
1005
1006			$wrap.find('.psearch-panel').hide();
1007			$wrap.find('.psearch-panel[data-tab="'+active+'"]').show();
1008
1009			// 클릭 이벤트
1010			$wrap.find('.psearch-tab-nav .tab-item').live('click', function(e){
1011				e.preventDefault();
1012				var tab = $(this).attr('data-tab');
1013
1014				var tabPages = $wrap.data('psearchTabPages') || {};
1015				tabPages[tab] = 1;
1016				$wrap.data('psearchTabPages', tabPages);
1017
1018				$tabs.attr('data-active', tab);
1019				if($wrap.find('#psearch-tab').length) $wrap.find('#psearch-tab').val(tab);
1020
1021				$wrap.find('.psearch-tab-nav .tab-item').removeClass('active');
1022				$(this).addClass('active');
1023
1024				$wrap.find('.psearch-panel').hide();
1025				$wrap.find('.psearch-panel[data-tab="'+tab+'"]').show();
1026
1027				var cnt = groups[tab] ? groups[tab].length : 0,
1028					cnt_lang = (LANG == 'ko') ? '개' : '';
1029				$wrap.find('.psearch-total-count').html('<strong>'+cnt + cnt_lang +'</strong><span class="count-txt">' + $.lang[LANG]['fheader.psearch.result'] + '</span>');
1030			});
1031		},
1032		view: function() {
1033			// console.log('psearch view');
1034			// var deferred = $.Deferred();
1035
1036			var check_p = (property.PAGE == 'psearch') ? true : false;
1037			if(check_p) {
1038				var p_stx = property.PARENT?.psearch_stx ?? '';
1039				var p_total = property.PARENT?.psearch_total ?? 0;
1040				var p_list = property.PARENT['psearch_list'];
1041				var p_page_num = property.PARENT['psearch_num'];
1042				var p_view = property.PARENT['psearch_view'];
1043				var p_selector = (property.LUX) ? 'psearch-block' : 'psearch-view';
1044
1045				let psearch_view = '';
1046				if(property.LUX) {
1047					//lux search view
1048					psearch_view = property.PARENT['psearch_eltag'];
1049					if($('style#psearchblockcss').length == 0) {
1050						 $('body').append('<link rel="stylesheet" type="text/css" id="psearchblockcss" href="/css/block/psearch_block.css">');
1051					}
1052					if($('script#psearchblockjs').length == 0) {
1053						var psearchJS = document.createElement('script');
1054						psearchJS.setAttribute('src', '/js/block/psearch_block.js');
1055						psearchJS.setAttribute('id', 'psearchblockjs');
1056						document.body.appendChild(psearchJS);
1057
1058						psearchJS.onload = function() {
1059							$('body').append('<input type="hidden" id="psearchblockjs" data-src="/js/block/psearch_block.js">');
1060							$(`.${p_selector}`).fadeIn().removeAttr('style');
1061
1062							if($('.psearch-block .pfilter-fbox .fcol-c-ul:not([data-key="psearch"]) > li.active').length > 0) {
1063								if($('.psearch-block .pfilter-fbox .fcol-c-ul[data-key="brand"] > li.active').length > 0) {
1064									$('.psearch-block .pfilter-fbox .fcol-c-ul[data-key="brand"]').closest('.frow').addClass('open');
1065								}
1066								var cancel_svg = clSVG('close',10,10,true,'pick-cancel-btn');
1067								$('.psearch-block .pfilter-fbox .fcol-c-ul:not([data-key="psearch"]) > li.active').each(function() {
1068									var isOnly = $(this).closest('ul').is('[data-only="true"]');
1069									var pfilter_key = $(this).closest('ul').attr('data-key');
1070									var pfilter_name = $(this).text().trim();
1071									var pfilter_val = $(this).attr('data-val');
1072									var pfilter_input = (isOnly) ? pfilter_key : pfilter_key+'[]';
1073									if(isOnly) $('#psearchForm .psearch-pick.'+pfilter_key+'').remove();
1074									$('#psearchForm').append('<input type="hidden" class="psearch-pick '+pfilter_key+'" name="'+pfilter_input+'"  value="'+pfilter_val+'" />');
1075									$('.psearch-block .pfilter-fbox .frow.last .fcol-c-ul[data-key="psearch"]').append('<li data-key="'+pfilter_key+'" data-val="'+pfilter_val+'"><div class="fcol-c-label"><span class="fcol-c-name">'+pfilter_name+'</span>'+cancel_svg+'</div></li>');
1076								});
1077								$('.psearch-block .pfilter-fbox .frow.last').removeClass('hide');
1078							} else {
1079								$('.psearch-block .pfilter-fbox .frow.last').addClass('hide');
1080							}
1081						}
1082					}
1083
1084				} else {
1085					//shopping search view
1086					var wrap = ($('header.navbar .container').hasClass('full-width')) ? 'full-width' : '';
1087					psearch_view = '\
1088						<div class="psearch-view" data-sid="'+property.SID+'" style="height:' + ($(document).height() * 0.2) + 'px; display: none;">\
1089							<input type="hidden" id="psearch-stx" value="' + p_stx + '" />\
1090							<input type="hidden" id="psearch-total" value="' + p_total + '" />\
1091							<input type="hidden" id="psearch-tab" value="all" />\
1092							<div class="container ' + wrap + '">\
1093								<div class="psearch-body">\
1094									<div class="row">\
1095										<div class="col-sm-offset-2 col-md-offset-4 col-xs-12 col-sm-8 col-md-4">\
1096											<span class="psearch-wrap">\
1097												<input class="psearch-input" type="text" name="" placeholder="' + $.lang[LANG]['fheader.psearch'] + '" value="' + p_stx + '">\
1098												<a href="#" class="psearch-icon"><i class="cl-icon cl_icon_magnifier"></i></a>\
1099											</span>\
1100										</div>\
1101									</div>\
1102					';
1103
1104					// 탭 분류
1105					var groups = $.psearch.groupByTab(p_list);
1106
1107					var PAGE_SIZE = 8;
1108					var PAGE_VIEW = 5;
1109					var $pEL = $('.'+p_selector);
1110					$pEL.data('psearchPageSize', PAGE_SIZE);
1111					$pEL.data('psearchPageView', PAGE_VIEW);
1112
1113					// 탭별
1114					$pEL.data('psearchTabPages', { all:1, shopping:1, forum:1, gallery:1, etc:1 });
1115
1116					// all 섹션별
1117					$pEL.data('psearchAllSectionPages', { shopping:1, gallery:1, forum:1, etc:1 });
1118
1119					var tabCount = {
1120						all: groups.all.length,
1121						shopping: groups.shopping.length,
1122						forum: groups.forum.length,
1123						gallery: groups.gallery.length,
1124						etc: groups.etc.length
1125					};
1126
1127					// 기본 활성 탭(쇼핑>게시판>갤러리>기타)
1128					var activeTab = 'all';
1129					// 전체 검색결과 수
1130					var totalCnt = tabCount.shopping + tabCount.forum + tabCount.gallery + tabCount.etc;
1131					if (totalCnt === 0) { //검색결과 0
1132						activeTab = 'all';
1133					} else {
1134						if (tabCount.shopping > 0 && totalCnt === tabCount.shopping) {
1135							activeTab = 'shopping';
1136						} else if (tabCount.forum > 0 && totalCnt === tabCount.forum) {
1137							activeTab = 'forum';
1138						} else if (tabCount.gallery > 0 && totalCnt === tabCount.gallery) {
1139							activeTab = 'gallery';
1140						} else if (tabCount.etc > 0 && totalCnt === tabCount.etc) {
1141							activeTab = 'etc';
1142						} else {
1143							activeTab = 'all';
1144						}
1145					}
1146
1147					var p_sort = (typeof property.PARENT['psearch_sort'] != 'undefined' && property.PARENT['psearch_sort']) ? property.PARENT['psearch_sort'] : '
1147new',
1148						cnt_lang = (LANG == 'ko') ? '개' : '';
1149					// 탭 네비
1150					psearch_view += '\
1151						<div class="psearch-tabs" data-active="'+activeTab+'">\
1152							<ul class="psearch-tab-nav">\
1153								<li class="tab-item" data-tab="all">' + $.lang[LANG]['fheader.psearch.all'] + ' <span class="cnt">('+tabCount.all+')</span></li>\
1154								<li class="tab-item" data-tab="shopping">' + $.lang[LANG]['fheader.psearch.shopping'] + ' <span class="cnt">('+tabCount.shopping+')</span></li>\
1155								<li class="tab-item" data-tab="gallery">' + $.lang[LANG]['fheader.psearch.gallery'] + ' <span class="cnt">('+tabCount.gallery+')</span></li>\
1156								<li class="tab-item" data-tab="forum">' + $.lang[LANG]['fheader.psearch.forum'] + ' <span class="cnt">('+tabCount.forum+')</span></li>\
1157								<li class="tab-item" data-tab="etc">' + $.lang[LANG]['fheader.psearch.etc'] + ' <span class="cnt">('+tabCount.etc+')</span></li>\
1158							</ul>\
1159						</div>\
1160						<div class="psearch-sort-wrap">\
1161							<div class="psearch-total-count"><strong>'+ p_total + cnt_lang +'</strong><span class="count-txt">' + $.lang[LANG]['fheader.psearch.result'] + '</span></div>\
1162							<div class="gallery-sort-nav goption-row psearch-sort" data-sort-lang="' + LANG + '">\
1163								<div class="toggle-dropdown display-flex space-between align-items-center">\
1164									<span class="active-sort">'+(p_sort=='old' ? $.lang[LANG]['fheader.psearch.dropdown.old'] : $.lang[LANG]['fheader.psearch.dropdown.recent'])+'</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="m8 11.35-6-6 .71-.7L8 9.94l5.29-5.29.71.7z"/></svg>\
1165								</div>\
1166								<ul>\
1167									<li class="'+(p_sort=='new' ? 'active' : '')+'"><a href="javascript:;" data-sort="new">' + $.lang[LANG]['fheader.psearch.dropdown.recent'] + '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 10" width="13" height="10"><path d="m5 9.71-5-5 1.41-1.42L5 6.88 11.59.29 13 1.71z"/></svg></a></li>\
1168									<li class="'+(p_sort=='old' ? 'active' : '')+'"><a href="javascript:;" data-sort="old">' + $.lang[LANG]['fheader.psearch.dropdown.old'] + '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 10" width="13" height="10"><path d="m5 9.71-5-5 1.41-1.42L5 6.88 11.59.29 13 1.71z"/></svg></a></li>\
1169								</ul>\
1170							</div>\
1171						</div>\
1172					';
1173
1174					// 탭 패널 렌더
1175					psearch_view += '<div class="psearch-tab-panels">';
1176
1177					psearch_view += (function(){
1178						var h = '<div class="psearch-panel" data-tab="all" style="display:none;">';
1179						var parts = [];
1180						var s1 = $.psearch.renderAllSection($pEL, 'shopping', groups.shopping);
1181						if(s1) parts.push(s1);
1182						var s2 = $.psearch.renderAllSection($pEL, 'gallery',  groups.gallery);
1183						if(s2) parts.push(s2);
1184						var s3 = $.psearch.renderAllSection($pEL, 'forum',    groups.forum);
1185						if(s3) parts.push(s3);
1186						var s4 = $.psearch.renderAllSection($pEL, 'etc',      groups.etc);
1187						if(s4) parts.push(s4);
1188
1189						if(parts.length === 0){
1190							h += '<div class="row text-center pitem-empty">'
1191							+ $.lang[LANG]["fheader.psearch.pitem-empty"]
1192							+ '</div>';
1193						} else {
1194							h += parts.join('');
1195						}
1196
1197						h += '</div>';
1198						return h;
1199					})();
1200					psearch_view += $.psearch.renderTabPanel($pEL, 'shopping', groups.shopping);
1201					psearch_view += $.psearch.renderTabPanel($pEL, 'forum',    groups.forum);
1202					psearch_view += $.psearch.renderTabPanel($pEL, 'gallery',  groups.gallery);
1203					psearch_view += $.psearch.renderTabPanel($pEL, 'etc',      groups.etc);
1204					psearch_view += '</div>';
1205					psearch_view += '</div></div></div></div>';
1206
1207					$('.psearchcss').remove();
1208					var p_color = $('.dsgn-body').css('color');
1209					var p_line_color = $('.dsgn-body').css('color');
1210					var p_size = $('.dsgn-body').css('font-size');
1211					var p_css = `
1212						.dsgn-body > .psearch-view[data-sid="${property.SID}"] .psearch-wrap { border-bottom-color: ${p_line_color}; }
1213						.dsgn-body > .psearch-view[data-sid="${property.SID}"] .psearch-input { color: ${p_color}; }
1214						.dsgn-body > .psearch-view[data-sid="${property.SID}"] .psearch-pagination > li > a { color: ${p_color}; }
1215					`;
1216					$('#dsgn-body').after(`<style class="psearchcss"${p_css}</style>`);
1217				}
1218
1219				if($.clnav.check()) {
1220					$('.dsgn-body').prepend(psearch_view);
1221				} else {
1222					$('.header.el-menu').after(psearch_view);
1223				}
1224
1225				var $pEL = $('.'+p_selector);
1226				$pEL.data('psearchGroups', groups);
1227				
1228				changeBrokenImages($pEL);
1229
1230				$.psearch.initTabs($('.'+p_selector));
1231				$.psearch.bindClientPagination($pEL);
1232				$pEL.find('.psearch-sort').val(p_sort);
1233
1234				var p_tab = (property.PARENT && property.PARENT['psearch_tab'])	? property.PARENT['psearch_tab'] : ($pEL.find('.psearch-tabs').attr('data-active') || 'shopping');
1235				// console.log(p_tab);
1236				setTimeout(function(){
1237					$pEL.find('.psearch-tab-nav .tab-item[data-tab="'+p_tab+'"]').trigger('click');
1238				}, 0);
1239
1240				// 정렬 드롭다운 토글 (열고/닫기)
1241				$pEL.off('click', '.psearch-sort .toggle-dropdown');
1242				$pEL.on('click', '.psearch-sort .toggle-dropdown', function(e){
1243					e.preventDefault();
1244					e.stopPropagation();
1245					$(this).closest('.psearch-sort').toggleClass('open');
1246				});
1247				// 바깥 클릭 시 닫기
1248				$(document).off('click.psearchSortClose').on('click.psearchSortClose', function(e){
1249					if($(e.target).closest('.psearch-sort').length === 0){
1250						$pEL.find('.psearch-sort').removeClass('open');
1251					}
1252				});
1253
1254				// 정렬 선택
1255				$pEL.off('click', '.psearch-sort ul a[data-sort]');
1256				$pEL.on('click', '.psearch-sort ul a[data-sort]', function(e){
1257					e.preventDefault();
1258
1259					var sort = $(this).attr('data-sort') || 'new'; // 클릭한 값
1260					var currentSort = property.PARENT['psearch_sort'] || 'new'; // 현재 값
1261
1262					if(sort === currentSort){
1263						$pEL.find('.psearch-sort').removeClass('open');
1264						return;
1265					}
1266
1267					var psearch_stx = $('#psearch-stx').val() || '';
1268					var tab  = $('#psearch-tab').val() || 'all';
1269
1270					// UI 텍스트 반영
1271					$pEL.find('.psearch-sort .active-sort').text($(this).text().trim());
1272					$pEL.find('.psearch-sort').removeClass('open');
1273
1274					var url = (PAGE_MODE=='s') ? '' : '/render';
1275					location.href = url + '/psearch/num/1/stx/' + encodeURIComponent(psearch_stx) + '/sort/' + sort + '/tab/' + tab;
1276				});
1277
1278				if(p_selector == 'psearch-view') $pEL.fadeIn().removeAttr('style');
1279
1280				// $pagination = $pEL.find('.psearch-pagination');
1281				// $.psearch.setPagination($pagination,p_stx,p_total,p_page_num,p_view);
1282
1283				// if(p_total <= p_view) $pagination.addClass('hidden');
1284				// else $pagination.removeClass('hidden');
1285
1286				if(p_selector == 'psearch-view') {
1287					if(PAGE_MODE != 'c') $.psearch.showSiteProjectSEARCH(true);
1288					if(PAGE_MODE == 's' && typeof callbackEvtProductSearch == 'function') callbackEvtProductSearch(p_stx);
1289				}
1290
1291				$pEL.off('click', '.psearch-client-nav a');
1292					$pEL.on('click', '.psearch-client-nav a', function(e){
1293					e.preventDefault();
1294
1295					// disabled면 무시
1296					if ($(this).parent().hasClass('disabled')) return;
1297
1298					var sectionKey = $(this).closest('.psearch-client-nav').attr('data-skey');
1299					var page = parseInt($(this).attr('data-page'), 10) || 1;
1300
1301					// 상태 저장
1302					var secPages = $pEL.data('psearchAllSectionPages') || {};
1303					secPages[sectionKey] = page;
1304					$pEL.data('psearchAllSectionPages', secPages);
1305
1306					// 해당 섹션만 재렌더
1307					var groups = $pEL.data('psearchGroups') || {};
1308					var list = groups[sectionKey] || [];
1309
1310					var html = renderSection(sectionKey, list);
1311					$pEL.find('.psearch-all-section[data-section="'+sectionKey+'"]').replaceWith(html);
1312				});
1313
1314				$pEL.off('click', '.psearch-tab-navpage a');
1315					$pEL.on('click', '.psearch-tab-navpage a', function(e){
1316					e.preventDefault();
1317					if($(this).closest('li').hasClass('disabled')) return;
1318
1319					var tabKey = $(this).closest('.psearch-tab-navpage').attr('data-tkey'); // shopping|forum|gallery|etc
1320					var page = parseInt($(this).attr('data-page'), 10) || 1;
1321
1322					// 상태 저장
1323					var tabPages = $pEL.data('psearchTabPages') || {};
1324					tabPages[tabKey] = page;
1325					$pEL.data('psearchTabPages', tabPages);
1326
1327					// 전체 패널 재렌더 (로컬 renderPanel 제거)
1328					$.psearch.rerenderPanels($pEL);
1329
1330					// 활성 탭 유지
1331					var active = $pEL.find('.psearch-tabs').attr('data-active') || 'all';
1332					$pEL.find('.psearch-panel').hide();
1333					$pEL.find('.psearch-panel[data-tab="'+active+'"]').show();
1334				});
1335
1336			}
1337
1338			// deferred.resolve();
1339		 //    return deferred.promise();
1340		},
1341		pItemEmpty: function() {
1342			// console.log('psearch pItemEmpty');
1343			return `
1344				<div class="pitem sample-item">
1345					<div class="col-xs-3 col-sm-3 col-md-3 no-padding">
1346						<div class="center-block"><img src="//storage.googleapis.com/i.addblock.net/blitem_empty_img.png" alt="" class="img-responsive"/></div>
1347					</div>
1348				</div>
1349			`;
1350		},
1351		pItem: function(o) {
1352			// console.log('psearch pItem',o);
1353			var img_path = (typeof o.settings.storage != 'undefined' && o.settings.storage) ? o.settings.storage : property.RPATH;
1354			var img_original = (typeof o.settings.storage != 'undefined' && o.settings.storage) ? img_path + '1920/' : img_path;
1355			var img_src = getServeImage(o.image,600,img_path);
1356			var src_s0 = getServeImage(o.image,'0',img_path);
1357
1358			var glink = (typeof o.settings.glink != 'undefined' && o.settings.glink) ? o.settings.glink : '';
1359			var glink_target = (typeof o.settings.glink_target != 'undefined' && o.settings.glink_target) ? o.settings.glink_target : '';
1360
1361			if(glink) {
1362				if(glink.match(/^\@/g) !== null) {															// link-type: link-bookmark ==> a[attr-bookmark]
1363					var bookmark_seq = glink.replace(/^\@/g,'');
1364					if(typeof property.SETTINGS.blockBookmarkList == 'undefined' || typeof property.SETTINGS.blockBookmarkList['bookmark' + bookmark_seq] == 'undefined') {
1365						glink = '';
1366						glink_target = '';
1367					}
1368				} else if(glink.match(/^flink\@[0-9]/gi) !== null) {										// link-type: link-file     ==> a[attr-flink]
1369					glink_target = '';
1370				} else if($.inArray(glink.replace(/^\//g,'').replace(/ /g,'-'),property.MENULIST) > -1) {	// link-type: link-menu     ==> a[data-user-link]
1371				} else {																					// link-type: link-out      ==> a[attr-link]
1372					if(checkBase64Encode(glink)) glink = Base64.decode(glink);
1373				}
1374			}
1375
1376			var pitem_src = '';
1377			var pitem_option = '';
1378
1379			if(glink) {
1380				pitem_src = makeLinkUrl(glink, property.ONE, property.VIEW);
1381
1382				if(glink.match(/^\@/g) !== null) {
1383					pitem_option = 'attr-bookmark="' + glink.replace(/^\@/g,'') + '"';
1384				} else if(glink.match(/^flink\@[0-9]/g) !== null) {
1385					pitem_option = 'attr-flink="' + glink.replace(/^flink\@/g,'') + '"';
1386				} else if(property.MENULIST.includes(glink.replace(/ /g,'-'))) {
1387					pitem_option = 'data-user-link="' + pitem_src + '"';
1388				} else {
1389					var checkURL = /(http(s)?:\/\/)?\S+(\.[^(\n|\t|\s|\/))]+)+/gi;
1390					if(checkURL.test(glink)) pitem_option = 'attr-link="' + glink + '"';
1391					else pitem_src = 'javascript:;';
1392				}
1393			} else {
1394				// etc(page) 해당 페이지로 이동
1395				if (o.type === 'page') {
1396					var map = property.MENU_BREADCRUMB_MAP || {};
1397
1398					// 1) page slug 구하기: "스토리-서브11122,580901" 같은 경우 대비
1399					var pageRaw = (o.page || '').toString();
1400					var slug = pageRaw.indexOf(',') > -1 ? $.trim(pageRaw.split(',')[0]) : pageRaw;
1401
1402					// 2) 상세 URL이 있든 없든 메뉴 키는 "/slug" 로 맞춰서 lookup
1403					var key = $.psearch.normalizeHref('/' + slug);
1404					var crumb = map[key];
1405
1406					if (crumb) {
1407						o.cont = crumb; // "홈 > 브랜드 스토리 > 스토리 서브11122"
1408					} else {
1409					// fallback
1410						o.cont = $.lang[LANG]['editor.resource.icon.home'] + ' > ' + slug.replace(/-/g,' ');
1411					}
1412
1413					// /url/view/id 로 이동
1414					if (pageRaw.indexOf(',') > -1) {
1415
1416						var parts = pageRaw.split(',');
1417						var urlPage = $.trim(parts[0] || '');
1418						var viewId  = $.trim(parts[1] || '');
1419
1420						if (urlPage && viewId) {
1421							// /{urlPage}/view/{viewId}
1422							pitem_src = ((property.URL=='/') ? '' : property.URL) + '/' + urlPage + '/view/' + viewId;
1423							pitem_option = ''; // view 링크는 data-user-link 필요없음
1424						} else {
1425							pitem_src = 'javascript:;';
1426						}
1427
1428					} else {
1429						if (property.MENULIST.indexOf(o.page) > -1 || property.ONE) {
1430							pitem_src = makeLinkUrl(o.page, property.ONE, property.VIEW);
1431							pitem_option = 'data-user-link="' + o.page + '" data-psearch-pid="' + o.pid + '"';
1432						} else {
1433							pitem_src = 'javascript:;';
1434						}
1435					}
1436
1437				// forum은 /forum/view/{id} 로 이동
1438				} else if (o.type === 'forum') {
1439
1440					var base = (PAGE_MODE == 'r') ? '/render' : '';
1441					pitem_src = base + '/forum/view/' + o.id;
1442					pitem_option = ''; // forum은 data-user-link 필요 없음
1443
1444				// 쇼핑(상품) view 페이지 유지
1445				} else if (o.type === 'gallery' && o.p_mode === 'shopping') {
1446
1447					pitem_src = ((property.URL == '/') ? '' : property.URL) + '/' + o.page + '/view/' + o.id;
1448
1449				// 갤러리(상세페이지) view 페이지 이동
1450				} else if (o.type === 'gallery' && o.p_mode === 'project') {
1451
1452					pitem_src = ((property.URL == '/') ? '' : property.URL) + '/' + o.page + '/view/' + o.id;
1453
1454				// 일반 갤러리/기타 → 해당 페이지로 이동 (블럭 위치로)
1455				} else {
1456
1457					if (property.MENULIST.indexOf(o.page) > -1 || property.ONE) {
1458						pitem_src = makeLinkUrl(o.page, property.ONE, property.VIEW);
1459						pitem_option = 'data-user-link="' + o.page + '" data-psearch-pid="' + o.pid + '"';
1460					} else {
1461						pitem_src = 'javascript:;';
1462					}
1463
1464				}
1465			}
1466
1467			// } else {
1468			// 	if (o.p_mode == 'gallery') {
1469			// 		if(property.MENULIST.indexOf(o.page) > -1 || property.ONE) {
1470			// 			var pitem_cookie = (o.p_cookie == 'gallery') ? 'data-psearch-pid="' + o.pid + '"' : 'data-
1470psearch-seq="' + o.id + '"';
1471			// 			pitem_option = 'data-user-link="' + o.page + '" '+pitem_cookie;
1472			// 			pitem_src = makeLinkUrl(o.page, property.ONE, property.VIEW);
1473			// 		} else {
1474			// 			pitem_src = 'javascript:;';
1475			// 		}
1476			// 	} else {
1477			// 		pitem_src = ((property.URL=='/') ? '' : property.URL) + '/' + o.page + '/view/' + o.id;
1478			// 	}
1479			// }
1480			var isGallery = (o.type === 'gallery') ? '<img src="' + o.thumb + '" alt="" class="img-responsive" />' : '';
1481			// console.log(o);
1482			var str = '\
1483					<div class="col-xs-6 col-sm-4 col-md-3 no-padding pitem" data-index="' + o.num + '" data-pid="' + o.pid + '" data-gid="' + o.id + '">\
1484						<a href="'+pitem_src+'" '+ pitem_option + '>\
1485							'+ isGallery +'\
1486							<div class="info-wrap">\
1487								<h5 class="'+ ($.inArray('title', o.field_disable) > -1 ? 'hide' : '') +'">' + o.title + '</h5>\
1488							';
1489				if(o.p_mode == 'shopping' || o.p_mode == 'gallery') str += '<p class="'+ ($.inArray('caption', o.field_disable) > -1 ? 'hide' : '') +'">' + o.cont + '</p>';
1490				else str += '<p class="'+ ($.inArray('cont', o.field_disable) > -1 ? 'hide' : '') +'">' + o.cont + '</p>';
1491								
1492				if(o.p_mode == 'shopping') {
1493					if(o.price) {
1494						str += '\
1495								<p class="price-box '+ ($.inArray('price', o.field_disable) > -1 ? 'hide' : '') +'"><span class="figure-krw">₩</span> ' + o.price + '</p>\
1496								<span></span>\
1497						';
1498					}
1499
1500					if(o.review_onoff && o.review_cnt > 0) {
1501						str += '\
1502								<ul class="review-box">\
1503									<li class="review-cnt">리뷰 <span class="sh-pcolor">' + o.review_cnt + '</span></li>\
1504									<li class="review-score">평점 <span class="sh-pcolor">' + o.review_score + '</span></li>\
1505								</ul>\
1506						';
1507					}
1508
1509			// let str = `
1510			// <div class="col-xs-6 col-sm-4 col-md-3 no-padding pitem" data-index="${o.num}" data-pid="${o.pid}" data-gid="${o.id}">
1511			// 	<a href="${pitem_src}" ${pitem_option}>
1512			// 		<img src="${o.thumb}" alt="" class="img-responsive" />
1513			// 		<div class="info-wrap">
1514			// 			<h5>${htmlDecode(o.title)}</h5>
1515			// 			<p>${htmlDecode(o.cont)}</p>
1516			// `;
1517
1518					var basket_class = (o.basket_off || $.inArray('basket', o.field_disable) > -1) ? 'hide' : '';
1519					str += '\
1520							<div class="basket-box ' + basket_class + '"><span class="basket-btn">장바구니 담기</span></div>\
1521					';
1522				}
1523				
1524				if(o.type == 'forum') {
1525					// var cate = o.cate;
1526					// if(cate == '') cate = '카테고리 없음'
1527					str += '\
1528						<p>\
1529							<span class="'+ ($.inArray('name', o.field_disable) > -1 ? 'hide' : '') +'">'+ o.name +' |</span>\
1530							<span class="'+ ($.inArray('date', o.field_disable) > -1 ? 'hide' : '') +'">'+ o.date +' |</span>\
1531							<span class="'+ ($.inArray('hit', o.field_disable) > -1 ? 'hide' : '') +'"><svg viewBox="0 0 16 16" width="16" height="16"><path d="M10.4 6.9c.4 1.3-.4 2.7-1.8 3.1-1.3.4-2.7-.4-3.1-1.8v-.5c0-.2.2-.2.3-.2h.5c.9 0 1.7-.7 1.7-1.7v-.5c0-.1 0-.3.2-.3 1.1 0 2 .8 2.3 1.9ZM8 4.3c-2.7 0-4.1 1.8-4.9 3.4v.6C4 9.9 5.3 11.7 8 11.7s4.1-1.8 4.9-3.4v-.6C12 6.1 10.7 4.3 8 4.3m0-1c3.3 0 4.9 2.3 5.8 4 .3.5.3 1 0 1.5-.9 1.6-2.5 4-5.8 4s-4.9-2.3-5.8-4c-.3-.5-.3-1 0-1.5.9-1.6 2.5-4 5.8-4Z"></path></svg>'+ o.hit +' |</span>\
1532							<span class="'+ ($.inArray('comment', o.field_disable) > -1 ? 'hide' : '') +'"><svg viewBox="0 0 16 16" width="16" height="16"><path d="M9.6 3h-3C4.3 3 2.2 4.7 2 7c-.1 1.6.6 3 1.8 3.8 0 .5-.2 1-.5 1.6-.1.3.1.6.4.6h.2c.7-.3 1.6-.7 2.4-1.3h3c2.3 0 4.3-1.6 4.6-3.9.2-2.6-1.8-4.7-4.4-4.7Zm-.2 7.6H6.1l-.3.2c-.3.3-.7.5-1 .6v-1.1l-.4-.4c-1-.7-1.5-1.8-1.4-3 .1-1.7 1.7-3.1 3.6-3.1h3c1 0 1.9.4 2.5 1.1.6.7.9 1.6.8 2.5-.2 1.7-1.7 3-3.6 3Z"></path></svg>'+ o.comment +'</span>\
1533						</p>\
1534					';
1535				}
1536				str += '\
1537							</div>';
1538				if(o.type == 'forum') {
1539					var thumb = (o.thumb) ? o.thumb : '//storage.googleapis.com/i.addblock.net/icon/noimage_250_black.png',
1540						empty = (o.thumb == '') ? 'empty' : '';
1541					str += '\
1542						<div class="image-wrap '+ empty +'"><image src='+ thumb +'></div>\
1543					';
1544				}
1545				str += '\
1546						</a>\
1547					</div>\
1548			';
1549			// console.log(str);
1550			return str;
1551		},
1552		// setPagination: function($obj,stx,total,page_num,view) {
1553		// 	// console.log('psearch setPagination');
1554		// 	var checkLux = (PAGE_MODE == 'c') ? LUX : property.LUX;
1555		// 	if(checkLux) stx += location.search;
1556
1557		// 	var p_url = (PAGE_MODE == 'r') ? '/render' : '',
1558		// 		page_view = 5,
1559		// 		total_page = Math.ceil(total/view),
1560		// 		start_page = (page_num%page_view) ? page_num - (page_num%page_view) + 1 : page_num - (page_view-1), 
1561		// 		end_page = start_page + (page_view-1);
1562		// 	if(end_page > total_page) end_page = total_page;
1563
1564		// 	var prev_page = ((start_page-1) == 0) ? 1 : start_page-1,
1565		// 		next_page = ((end_page+1) > total_page) ? end_page : end_page+1;
1566
1567		// 	$obj.find('li').addClass('psearch-page');
1568
1569		// 	var $first = $obj.children().first().clone(),
1570		// 		$prev = $obj.children().first().clone(),
1571		// 		$next = $obj.children().last().clone(),
1572		// 		$last = $obj.children().last().clone();
1573
1574		// 	$obj.empty();
1575		// 	$first.find('a').attr('href',p_url+'/psearch/num/1/stx/'+stx).find('i').removeClass('fa-angle-left').addClass('fa-angle-double-left');
1576		// 	$prev.find('a').attr('href',p_url+'/psearch/num/'+prev_page+'/stx/'+stx);
1577		// 	$next.find('a').attr('href',p_url+'/psearch/num/'+next_page+'/stx/'+stx);
1578		// 	$last.find('a').attr('href',p_url+'/psearch/num/'+total_page+'/stx/'+stx).find('i').removeClass('fa-angle-right').addClass('fa-angle-double-right');
1579
1580		// 	$obj.append($prev).append($next);
1581		// 	for(i=start_page; i<=end_page; i++) {
1582		// 		var active = (i == page_num) ? 'active' : '';
1583		// 		$obj.children().last().before($('<li class="psearch-page '+ active +'"><a href="'+p_url+'/psearch/num/'+i+'/stx/'+stx+'">' + i + '</a></li>'));
1584		// 	}
1585
1586		// 	if(start_page == prev_page) $obj.children().eq(0).hide();
1587		// 	if(end_page == next_page) $obj.children().last().hide();
1588
1589		// 	// if(start_page > page_view) $obj.prepend($first);
1590		// 	// if(end_page < total_page) $obj.append($last);
1591
1592		// },
1593		bindClientPagination: function($wrap){
1594			$wrap.find('.psearch-client-nav .psearch-page a').off('click').on('click', function(e){
1595				e.preventDefault();
1596
1597				var $nav = $(this).closest('.psearch-client-nav');
1598				if($nav.find('li.disabled').length && $(this).parent().hasClass('disabled')) return;
1599
1600				var key = $nav.attr('data-key');     // 예: "shopping" 또는 "all:shopping"
1601				var page = parseInt($(this).attr('data-page'), 10) || 1;
1602
1603				if (typeof key === 'string' && key.indexOf('all:') === 0) {
1604					var sectionKey = key.replace('all:', '');
1605					var secPages = $wrap.data('psearchAllSectionPages') || {};
1606					secPages[sectionKey] = page;
1607					$wrap.data('psearchAllSectionPages', secPages);
1608				} else if (typeof key === 'string') {
1609					var tabPages = $wrap.data('psearchTabPages') || {};
1610					tabPages[key] = page;
1611					$wrap.data('psearchTabPages', tabPages);
1612				} else {
1613					// 디버깅용
1614					console.warn('psearch pagination key is undefined', this);
1615				}
1616
1617				// 패널 재렌더
1618				$.psearch.rerenderPanels($wrap);
1619				$.psearch.initTabs($wrap);
1619 // 활성 탭 유지
1620			});
1621		},
1622		renderAllSection: function($wrap, sectionKey, list){
1623			var total = (list && list.length) ? list.length : 0;
1624
1625			// ✅ 전체탭에서만 쓰는 섹션이므로: 결과 없으면 아예 출력하지 않음
1626			if(total === 0) return '';
1627
1628			var pageSize = $wrap.data('psearchPageSize') || 8;
1629			var secPages = $wrap.data('psearchAllSectionPages') || {};
1630			var cur = secPages[sectionKey] || 1;
1631
1632			var totalPage = Math.ceil(total / pageSize);
1633			var sliced = list.slice((cur-1)*pageSize, cur*pageSize);
1634
1635			var title_name = (sectionKey == 'shopping') ? $.lang[LANG]['fheader.psearch.shopping']
1636							: (sectionKey == 'forum') ? $.lang[LANG]['fheader.psearch.forum']
1637							: (sectionKey == 'gallery') ? $.lang[LANG]['fheader.psearch.gallery']
1638							: $.lang[LANG]['fheader.psearch.etc'];
1639
1640			var html = '<div class="psearch-all-section" data-section="'+sectionKey+'">';
1641			html += '<div class="psearch-section-title">'+title_name+'</div>';
1642
1643			html += '<div class="row multi-columns-row" data-loop="true">';
1644			for(var i=0;i<sliced.length;i++){
1645				html += $.psearch.pItem(sliced[i]);
1646			}
1647			html += '</div>';
1648
1649			// 섹션 페이지네이션(원하는 정책대로: 1페이지도 무조건 노출이면 totalPage<=0 체크로 조정)
1650			html += $.psearch.renderSectionPagination(sectionKey, cur, totalPage);
1651
1652			html += '</div>';
1653			return html;
1654		},
1655		renderTabPanel: function($wrap, tabKey, list){
1656			var pageSize = $wrap.data('psearchPageSize') || 8;
1657			var tabPages = $wrap.data('psearchTabPages') || {};
1658			var cur = tabPages[tabKey] || 1;
1659
1660			var total = (list && list.length) ? list.length : 0;
1661			var totalPage = Math.ceil(total / pageSize);
1662			var sliced = (total > 0) ? list.slice((cur-1)*pageSize, cur*pageSize) : [];
1663
1664			var html = '<div class="psearch-panel" data-tab="'+tabKey+'" style="display:none;">';
1665
1666			if(total === 0){
1667			html += '<div class="row text-center pitem-empty">' + $.lang[LANG]["fheader.psearch.pitem-empty"] + '</div>';
1668			} else {
1669			html += '<div class="row multi-columns-row" data-loop="true">';
1670			for(var i=0;i<sliced.length;i++){
1671				html += $.psearch.pItem(sliced[i]);
1672			}
1673			html += '</div>';
1674
1675			// 탭 pagination
1676			html += $.psearch.renderTabPagination(tabKey, cur, totalPage);
1677			}
1678
1679			html += '</div>';
1680			return html;
1681		},
1682		rerenderPanels: function($wrap){
1683			var groups = $wrap.data('psearchGroups') || {};
1684			if(!groups) return;
1685
1686			// 패널 영역만 다시 그림
1687			var $panels = $wrap.find('.psearch-tab-panels');
1688			if($panels.length==0) return;
1689
1690			var html = '';
1691
1692			// all 패널
1693			html += (function(){
1694				function renderSection(sectionKey, list){
1695					return $.psearch.renderAllSection($wrap, sectionKey, list);
1696				}
1697				var h = '<div class="psearch-panel" data-tab="all" style="display:none;">';
1698				h += renderSection('shopping', groups.shopping);
1699				h += renderSection('gallery', groups.gallery);
1700				h += renderSection('forum', groups.forum);
1701				h += renderSection('etc', groups.etc);
1702				h += '</div>';
1703				return h;
1704			})();
1705
1706			// 탭 패널들
1707			html += $.psearch.renderTabPanel($wrap, 'shopping', groups.shopping);
1708			html += $.psearch.renderTabPanel($wrap, 'forum', groups.forum);
1709			html += $.psearch.renderTabPanel($wrap, 'gallery', groups.gallery);
1710			html += $.psearch.renderTabPanel($wrap, 'etc', groups.etc);
1711
1712			$panels.html(html);
1713
1714			// 클릭 바인딩 다시
1715			$.psearch.bindClientPagination($wrap);
1716		},
1717		renderSectionPagination: function(sectionKey, current, totalPage){
1718			if(totalPage <= 0) return '';
1719
1720			var pageView = 5;
1721			var start = (Math.floor((current-1)/pageView)*pageView) + 1;
1722			var end = Math.min(start + pageView - 1, totalPage);
1723			var showArrows = totalPage > pageView;
1724			var prevBlock = Math.max(1, start-1);
1725			var nextBlock = Math.min(totalPage, end+1);
1726
1727			// all 탭 섹션용 key는 "all:섹션"
1728			var html = '<nav class="text-center clear psearch-client-nav" data-key="all:'+sectionKey+'">';
1729			html += '<ul class="pagination pagination-sm psearch-pagination">';
1730
1731			if(showArrows){
1732				html += '<li class="psearch-page prev '+(start==1?'disabled':'')+'">'
1733				+ '<a href="#" data-page="'+prevBlock+'"><i class="fa fa-angle-left"></i></a></li>';
1734			}
1735
1736			for(var p=start; p<=end; p++){
1737				html += '<li class="psearch-page '+(p==current?'active':'')+'">'
1738				+ '<a href="#" data-page="'+p+'">'+p+'</a></li>';
1739			}
1740
1741			if(showArrows){
1742				html += '<li class="psearch-page next '+(end==totalPage?'disabled':'')+'">'
1743				+ '<a href="#" data-page="'+nextBlock+'"><i class="fa fa-angle-right"></i></a></li>';
1744			}
1745
1746			html += '</ul></nav>';
1747			return html;
1748		},
1749		renderTabPagination: function(tabKey, current, totalPage){
1750			if(totalPage <= 0) return '';
1751
1752			var pageView = 5;
1753			var start = (Math.floor((current-1)/pageView)*pageView) + 1;
1754			var end   = Math.min(start + pageView - 1, totalPage);
1755			var showArrows = totalPage > pageView; // 6페이지 이상일 때만 prev/next
1756			var prevBlock = Math.max(1, start-1);
1757			var nextBlock = Math.min(totalPage, end+1);
1758
1759			var html = '<nav class="text-center clear psearch-tab-navpage" data-tkey="'+tabKey+'">';
1760			html += '<ul class="pagination pagination-sm psearch-pagination">';
1761
1762			if(showArrows){
1763				html += '<li class="psearch-page prev '+(start==1?'disabled':'')+'">'
1764						+ '<a href="#" data-page="'+prevBlock+'"><i class="fa fa-angle-left"></i></a></li>';
1765			}
1766			for(var p=start; p<=end; p++){
1767				html += '<li class="psearch-page '+(p==current?'active':'')+'">'
1768					+ '<a href="#" data-page="'+p+'">'+p+'</a></li>';
1769			}
1770			if(showArrows){
1771				html += '<li class="psearch-page next '+(end==totalPage?'disabled':'')+'">'
1772						+ '<a href="#" data-page="'+nextBlock+'"><i class="fa fa-angle-right"></i></a></li>';
1773			}
1774
1775			html += '</ul></nav>';
1776			return html;
1777		},
1778		showSiteProjectSEARCH: function(view_page) {
1779			// console.log('psearch showSiteProjectSEARCH');
1780			if(PAGE_MODE == 'c') return false;
1781			$('.cl-popupBanner.openPopupBanner').addClass('zindex20');
1782
1783			var sid = property.SID,
1784				checkUsedMpcWeb = property.SETTINGS.vpMode_onoff;
1785			
1786			var active_nav = $('.el-menu header');
1787			if(window.innerWidth <= 768) active_nav = active_nav.is('.cl-nav') ? $('.clnav-sidemobile') : $('#mobile-nav');
1788
1789			var psearchWarp = active_nav.find('.psearch-overlay');
1790			if(view_page) psearchWarp = $('.psearch-view').find('.psearch-wrap');
1791
1792			psearchWarp.find('input.psearch-input').live({
1793				focus: function() {
1794				},
1795				keydown: function(key) {
1796					if(key.keyCode == 13) psearchWarp.find('.psearch-icon').click();
1797				},
1798			});
1799
1800			psearchWarp.find('.psearch-icon').live({
1801				click: function() {
1802					var psearch_wrap = $(this).closest('.psearch-body');
1803					var psearch_input = $(this).closest('.psearch-wrap').find('input.psearch-input');
1804                    var regExp = new RegExp('^[a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣\\?\\@\\!\\- ]*$');
1805					var stx = psearch_input.val().trim();
1806					var error_str = '';
1807
1808					if(stx.length == 0) error_str = $.lang[LANG]['psearch.input.empty'];
1809					else if(!regExp.test(stx)) error_str = $.lang[LANG]['psearch.input.regexp'];
1810
1811					if(error_str.length > 0) {
1812						if(psearch_wrap.find('.error').length > 0) psearch_wrap.find('.error').html('<i class="cl-icon alert02"></i> ' + error_str);
1813						else psearch_input.closest('.psearch-wrap').after('<span class="error"><i class="cl-icon alert02"></i> ' + error_str + '</span>');
1814						
1815						psearch_input.focus();
1816						return;
1817					} else {
1818						psearch_wrap.find('.error').remove();
1819					}
1820
1821					//check mpcWeb Mode
1822					if(checkUsedMpcWeb) {
1823						var viewportMode = property.SETTINGS.viewportMode,
1824							vpmode = (typeof $('.mobilepc_ch').attr('data-desktop-option') != 'undefined') ? $('.mobilepc_ch').attr('data-desktop-option') : viewportMode;
1825						$.cookie('desktop-option',vpmode, { path: '/' });
1826					}
1827					
1828					var url = (PAGE_MODE=='s') ? '' : '/render',
1829						href = url + '/psearch/num/1/stx/' + encodeURIComponent(stx);
1830					location.href = href;
1831
1832				}
1833			});
1834
1835		},
1836		normalizeHref: function(href) {
1837			href = (href || '').toString().trim();
1838			if(!href) return '';
1839
1840			href = href.replace(/^\/render/i, '');
1841			href = href.split('#')[0].split('?')[0];
1842
1843			if(/^https?:\/\//i.test(href)){
1844				try { href = new URL(href).pathname; } catch(e){}
1845			}
1846
1847			href = href.replace(/\/view\/\d+$/i, '');
1848
1849			if(href && href.charAt(0) !== '/') href = '/' + href;
1850			return href;
1851		},
1852		buildMenuBreadcrumbMap: function(menuOption) {
1853			var map = {}; // key: normalized href  value: "홈 > 메인 > 서브"
1854
1855			if(!menuOption || !menuOption.length) return map;
1856
1857			for(var i=0; i<menuOption.length; i++){
1858				var m = menuOption[i];
1859				var mainName = (m && m.name) ? m.name : '';
1860				var mainHref = $.psearch.normalizeHref(m && m.href);
1861
1862				if(mainHref){
1863				map[mainHref] = $.lang[LANG]['editor.resource.icon.home'] + ' > ' + mainName;
1864				}
1865
1866				var children = (m && m.children) ? m.children : [];
1867				for(var j=0; j<children.length; j++){
1868				var c = children[j];
1869				var subName = (c && c.name) ? c.name : '';
1870				var subHref = $.psearch.normalizeHref(c && c.href);
1871
1872				if(subHref){
1873					map[subHref] = $.lang[LANG]['editor.resource.icon.home'] + ' > ' + mainName + ' > ' + subName;
1874				}
1875				}
1876			}
1877			return map;
1878		}
1879	}
1880
1881	$.shopping = {
1882		init: function() {
1883			// console.log('shopping init');
1884			var checkEllist = (typeof isElviewPage != 'undefined' && isElviewPage === true) ? true : false,
1885				fheader_selec = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar');
1886
1887			if(!fheader_selec.hasClass('navbar-fheader')) return false;
1888
1889			var sid = (PAGE_MODE == 'c') ? SID : property.SID,				
1890				s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE;
1891
1892			var scart = (s_validtype == 'SM') ? true : false;
1893			
1894			if(scart) $.shopping.set('on',checkEllist);
1895			else $.shopping.set('off',checkEllist);
1896		},
1897		set: function(onoff,checkEllist){
1898			var checkClnav =  $.clnav.check();
1899			if(checkClnav) return false;
1900
1901			// console.log('shopping set');
1902			var checkEllist = ( typeof checkEllist!='undefined' && checkEllist) ? checkEllist : false;
1903			fheader_selec = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar');
1904			if(!fheader_selec.hasClass('navbar-fheader')) return false;
1905
1906			if(onoff.match(/on/gi)) $.shopping.makeSiteFixedCART();
1907			else {
1908				$('#fixed-menu, #fixed-menu-sub').find('.siteCART').remove();
1909				$('#tpl-menu').find('.siteCART').remove();
1910				$('div.siteCART.micon').remove();
1911			}
1912		},
1913		makeSiteFixedCART: function() {
1914			var checkClnav =  $.clnav.check();
1915			if(checkClnav) return false;
1916
1917			// console.log('shopping makeSiteFixedCART');
1918			var checkEllist = (typeof isElviewPage != 'undefined' && isElviewPage === true) ? true : false,
1919				pc_nav = (checkEllist) ? $('.elviewhtml header.navbar #fixed-menu, .elviewhtml header.navbar #fixed-menu-sub') : $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub'),
1920				mobile_nav = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
1921				checkfixtype_nav = (checkEllist) ? $('.elviewhtml header.navbar') : $('.el-menu header.navbar'),
1922				checkFixTypeMenu = (typeof checkfixtype_nav.attr('data-fixtype') != 'undefined' && checkfixtype_nav.attr('data-fixtype')) ? true : false;
1923
1924			var sid = (PAGE_MODE == 'c') ? SID : property.SID,
1925				cart_url = (PAGE_MODE == 'c' || PAGE_MODE == 'r') ? 'javascript:;' : '/_cart',
1926				content = '\
1927				<li class="siteCART">\
1928					<a href="' + cart_url + '"><i class="cl-icon cl_icon_cart" aria-hidden="true"></i></a>\
1929				</li>\
1930			',
1931				mobile_content = '\
1932				<div class="siteCART micon">\
1933					<a href="' + cart_url + '"><i class="cl-icon cl_icon_cart" aria-hidden="true"></i></a>\
1934				</div>\
1935			';
1936
1937			/* Shopping Only KO Site */
1938			// var slang = (PAGE_MODE == 'c') ? SLANG : property.SLANG;
1939			// if(typeof slang != 'undefined' && typeof slang.select_code != 'undefined' && slang.select_code != 'ko') {
1940			// 	$('#fixed-menu, #fixed-menu-sub').find('.siteCART').remove();
1941			// 	$('#tpl-menu').find('.siteCART').remove();
1942			// 	$('div.siteCART.micon').remove();
1943			// 	return false;
1944			// }
1945
1946			if(pc_nav.find('.siteCART').length > 0) {
1947				if(checkFixTypeMenu) pc_nav.find('.siteCART').find('a').attr('href',cart_url);
1948				else pc_nav.find('.siteCART').replaceWith(content);
1949			} else pc_nav.append(content);
1950
1951			if(mobile_nav.find('div.siteCART.micon').length>0) {
1952				if(checkFixTypeMenu) mobile_nav.find('div.siteCART.micon').find('a').attr('href',cart_url);
1953				else mobile_nav.find('div.siteCART.micon').replaceWith(mobile_content);
1954			} else {
1955				mobile_nav.find('.navbar-toggle').before(mobile_content);
1956			}
1957
1958			if(pc_nav.find('.siteCART').css('display')=='none') mobile_nav.find('.siteCART.micon').hide();
1959			
1960			var fixed_a_color = (checkFixTypeMenu) ? '' : $('.el-menu .navbar-toggle .
1960icon-bar').css('background-color');
1961			//var mobile_color = $('#mobile-nav').find('.cl-fixbtn.cl-visible').find('svg').css('fill');
1962			if(checkEllist && typeof PAGE_MODE!='undefined' && PAGE_MODE=='c') {
1963				fixed_a_color = mobile_nav.find('.navbar-toggle .icon-bar').css('background-color');
1964			}
1965			
1966
1967			if(pc_nav.closest('header').find('.cl-menu-option').length > 0) {
1968			} else {
1969				mobile_nav.find('div.siteCART.micon').css({
1970					'color': fixed_a_color,
1971					'right': '56px',
1972					'display': (checkFixTypeMenu) ? $('header.navbar-fheader').find('.siteCART.cl-fixbtn').css('display') : ''
1973				});
1974			}
1975			
1976			if(PAGE_MODE == 's') {
1977				var cart_active = Number(property.CART);
1978				// $.ajax({
1979				// 	type: 'POST',
1980				// 	url: '/_basket/check',
1981				// 	data: { sid : sid },
1982				// 	dataType: 'json',
1983				// 	async: true,
1984				// 	success: function(r) {
1985				// 		if(typeof r.error != 'undefined' && r.error) {
1986				// 			// console.log(r.error);
1987				// 			return false;
1988				// 		}
1989				// console.log(property.CART);
1990						if(Number(cart_active) > 0) {
1991							if(checkFixTypeMenu) {
1992								var cart_active_str = cart_active.toString(),
1993									$selec = $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub'),
1994									fixtypeNum = $('.el-menu header.navbar').attr('data-fixtype').replace(/(top|sidebar)\_/gi,''),
1995									cart_active_selec = ($selec.find('.siteCART .cart-active-txt').length>0) ? $selec.find('.cart-active-txt') : $selec.find('.cart-active'),									
1996									cart_active_class = (cart_active_str.length>1 && cart_active_str.length<3) ? 'cartActive_2' : ((cart_active_str.length>2 && cart_active_str.length<4) ? 'cartActive_3' : ''),
1997									radius_arr = ['03','04','05','06','10'];
1998
1999								cart_active_selec.text(cart_active);
2000								$('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.siteCART .cart-active').show();
2001								$('.el-menu header.navbar').find('.siteCART.micon .cl_icon_cart').html('<span class="cart-active"></span>');
2002
2003								if($.inArray(fixtypeNum,radius_arr) > -1) $selec.find('.cart-active').removeClass('cartActive_2 cartActive_3').addClass(cart_active_class);
2004								
2005							} else {
2006								var cart_active = '<span class="cart-active"></span>';
2007								$('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.siteCART .cl_icon_cart').html(cart_active);
2008							}
2009							
2010						} else {
2011							var r = { member : property.UMEMBER },
2012								check_login = (typeof r.member != 'undefined') ? r.member.check_login : false;
2013
2014							// if(!check_login) $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.siteCART .cart-active').hide();
2015							// else $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.siteCART .cart-active').show();
2016
2017							if(checkFixTypeMenu && Number(cart_active)==0) {
2018								$('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.cart-active').hide();
2019							}
2020						}
2021				// 	}
2022				// });
2023			} else {
2024				if(PAGE_MODE=='r' && checkFixTypeMenu) $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub').find('.cart-active').remove();
2025			}
2026
2027		}
2028	}
2029
2030	$.slang = {
2031		init: function(data) {
2032            // console.log('$.slang.init()');
2033			if(typeof data != 'undefined' && data) {
2034				if(PAGE_MODE == 'c') SLANG = data;
2035				else property.SLANG = data;
2036			}
2037
2038			var slang = (PAGE_MODE == 'c')
2039					? ((typeof SLANG != 'undefined' && SLANG) ? SLANG : {})
2040					: ((typeof property != 'undefined' && property && property.SLANG) ? property.SLANG : {}),
2041				slang_lists = $.isArray(slang['lists']) ? slang['lists'] : [],
2042				s_validplan = (PAGE_MODE == 'c') ? VALIDPLAN : property.VALIDPLAN,
2043				s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
2044				checkFree = (!s_validplan || s_validtype == 'PK') ? true : false;
2045
2046			if(checkFree || $.isEmptyObject(slang) || slang.use_language != 'on' || slang_lists.length === 0) {
2047				$.slang.set('off');
2048			} else {
2049				$.slang.set('on');
2050			}
2051		},
2052		set: function(onoff) {
2053            // console.log('$.slang.set()');
2054			var check_fh = ($('.el-menu header.navbar').hasClass('navbar-fheader')) ? true : false,
2055				pc_nav = (check_fh) ? (($('.el-menu > header.navbar').hasClass('sidebar')) ? $('.el-menu > header.navbar') : $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub')) : $('.el-menu header.navbar #tpl-menu'),
2056				mobile_nav = (check_fh) ? $('#mobile-nav #fixed-menu') : $('.el-menu header.navbar'),
2057				checkFixOnSearch = (typeof $('.el-menu header.navbar').attr('data-fixon') != 'undefined' && $('.el-menu header.navbar').attr('data-fixon').indexOf('search')>-1) ? true : false;
2058
2059			if(onoff.match(/on/gi)) $.slang.make();
2060			else {
2061				$('.el-menu .siteLANG, #mobile-nav .siteLANG').remove();
2062
2063				if(pc_nav.find('.siteUM').css('display')=='none') {
2064					if(!checkFixOnSearch) {
2065						mobile_nav.parent().addClass('hide');
2066					} else {
2067						mobile_nav.parent().find('.login-content').css('pointer-events','none');
2068						mobile_nav.parent().find('.login-content').children().css('visibility','hidden');
2069					}
2070				}
2071			}
2072		},
2073		make: function() {
2074            // console.log('$.slang.make()');
2075			var slang = (PAGE_MODE == 'c')
2076					? ((typeof SLANG != 'undefined' && SLANG) ? SLANG : {})
2077					: ((typeof property != 'undefined' && property && property.SLANG) ? property.SLANG : {}),
2078				check_fh = ($('.el-menu > header.navbar').hasClass('navbar-fheader')) ? true : false,
2079				caret = ($('.el-menu > header.navbar').hasClass('sidebar')) ? 'fa fa-caret-right fa-1' : 'fa fa-caret-down fa-1',
2080				slang_data = $.isArray(slang['lists']) ? slang['lists'] : [],
2081				slang_str = (typeof slang['select'] != 'undefined') ? slang['select'] : '',
2082				slang_arrow = (slang_data.length > 1) ? '<i class="cl-icon arrow09" aria-hidden="true"></i>' : '',
2083				slang_list = '',
2084				checkFixLangTypeMenu = (typeof $('.el-menu > header.navbar').attr('data-fixlangtype') != 'undefined' && $('.el-menu > header.navbar').attr('data-fixlangtype')) ? true : false,
2085				pc_nav = (check_fh) ? (($('.el-menu > header.navbar').hasClass('sidebar')) ? $('.el-menu > header.navbar') : $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub')) : $('.el-menu header.navbar #tpl-menu'),
2086				mobile_nav = (check_fh) ? $('#mobile-nav #fixed-menu') : $('.el-menu header.navbar'),
2087				fixbtnData = ($('.el-menu > header.navbar').hasClass('sidebar')) ? $.menuFixBtn.getData(pc_nav) : $.menuFixBtn.getData($('.el-menu > header.navbar')),
2088				checkFixOnSearch = (typeof $('.el-menu header.navbar').attr('data-fixon') != 'undefined' && $('.el-menu header.navbar').attr('data-fixon').indexOf('search')>-1) ? true : false;
2089				
2090			if(slang_data.length === 0) {
2091				$.slang.set('off');
2092				return;
2093			}
2094
2095
2096			$.each(slang_data, function(i,o) {
2097				var active = (o['name'] == slang_str) ? 'active' : '';
2098
2099				/* Shopping Only KO Site */
2100				// if(active && o['code'] != 'ko') {
2101				// 	pc_nav.find('.makeSiteSEARCH').remove();
2102				// 	pc_nav.find('.siteCART').remove();
2103				// }
2104
2105				slang_list += '\
2106						<li class="' + active + '"><a href="javascript:;" data-code="' + o['code'] + '">' + o['name'] + '</a></li>\
2107				';
2108			});
2109
2110			/*SLANG = (PAGE_MODE == 'c') ? SLANG : property.SLANG;*/
2111			var content = (checkFixLangTypeMenu) ? ($('.el-menu > header.navbar').hasClass('sidebar') ? $.menuFixBtn.fixLangSet(fixbtnData['fixlangtypeNum'],false) : $.menuFixBtn.fixLangSet(fixbtnData['fixlangtypeNum'])) : '\
2112				<li class="siteLANG dropdown">\
2113					<a href="javascript:;" class="dropdown-toggle"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i> <span class="slang-active">' + slang_str + '</span>' + slang_arrow + '</a>\
2114					<ul class="dropdown-menu">\
2115						' + slang_list + '\
2116					</ul>\
2117				</li>\
2118				',
2119				mobile_content = (checkFixLangTypeMenu) ? $.menuFixBtn.fixLangSet(fixbtnData['fixlangtypeNum'],false,'',true) : ((check_fh) ? '\
2120								<li class="siteLANG dropdown">\
2121									<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-target="#m-dropdown-wrap-lang"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a>\
2122									<div class="dropdown-menu-wrap" id="m-dropdown-wrap-lang">\
2123										<span class="dropdown-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Change Multilingual Site"></span></span>\
2124										<ul class="dropdown-menu">\
2125											' + slang_list + '\
2126										</ul>\
2127									</div>\
2128								</li>\
2129								':'\
2130								<div class="siteLANG micon dropdown">\
2131									<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-target=".siteLANG-dmenu-wrap"><i class="cl-icon cl_icon_globe" aria-hidden="true"></i></a>\
2132								</div>\
2133								'),
2134				mobile_dropdown_menu = '\
2135				<div class="siteLANG-dmenu-wrap">\
2136					<!--<span class="dropdown-close"><span class="icon-bar"></span><span class="icon-bar"></span></span>-->\
2137					<ul class="dropdown-menu">\
2138						' + slang_list + '\
2139					</ul>\
2140				</div>\
2141			';
2142
2143			if(pc_nav.find('.siteLANG').length > 0) {
2144				pc_nav.find('.siteLANG').replaceWith(content);
2145				if($('.el-menu >
2145 header.navbar').hasClass('sidebar')) {
2146					pc_nav.find('.fh-line').remove();
2147					pc_nav.parents('.menu-inner').after('<hr class="fh-line" />');
2148				} 
2149			} else {
2150				pc_nav.find('.siteLANG.cl-fixbtn').remove();
2151				if(checkFixLangTypeMenu && $('.el-menu > header.navbar').hasClass('sidebar')) {
2152					pc_nav.find('.fh-line').remove();
2153					$('.el-menu > header.navbar').find('.menu-inner').after(content);
2154					pc_nav.parents('.menu-inner').after('<hr class="fh-line" />');
2155				} else pc_nav.append(content);
2156			}
2157			if(pc_nav.find('.siteUM').css('display')=='none') {
2158				if(!checkFixOnSearch) {
2159					mobile_nav.parent().addClass('hide');
2160				} else {
2161					mobile_nav.parent().find('.login-content').css('pointer-events','none');
2162					mobile_nav.parent().find('.login-content').children().css('visibility','hidden');
2163				}
2164			}
2165		
2166			if(check_fh) {
2167				if(checkFixLangTypeMenu) {
2168					if(mobile_nav.find('.cl-fixbtn.siteLANG').length==0) {
2169						$('#mobile-nav').append(mobile_content);
2170						$('#mobile-nav').find('.cl-fixbtn.siteLANG.dropup .dropdown-backdrop').remove();
2171					}
2172
2173					var mobile_color = mobile_nav.find('.siteSEARCH.cl-fixbtn svg').css('fill');
2174					
2175					$('#mobile-nav').find('.siteLANG.cl-fixbtn a').css({
2176						'color':mobile_color,
2177						'border-color':mobile_color
2178					})
2179
2180					$('#mobile-nav').find('.siteLANG.cl-fixbtn a svg').css('fill',mobile_color);
2181				} else {
2182					if(mobile_nav.find('.siteLANG').length > 0) mobile_nav.find('.siteLANG').replaceWith(mobile_content);
2183					else mobile_nav.append(mobile_content);
2184				}
2185			} else {
2186				if(mobile_nav.find('div.siteLANG.micon').length>0) mobile_nav.find('div.siteLANG.micon').replaceWith(mobile_content);
2187				else mobile_nav.find('.navbar-toggle').before(mobile_content);
2188
2189				if($('div.siteLANG-dmenu-wrap').length>0) $('div.siteLANG-dmenu-wrap').replaceWith(mobile_dropdown_menu);
2190				else if($('div.siteUM-dmenu-wrap').length>0) $('div.siteUM-dmenu-wrap').after(mobile_dropdown_menu);
2191				else $('#tpl-menu').parent().after(mobile_dropdown_menu);
2192
2193				mobile_nav.find('div.siteLANG.micon').css({
2194					'color': $('.el-menu .navbar-toggle .icon-bar').css('background-color'),
2195					'right': '56px',
2196				});
2197			}
2198		}
2199	} /*slang end*/
2200
2201
2202	$.umember = {		
2203		init: function(um_used, um_lang, um_display, callback) {
2204			// console.log('umember init');
2205			
2206			if(typeof um_used != 'undefined' && um_used) {
2207				if(PAGE_MODE == 'c') SITEUM = um_used;
2208				else property.SITEUM = um_used;
2209			}
2210
2211			if(typeof um_lang != 'undefined' && um_lang) {
2212				if(PAGE_MODE == 'c') SITEUMLANG = um_lang;
2213				else property.SITEUMLANG = um_lang;
2214			}
2215
2216			if(typeof um_display != 'undefined' && um_display) {
2217				if(PAGE_MODE == 'c') SITEUMDISPLAY = um_display;
2218				else property.SITEUMDISPLAY = um_display;
2219			}
2220
2221			var s_um = (PAGE_MODE == 'c') ? SITEUM : property.SITEUM,
2222				check_fh = ($('.el-menu header.navbar').hasClass('navbar-fheader')) ? true : false;
2223
2224			if(s_um == 0 || (typeof s_um == 'string' && s_um == '0')) {
2225				if(check_fh) {
2226					$('#fixed-menu, #fixed-menu-sub').find('.siteUM').remove();
2227					$('#mobile-nav').find('.siteUM').remove();
2228					$('#mobile-nav').find('.mobilenav_top').addClass('hide');
2229				} else {
2230					$('#tpl-menu').find('.siteUM').remove();
2231					$('div.siteUM.micon').remove();
2232					$('div.siteUM-dmenu-wrap').remove();
2233				}
2234				if(typeof callback == 'function') { callback(); }
2235			} else {
2236				if(check_fh) $.umember.makeSiteFixedUM(callback);
2237				else $.umember.makeSiteUM(callback);
2238			}
2239		},
2240		setUM: function(onoff,callback) {
2241			// console.log('umember setUM');
2242			var check_fh = ($('.el-menu header.navbar').hasClass('navbar-fheader')) ? true : false;
2243			// menu ver2 : navbar-simple(mobile design)
2244			// menu ver3 : navbar-fheader(+shopping cart, mobile slide nav)
2245
2246			if(onoff.match(/on/gi)) {
2247				if(check_fh) $.umember.makeSiteFixedUM(callback);
2248				else $.umember.makeSiteUM(callback);
2249			} else {
2250				if(check_fh) {
2251					$('#fixed-menu, #fixed-menu-sub').find('.siteUM').remove();
2252					$('#mobile-nav').find('.siteUM').remove();
2253				} else {
2254					$('#tpl-menu').find('.siteUM').remove();
2255					$('div.siteUM.micon').remove();
2256					$('div.siteUM-dmenu-wrap').remove();
2257				}
2258
2259				if(typeof callback == 'function') {
2260					callback();
2261				}
2262			}
2263		},
2264		makeSiteFixedUM: function(callback) {
2265			// console.log('umember makeSiteFixedUM');
2266			var sid = (PAGE_MODE == 'c') ? SID : property.SID,
2267				s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
2268				s_um = (PAGE_MODE == 'c') ? SITEUM : property.SITEUM,
2269				s_um_lang = (PAGE_MODE == 'c') ? SITEUMLANG : property.SITEUMLANG,
2270				s_um_display = (PAGE_MODE == 'c') ? SITEUMDISPLAY : property.SITEUMDISPLAY,
2271				s_service = (PAGE_MODE == 'c') ? SERVICE : property.SERVICE;
2272
2273			if( s_validtype != 'BN' && s_validtype != 'SM' ||
2274				s_validtype == 'BN' && s_um == '-1'
2275			) {
2276				$.umember.setUM('off',callback);
2277				return false;
2278			}
2279
2280			if(s_validtype == 'SM' && s_um_display == 'join') s_um_display = 'login';
2281
2282			if(PAGE_MODE == 'c') {
2283				if(typeof callback == 'function') {
2284					callback();
2285				}
2286				return false;
2287			}
2288
2289			var display = (s_um == 1) ? 'login' : s_um_display,
2290				caret = ($('.el-menu > header.navbar').hasClass('sidebar')) ? 'fa fa-caret-right fa-1' : 'fa fa-caret-down fa-1',
2291				str = (s_um == 1) ? $.lang[LANG]['manager.site-um.login'] : ((s_um_display) ? $.lang[s_um_lang]['manager.site-um.'+s_um_display] : '');
2292			
2293			// $.post('/umember/login/check', { sid : sid }, function(r) {
2294				var r = { member : property.UMEMBER };
2295
2296				var check_login = (typeof r.member != 'undefined') ? r.member.check_login : false, 
2297					check_admin = (typeof r.member != 'undefined') ? r.member.check_adm : false, 
2298					check_uadmin = (typeof r.member != 'undefined') ? r.member.check_uadm : false,
2299					check_groot = (typeof r.member != 'undefined') ? r.member.check_groot : false,
2300					uadmin_type = (typeof r.member != 'undefined') ? r.member.uadmin_type : '',
2301					check_id_type = (typeof r.member != 'undefined') ? r.member.id_type : '',
2302 					login_id = (typeof r.member != 'undefined') ? r.member.id : '',
2303 					login_nick = (typeof r.member.nick != 'undefined') ? r.member.nick : login_id,
2304 					login_profile = (typeof r.member.profile != 'undefined') ? r.member.profile : '//storage.googleapis.com/i.addblock.net/defaultImg.png',
2305 					f_color = ($('.el-menu .navbar-fheader').hasClass('mobile-design-clear')) ? 'style="color:' + $('.el-menu ul.navbar-nav > li > a').css('color') + ';"' : '',
2306 					checkFixTypeMenu = (typeof $('.el-menu header.navbar').attr('data-fixtype') != 'undefined' && $('.el-menu header.navbar').attr('data-fixtype')) ? true : false,
2307 					fixtype_color = (checkFixTypeMenu) ? (($('.el-menu .navbar-fheader').hasClass('mobile-design-clear')) ? 'style="color:' + $('.el-menu ul.cl-fixed-menu > li > a').css('color') + ';"' : '') : f_color,
2308 					fixtype_menu_color = (checkFixTypeMenu) ? (($('.el-menu .navbar-fheader').hasClass('mobile-design-clear')) ? 'style="color:' + $('.el-menu #tpl-menu > li > a').css('color') + ';"' : '') : f_color,
2309 					checkFixOnSearch = (typeof $('.el-menu header.navbar').attr('data-fixon') != 'undefined' && $('.el-menu header.navbar').attr('data-fixon').indexOf('search')>-1) ? true : false;
2310					
2311				var hostAry = window.location.hostname.split('.'),
2312					isCoKr = hostAry[2] == 'co' && hostAry[3] == 'kr',
2313					checkDomain = (hostAry[1] != 'creatorlink' && hostAry[1] != 'addblock') ? true : false,
2314					checkPort = (location.port) ? ':'+location.port : '',
2315					host = (!checkDomain) ? (!isCoKr ? `${hostAry[1]}.${hostAry[2]}` : 'creatorlink.co.kr') : 'creatorlink.net',
2316					host_url = (s_service.indexOf('gabia') > -1) ? '//creatorlink-gabia.com' : '//'+host+checkPort,
2317					menu_url = {
2318						'dashboard': (check_uadmin) ? '/_admin/dashboard' : host_url + '/dashboard',
2319						'member'   : (check_uadmin) ? '/_admin/member' : host_url + '/manager/member',
2320					};
2321
2322				var menu_dashboard_str = (check_admin || check_uadmin) ? '\
2323							<li><a href="' + menu_url['dashboard'] + '" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2324							' : '',
2325					menu_member_str = (check_admin) ? '\
2326							<li><a href="' + host_url + '/manager/member/" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.manage'] + '</a></li>\
2327							' : '',
2328					menu_mygabia_str = (s_service.indexOf('gabia') > -1 && (check_admin || (check_uadmin && check_groot))) ? '\
2329							<li><a href="https://www.gabia.com/mygabia/service" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.mypage.gabia'] + '</a></li>\
2330							' : '',
2331					menu_mypage_str = (check_admin) ? '' : ((checkFixTypeMenu) ? '\
2332							<li><a class="mypost cl-umMenu" href="/_mypost">' + $.lang[LANG]['manager.site-um.mypage.post'] + '</a></li>\
2333							<li><a class="hand cl-umMenu myinfo-change" href="javascript:;" onclick="myinfoChangeBtn(this)" id="myinfo-change-btn" data-sid="'+sid+'">' + $.lang[LANG]['manager.site-um.mypage'] + '</a></li>\
2334							' : '<li><a class="mypage" href="javascript:;">' + $.lang[LANG]['manager.site-um.mypage'] + '</a></li>');
2335
2336				if(checkDomain && check_admin) {
2337					menu_dashboard_str = '\
2338							<li><a class="dashboard cl-umMenu" href="javascript:;" target="_blank">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2339							';
2340				}
2341
2342				if(s_validtype == 'SM') {
2343					if(checkFixTypeMenu) {
2344						var propertySettings = (PAGE_MODE!='c' && typeof property.SETTINGS!='undefined') ? property.SETTINGS : {},
2345							smSettings = (PAGE_MODE!='c' && typeof property.SMSETTINGS!='undefined') ? property.SMSETTINGS : {},
2346							point_settings = (PAGE_MODE!='c' && typeof property.POINGSETTINGS!='undefined') ? property.POINGSETTINGS : {},
2347							point_user = (PAGE_MODE!='c' && typeof point_settings.point_use != 'undefined' && point_settings.point_use) ? point_settings.point_use : '',
2348							coupon_btn_str = (PAGE_MODE!='c' && typeof smSettings.coupon_use_yn != 'undefined' && smSettings.coupon_use_yn == 'Y') ? ('<li><a class="coupon cl-umMenu" href="/_coupon">' + $.lang[LANG]['manager.site-um.mypage.coupon'] + '</a></li>') : '',
2349							point_useStr = (PAGE_MODE!='c' && point_user && point_user=='Y' && LANG=='ko') ? '<li><a class="mypoint cl-umMenu" href="/_point">' + $.lang[LANG]['manager.site-um.mypage.point'] + '</a></li>' : '',
2350							wishlist_btn_str = (typeof propertySettings.product_wishlist_btn != 'undefined' && (propertySettings.product_wishlist_btn=='Y') && LANG=='ko') ? '<li><a class="mywishlist cl-umMenu" href="/_wishlist">' + $.lang[LANG]['manager.site-um.mypage.wishlistbtn'] + '</a></li>' : '';
2351						
2352						menu_mypage_str = (check_admin) ? '' : '\
2353								<li><a class="myorderlist cl-umMenu" href="/_mypage">' + $.lang[LANG]['manager.site-um.mypage.orderlist'] + '</a></li>' 
2354								+ wishlist_btn_str + coupon_btn_str + point_useStr + '\
2355								<li><a class="mypost cl-umMenu" href="/_mypost">' + $.lang[LANG]['manager.site-um.mypage.post'] + '</a></li>\
2356								<li><a class="hand myinfo-change cl-umMenu" href="javascript:;" onclick="myinfoChangeBtn(this)" id="myinfo-change-btn" data-sid="'+sid+'">' + $.lang[LANG]['manager.site-um.mypage.new'] + '</a></li>\
2357						';
2358					} else {
2359						menu_mypage_str = (check_admin) ? '' : '\
2360								<li><a class="mypage" href="javascript:;">' + $.lang[LANG]['manager.site-um.mypage.SM'] + '</a></li>\
2361						';
2362					}
2363				}
2364
2365				if(login_id == 'naverpaytest') {
2366					menu_mypage_str = '';
2367				}
2368
2369				var SLANG = (PAGE_MODE == 'c') ? SLANG : property.SLANG,
2370					lang_str = LANG;
2371
2372				if((typeof SLANG != 'undefined' && typeof SLANG.select_code != 'undefined' && SLANG.select_code)
2373			                || (!$.isEmptyObject(SLANG) && SLANG.use_language == 'on' && SLANG.select_code)) {
2374			        lang_str = (SLANG['select_code'].toLowerCase()!='ko') ? 'en' : LANG;
2375			    } 
2376			  
2377				var login_url = (s_validtype == 'SM') ? '/_login' : 'javascript:;',	
2378					login_content_dropdown_class = (checkFixTypeMenu) ? 'dropdown-toggle' : '',
2379					login_content_dropdown = (checkFixTypeMenu) ? 'data-toggle="dropdown" data-target="#m-dropdown-wrap-um"' : '',
2380					login_svg = (checkFixTypeMenu) ? clSVG('arrow_next',16,16) : '',
2381					login_content = (!check_login) ? '<div class="login-content siteUM"><a href="javascript:;" class="' + display + '" ' + fixtype_color + '>' + $.lang[lang_str]['manager.site-um.mobile.'+s_um_display] + login_svg + '</a></div>' : '\
2382					<div class="login-content '+login_content_dropdown_class+'" '+login_content_dropdown+'>\
2383						<div class="login-profile">\
2384							<img src="' + login_profile + '" alt="" class="img-responsive" />\
2385						</div>\
2386						<div class="login-nick"  ' + fixtype_menu_color + '><span>' + login_nick + '</span> 님</div>\
2387					</div>',
2388					menu_str = menu_dashboard_str + menu_member_str + menu_mygabia_str + menu_mypage_str,
2389					pc_dropdown = (check_login) ? '\
2390					<ul class="dropdown-menu">\
2391							' + menu_str + '\
2392							<li><a class="logout cl-umMenu" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2393						</ul>\
2394						' : '',
2395					content = (!check_login) ? '\
2396					<li class="siteUM"><a href="javascript:;" class="' + display + '"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></li>' : '\
2397					<li class="siteUM dropdown">\
2398						<a href="javascript:;" class="dropdown-toggle"><i class="cl-icon cl_icon_profile_on02" aria-hidden="true"></i></a>\
2399						'+ pc_dropdown +'\
2400					</li>\
2401					',
2402					mobile_dropdown = (check_login) ? '\
2403					<div class="dropdown-menu-wrap" id="m-dropdown-wrap-um">\
2404						<span class="dropdown-close"><img src="//storage.googleapis.com/i.addblock.net/fa-close-modal-white.png" alt="Close Member Menu"></span></span>\
2405						<ul class="dropdown-menu">\
2406							' + menu_str + '\
2407							<li><a class="logout cl-umMenu" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2408						</ul>\
2409					</div>\
2410					' : '',
2411					mobile_content = (!check_login) ? '\
2412					<li class="siteUM"><a href="javascript:;" class="' + display + '"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></li>' : '\
2413					<li class="siteUM dropdown">\
2414						<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-target="#m-dropdown-wrap-um"><i class="cl-icon cl_icon_profile_on02" aria-hidden="true"></i></a>\
2415						'+ mobile_dropdown +'\
2416					</li>\
2417					';
2418
2419				// IE ERROR_promise__H.20210603
2420				// var successSiteUMLogin = new Promise(function(resolve, reject) {
2421				var successSiteUMLogin = function() {
2422					var deferred = $.Deferred();
2423
2424					var pc_nav = $('.el-menu header.navbar #fixed-menu, .el-menu header.navbar #fixed-menu-sub'),
2425						mobile_nav = $('#mobile-nav #fixed-menu'),
2426						checkFixTypeMenu = (typeof $('.el-menu header.navbar').attr('data-fixtype') != 'undefined' && $('.el-menu header.navbar').attr('data-fixtype')) ? true : false;
2427
2428					if(pc_nav.find('.siteUM').length > 0) {
2429						if(checkFixTypeMenu) {
2430							setLoginLogoutAttribute(check_login,pc_nav,display);
2431							if(check_login) pc_nav.find('.siteUM').find('.cl-logout').after(pc_dropdown);										
2432						} else pc_nav.find('.siteUM').replaceWith(content);
2433					} else {
2434						if(pc_nav.find('.siteSEARCH').length > 0) pc_nav.find('.siteSEARCH').after(content);
2435						else if(pc_nav.find('.siteCART').length > 0) pc_nav.find('.siteCART').before(content);
2436						else if(pc_nav.find('.siteLANG').length > 0) pc_nav.find('.siteLANG').before(content);
2437						else pc_nav.append(content);
2438					}
2439
2440					if(mobile_nav.find('.siteUM').length > 0) {
2441						if(checkFixTypeMenu) {
2442							setLoginLogoutAttribute(check_login,mobile_nav,display);
2443							if(check_login) mobile_nav.prepend(mobile_dropdown);
2444						} else mobile_nav.find('.siteUM').replaceWith(mobile_content);
2445					} else {
2446						if(mobile_nav.find('.siteSEARCH').length > 0) mobile_nav.find('.siteSEARCH').after(mobile_content);
2447						else if(mobile_nav.find('.siteCART').length > 0) mobile_nav.find('.siteCART').before(mobile_content);
2448						else if(mobile_nav.find('.siteLANG').length > 0) mobile_nav.find('.siteLANG').before(mobile_content);
2449						else mobile_nav.append(mobile_content);
2450					}
2451
2452					
2453					if(mobile_nav.closest('#mobile-nav').find('.login-content').length > 0) mobile_nav.closest('#mobile-nav').find('.login-content').replaceWith(login_content);
2454					else mobile_nav.before(login_content);
2455
2456					if(pc_nav.find('.siteUM').css('display')=='none') {
2457						if(!checkFixOnSearch) {
2458							mobile_nav.parent().addClass('hide');
2459						} else {
2460							mobile_nav.parent().find('.login-content').css('pointer-events','none');
2461							mobile_nav.parent().find('.login-content').children().css('visibility','hidden');
2462						}
2463					}
2464
2465					// var loginStr = (checkFixTypeMenu && !check_login) ? mobile_nav.find('.siteUM').removeClass('dropdown').find('.cl-login').clone() : '';
2466
2467					// if(checkFixTypeMenu && (mobile_nav.closest('#mobile-nav').find('.login-content').length > 0) && !check_login) {
2468					// 	$('.mobilenav_top .login-content').html(loginStr);
2469					// } 
2470
2471				// IE ERROR_promise__H.20210603
2472				// 	resolve();
2473				// });
2474					deferred.resolve();
2475					return deferred.promise();
2476				}
2477
2478
2479				// IE ERROR_promise__H.20210603
2480				// successSiteUMLogin.then(function(value) {
2481				successSiteUMLogin().then(function(value) {
2482					if(typeof callback == 'function') {
2483						callback();
2484					}
2485				});
2486
2487
2488			// },'json');
2489
2490
2491		},
2492		makeSiteUM: function(callback) {
2493			// console.log('umember makeSiteUM');
2494			var sid = (PAGE_MODE == 'c') ? SID : property.SID,
2495				s_validtype = (PAGE_MODE == 'c') ? VALIDTYPE : property.VALIDTYPE,
2496				s_um = (PAGE_MODE == 'c') ? SITEUM : property.SITEUM,
2497				s_um_lang = (PAGE_MODE == 'c') ? SITEUMLANG : property.SITEUMLANG,
2498				s_um_display = (PAGE_MODE == 'c') ? SITEUMDISPLAY : property.SITEUMDISPLAY,
2499				s_service = (PAGE_MODE == 'c') ? SERVICE : property.SERVICE;
2500
2501			if( s_validtype != 'BN' && s_validtype != 'SM' ||
2502				s_validtype == 'BN' && s_um == '-1') {
2503				$.umember.setUM('off',callback);
2504				return false;
2505			}
2506
2507			if(s_validtype == 'SM' && s_um_display == 'join') s_um_display = 'login';
2508
2509			var display = (s_um == 1) ? 'login' : s_um_display,
2510				caret = ($('.el-menu > header.navbar').hasClass('sidebar')) ? 'fa fa-caret-right fa-1' : 'fa fa-caret-down fa-1',
2511				str = (s_um == 1) ? $.lang[LANG]['manager.site-um.login'] : ((s_um_display) ? $.lang[s_um_lang]['manager.site-um.'+s_um_display] : '');
2512
2513			$.post('/umember/login/check', { sid : sid }, function(r) {
2514				var check_login = (typeof r.member != 'undefined') ? r.member.check_login : false, 
2515					check_admin = (typeof r.member != 'undefined') ? r.member.check_adm : false, 
2516					check_uadmin = (typeof r.member != 'undefined') ? r.member.check_uadm : false,
2517					uadmin_type = (typeof r.member != 'undefined') ? r.member.uadmin_type : '',
2518					check_id_type = (typeof r.member != 'undefined') ? r.member.id_type : '',
2519 					login_id = (typeof r.member != 'undefined') ? r.member.id : '',
2520 					login_nick = (typeof r.member.nick != 'undefined') ? r.member.nick : login_
2520id;
2521
2522                var hostAry = window.location.hostname.split('.'),
2523					isCoKr = hostAry[2] == 'co' && hostAry[3] == 'kr',
2524                    checkDomain = (hostAry[1] != 'creatorlink' && hostAry[1] != 'addblock') ? true : false,
2525                    checkPort = (location.port) ? ':'+location.port : '',
2526					host = (!checkDomain) ? (!isCoKr ? `${hostAry[1]}.${hostAry[2]}` : 'creatorlink.co.kr') : 'creatorlink.net',
2527                    host_url = (s_service.indexOf('gabia') > -1) ? '//creatorlink-gabia.com' : '//'+host+checkPort,
2528					menu_url = {
2529					'dashboard': (check_uadmin) ? '/_admin/dashboard' : host_url + '/dashboard',
2530					'member'   : (check_uadmin) ? '/_admin/member' : host_url + '/manager/member',
2531				};
2532
2533				var menu_dashboard_str = (check_admin || check_uadmin) ? '\
2534							<li><a href="' + menu_url['dashboard'] + '" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2535							' : '',
2536					menu_member_str = (check_admin) ? '\
2537							<li><a href="' + host_url + '/manager/member" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.manage'] + '</a></li>\
2538							' : '',
2539					menu_mygabia_str = (s_service.indexOf('gabia') > -1 && (check_admin || (check_uadmin && check_groot))) ? '\
2540							<li><a href="https://www.gabia.com/mygabia/service" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.mypage.gabia'] + '</a></li>\
2541							' : '',
2542					menu_mypage_str = (check_admin) ? '' : '\
2543							<li><a class="mypost cl-umMenu" href="/_mypost">' + $.lang[LANG]['manager.site-um.mypage.post'] + '</a></li>\
2544							<li><a class="hand myinfo-change cl-umMenu" onclick="myinfoChangeBtn(this)" id="myinfo-change-btn" data-sid="'+sid+'">' + $.lang[LANG]['manager.site-um.mypage'] + '</a></li>\
2545							';
2546
2547				if(checkDomain && check_admin) {
2548					menu_dashboard_str = '\
2549							<li><a class="dashboard cl-umMenu" href="javascript:;" target="_blank">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2550							';
2551				}
2552
2553				if(s_validtype == 'SM') {
2554					var propertySettings = (PAGE_MODE!='c' && typeof property.SETTINGS!='undefined') ? property.SETTINGS : {},
2555						smSettings = (PAGE_MODE!='c' && typeof property.SMSETTINGS!='undefined') ? property.SMSETTINGS : {},
2556						point_settings = (PAGE_MODE!='c' && typeof property.POINGSETTINGS!='undefined') ? property.POINGSETTINGS : {},
2557						point_user = (PAGE_MODE!='c' && typeof point_settings.point_use != 'undefined' && point_settings.point_use) ? point_settings.point_use : '',
2558						coupon_btn_str = (PAGE_MODE!='c' && typeof smSettings.coupon_use_yn != 'undefined' && smSettings.coupon_use_yn=='Y') ? ('<li><a class="coupon cl-umMenu" href="/_coupon">' + $.lang[LANG]['manager.site-um.mypage.coupon'] + '</a></li>') : '';
2559						point_useStr = (PAGE_MODE!='c' && point_user && point_user=='Y') ? '<li><a class="mypoint cl-umMenu" href="/_point">' + $.lang[LANG]['manager.site-um.mypage.point'] + '</a></li>' : '',
2560						wishlist_btn_str = (typeof propertySettings.product_wishlist_btn != 'undefined' && (propertySettings.product_wishlist_btn=='Y')) ? '<li><a class="mywishlist cl-umMenu" href="/_wishlist">' + $.lang[LANG]['manager.site-um.mypage.wishlistbtn'] + '</a></li>' : '';
2561					
2562					menu_mypage_str = (check_admin) ? '' : '\
2563							<li><a class="myorderlist cl-umMenu" href="/_mypage">' + $.lang[LANG]['manager.site-um.mypage.orderlist'] + '</a></li>'
2564							+ wishlist_btn_str + coupon_btn_str + point_useStr + '\
2565							<li><a class="mypost cl-umMenu" href="/_mypost">' + $.lang[LANG]['manager.site-um.mypage.post'] + '</a></li>\
2566							<li><a class="hand myinfo-change cl-umMenu" href="javascript:;" onclick="myinfoChangeBtn(this)" id="myinfo-change-btn" data-sid="'+sid+'">' + $.lang[LANG]['manager.site-um.mypage'] + '</a></li>\
2567					';
2568				}
2569
2570				var menu_str = menu_dashboard_str + menu_member_str + menu_mygabia_str + menu_mypage_str,
2571					content = (!check_login) ? '<li class="siteUM"><a class="' + display + '" href="javascript:;"><span class="glyphicon glyphicon-user"></span> ' + str + '</a></li>' : '\
2572					<li class="siteUM dropdown">\
2573						<a href="javascript:;" class="dropdown-toggle">' + login_nick + ' <i class="' + caret + '" aria-hidden="true"></i></a>\
2574						<ul class="dropdown-menu">\
2575							' + menu_str + '\
2576							<li><a class="logout" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2577						</ul>\
2578					</li>\
2579					',
2580					mobile_content = (!check_login) ? '<div class="siteUM micon"><a class="' + display + '" href="javascript:;"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a></div>' : '\
2581					<div class="siteUM micon dropdown">\
2582						<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-target=".siteUM-dmenu-wrap"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a>\
2583					</div>\
2584					',
2585					mobile_dropdown_menu = '\
2586					<div class="siteUM-dmenu-wrap">\
2587						<!--<span class="dropdown-close"><span class="icon-bar"></span><span class="icon-bar"></span></span>-->\
2588						<ul class="dropdown-menu">\
2589							' + menu_str + '\
2590							<li><a class="logout" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2591						</ul>\
2592					</div>\
2593				';
2594
2595				if(check_id_type == 'creatorlink' && !check_admin && login_id) { //creatorlink member
2596					var mypage_url = (s_service.indexOf('gabia') > -1) ? '//www.gabia.com/mygabia/service' : '//'+host_url+'/mypage',
2597						mypage_name = (s_service.indexOf('gabia') > -1) ? $.lang[LANG]['manager.site-um.mypage.gabia'] : $.lang[LANG]['manager.site-um.mypage'];
2598
2599					content = '\
2600					<li class="siteUM dropdown">\
2601						<a href="javascript:;" class="dropdown-toggle">' + login_nick + ' <i class="' + caret + '" aria-hidden="true"></i></a>\
2602						<ul class="dropdown-menu">\
2603							<li><a href="' + host_url + '/dashboard" target="_blank" class="cl-umMenu">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2604					';
2605
2606					if(!check_uadmin) content +='\
2607							<li><a href="' + mypage_url + '" target="_blank" class="cl-umMenu">' + mypage_name + '</a></li>\
2608					';
2609					content += '\
2610							<li><a class="logout cl-umMenu" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2611						</ul>\
2612					</li>\
2613					';
2614					mobile_content = '\
2615					<div class="siteUM micon dropdown">\
2616						<a href="javascript:;" class="dropdown-toggle" data-target=".siteUM-dmenu-wrap"><i class="cl-icon cl_icon_profile" aria-hidden="true"></i></a>\
2617					</div>\
2618					';
2619					mobile_dropdown_menu = '\
2620					<div class="siteUM-dmenu-wrap">\
2621						<!--<span class="dropdown-close"><span class="icon-bar"></span><span class="icon-bar"></span></span>-->\
2622						<ul class="dropdown-menu">\
2623							<li><a href="' + host_url + '/dashboard" target="_blank">' + $.lang[LANG]['manager.site-um.dashboard'] + '</a></li>\
2624							<li><a href="' + mypage_url + '" target="_blank">' + $.lang[LANG]['manager.site-um.mypage'] + '</a></li>\
2625							<li><a class="logout" href="javascript:;">' + $.lang[LANG]['manager.site-um.logout'] + '</a></li>\
2626						</ul>\
2627					</div>\
2628					';
2629				} 
2630
2631
2632				// IE ERROR_promise__H.20210603
2633				// var successSiteUMLogin = new Promise(function(resolve, reject) {
2634				var successSiteUMLogin = function() {
2635					var deferred = $.Deferred();
2636
2637					if($('#tpl-menu').find('.siteUM').length > 0) $('#tpl-menu').find('.siteUM').replaceWith(content);
2638					else {
2639						if($('#tpl-menu').find('.siteLANG').length > 0 ) $('#tpl-menu').find('.siteLANG').before(content);
2640						else $('#tpl-menu').append(content);
2641					}
2642
2643					if($('div.siteUM.micon').length>0) $('div.siteUM.micon').replaceWith(mobile_content);
2644					else $('.el-menu .navbar-toggle').before(mobile_content);
2645
2646					if($('div.siteUM-dmenu-wrap').length>0) $('div.siteUM-dmenu-wrap').replaceWith(mobile_dropdown_menu);
2647					else $('#tpl-menu').parent().after(mobile_dropdown_menu);
2648
2649					var check_slang = (PAGE_MODE == 'c') ? SLANG : property.SLANG;
2650					$('.el-menu .navbar-header div.siteUM.micon').css({
2651						'color': $('.el-menu .navbar-toggle .icon-bar').css('background-color'),
2652						'right': ($.isEmptyObject(check_slang)) ? '56px' : '91px',
2653					});
2654
2655				// IE ERROR_promise__H.20210603
2656				// 	resolve();
2657				// });
2658					deferred.resolve();
2659					return deferred.promise();
2660				}
2661
2662				// IE ERROR_promise__H.20210603
2663				// successSiteUMLogin.then(function(value) {
2664				successSiteUMLogin().then(function(value) {
2665					if(typeof callback == 'function') {
2666						callback();
2667					}
2668				});
2669			},'json');
2670
2671		},
2672		showMngModal: function(sid, content, id, backdrop, showcallback, showncallback, hiddencallback, callback, closecallback) {
2673			// console.log('umember showMngModal');
2674			var container = $(content),
2675				backdrop = (typeof backdrop == 'undefined') ? false : true;
2676
2677			$('body').append(container);
2678			var newInstance = jQuery.extend(true, {}, container);
2679			var modalElement = newInstance.find('#' + id);
2680
2681			modalElement.attr('data-sid',sid);
2682
2683			if(backdrop) modalElement.modal({ backdrop : 'static'});
2684			else modalElement.modal();
2685
2686			modalElement.on('show.bs.modal', function(e) {
2687				if(typeof showcallback == 'function') showcallback();
2688			});
2689
2690			modalElement.on('shown.bs.modal', function(e) {
2691				var modal = document.querySelector('.modal');
2692				modal.style.position = 'absolute';
2693				setTimeout(function() {
2694					modal.style.position = 'fixed';
2695				},0);
2696				if(window.innerWidth <= 768) $.mobileToggleMenu.close();
2697				if(typeof showncallback == 'function') showncallback();
2698			});
2699
2700			modalElement.on('hidden.bs.modal', function(e) {
2701				var flat_modal_id = $(this).attr('id');
2702				$('.editor-navbar').css('z-index','1040');
2703				var this_modal = $('#'+flat_modal_id).closest('.flat-modal');
2704				this_modal.next('.modal-backdrop').remove();
2705				this_modal.remove();
2706
2707				if($('.modal-backdrop').length) {
2708					setTimeout(function() {
2709						$('body').addClass('modal-open');    
2710					},10);                
2711				}
2712				$('body').removeClass('no-fixed');
2713
2714				if(typeof hiddencallback == "function") hiddencallback();
2715			});
2716
2717			newInstance.find('.ok-button-dialog').bind('click', function () {
2718				if(typeof callback == 'function')
2719					callback();
2720			});
2721
2722			newInstance.find('.close-button-dialog').bind('click', function () {
2723				if(typeof closecallback == 'function')
2724					closecallback();
2725			});
2726
2727			return modalElement;
2728		},
2729		showJoinModal: function(sid,mode) {
2730			console.log('umember showJoinModal');
2731			mode = (typeof mode != 'undefined' && mode) ? '-' + mode : '';
2732
2733			if($('#join-modal' + mode).length > 0) return false;
2734			if($('#login-modal').length > 0) $('#login-modal').delay(3000).modal('hide');
2735
2736			$.post('/umember/get/type/join', { sid : sid, field : '*' }, function(data) {
2737				if(typeof data.error != 'undefined' && data.error) {
2738					alert(data.error);
2739					return false;
2740				}
2741				
2742				COLLECTION_REGEX = $.parseJSON(data['regExp']);
2743
2744				var content = $.umember.makeJoinModalContent(sid,data,mode);
2745				$.umember.showMngModal(sid, content, 'join-modal' + mode, false,
2746										function() { $.umember.joinModalInit(mode); }, 
2747										function() { $.umember.joinModalKeyFunc(mode); }, '', '', '');
2748				
2749			}, 'json');
2750		},
2751		makeJoinCollectionsTypeVal: function(oval_i,oval_type,oval_v,org_field,optional_class,check_page,val) {
2752			var str = '';
2753
2754			check_page = (typeof check_page != 'undefined' && check_page) ? check_page : '';
2755			val = (typeof val != 'undefined' && val) ? val : '';
2756			switch (oval_type) {
2757				case 'memo':
2758					str += '\
2759						<textarea class="cl-s-form-control" name="'+org_field+'" cols="120" rows="10" id="cl-etc-input-val-memo">'+oval_v+'</textarea>\
2760					';
2761					break;
2762				case 'radio':
2763					var oval_checked = ((check_page=='mypage') && (oval_v==val)) ? 'checked' : '';
2764					str += '\
2765						<div class="newcheckbox">\
2766							<label>\
2767								<div class="newcheckboxSvgRadio">\
2768									<input type="radio" class="cl-common-form-radio-hide cl-etc-input-val cl-s-form-control" name="'+org_field+'" value="'+oval_v+'" '+oval_checked+'>\
2769									<svg viewBox="0 0 18 18" width="18" height="18">\
2770										<path d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 
27700-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"/>\
2771									</svg>\
2772									<svg class="active" viewBox="0 0 18 18" width="18" height="18">\
2773										<path d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 0-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"/>\
2774										<circle cx="9" cy="9" r="6"/>\
2775									</svg>\
2776								</div>\
2777								<span>'+oval_v+'</span>\
2778							</label>\
2779						</div>\
2780					';
2781					
2782					break;				
2783					
2784				case 'check':
2785					var oval_checked = ((check_page=='mypage') && (oval_v==val)) ? 'checked' : '';
2786						if(check_page=='mypage' && (val.indexOf('`') > -1)) {
2787							if(val.indexOf(oval_v) > -1) {
2788								oval_checked = 'checked';
2789							}
2790						}
2791						str += '\
2792						<div class="newcheckbox">\
2793							<label>\
2794								<div class="newcheckboxSvg">\
2795									<input type="checkbox" class="cl-common-form-radio-hide cl-etc-input-val cl-s-form-control" id="" name="'+org_field+'" value="'+oval_v+'" '+oval_checked+'>\
2796									<svg viewBox="0 0 16 16" width="16" height="16">\
2797										<path class="st6" d="M3 0h10c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3C0 1.34 1.34 0 3 0z"></path>\
2798										<path class="st19" d="M13 1c1.1 0 2 0.9 2 2v10c0 1.1-0.9 2-2 2H3c-1.1 0-2-0.9-2-2V3c0-1.1 0.9-2 2-2H13M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0L13 0z"></path>\
2799									</svg>\
2800									<svg class="active" viewBox="0 0 16 16" width="16" height="16">\
2801										<rect x="2" y="2" class="st6" width="12" height="12"></rect>\
2802										<path class="st19" d="M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0zM13.03 6.03l-5.5 5.5C7.38 11.68 7.19 11.75 7 11.75s-0.38-0.07-0.53-0.22l-3.5-3.5c-0.29-0.29-0.29-0.77 0-1.06s0.77-0.29 1.06 0L7 9.94l4.97-4.97c0.29-0.29 0.77-0.29 1.06 0S13.32 5.74 13.03 6.03z"></path>\
2803									</svg>\
2804								</div>\
2805								<span>'+oval_v+'</span>\
2806							</label>\
2807						</div>\
2808						';
2809					
2810					break;
2811
2812				case 'select':
2813					var selected = ((check_page=='mypage') && (oval_v==val)) ? 'selected' : '';
2814					str += '\
2815						<option value="'+oval_v+'" '+selected+'>'+oval_v+'</option>\
2816					';
2817					
2818					break;
2819				case 'fupload':
2820						// todo 데이터 잇없 체크
2821						str += $.umember.fileHtmlRender(org_field, {
2822										val : val,
2823										type : "type1",
2824									})
2825					break;
2826				default:
2827					break;
2828			}
2829				if(org_field=='etc7') {
2830				console.log(oval_v);
2831				}
2832			return str;
2833						
2834		},
2835		makeJoinConditionsStr: function(sid,data,key,mode) {
2836			// console.log('umember makeJoinConditionsStr');
2837			switch(key) {
2838				case 'captcha' :
2839					return `
2840								<div class="kcaptcha-wrap clearfix ${(data['captcha'] == '1') ? '' : 'hide'}">
2841									<div class="col-xs-4 col-sm-4 col-md-4 no-padding kcaptcha-box">
2842										<p id="write_option"><img src="" id="kcaptcha" alt=""/></p>
2843									</div>
2844									<div class="col-xs-8 col-sm-8 col-md-8 text-left kcaptcha-key-wrap">
2845										<input type="text" id="wr_key" name="wr_key" class="col-xs-12 col-sm-12 col-md-12 ed" placeholder="${$.lang[LANG]['manager.join.cl.captcha-msg']}" />
2846										<a class="kcaptcha-change hand small">${$.lang[LANG]['manager.join.cl.captcha-change']}</a>
2847									</div>
2848								</div>
2849					`;
2850					break;
2851
2852				case 'collections':
2853					var collections_html = '';
2854					$.each(data['collections'], function(field,o) {
2855						if(field == 'email') return;
2856						if(o['used']) {
2857							var org_field = (field == 'addr') ? field + '1' : field,
2858								optional = o['optional'],
2859								name = (o['name']) ? o['name'] : $.lang[LANG]['manager.list.info.'+org_field],
2860								optional_class = (optional) ? 'optional' : '',
2861								key_func = '',
2862								add_input = '',
2863								jcollection_val_str = '',
2864								fupload_label = '',
2865 								etc_val_type = ['memo','radio','check','select','fupload'];
2866
2867							if(field == 'birth') {
2868								name = $.lang[LANG]['siteum.mypage.Birth'];
2869								key_func = 'onkeyup="auto_date_format(event, this)" onkeypress="auto_date_format(event, this)"';
2870								key_func = 'onkeydown="auto_date_format(event, this)"';
2871							}
2872						
2873							var star = (optional) ? '<span class="input-star">*</span>' : '';
2874							if(field.indexOf('etc')>-1 && etc_val_type.includes(o['type'])) {
2875								var o_val = o['val'],
2876									o_val_arr = ((o_val.indexOf('`') > -1) && (o['type']=='radio' || o['type']=='check' || o['type']=='select'|| o['type']=='fupload')) ? o_val.split('`') : [o_val],
2877									description_class = (o['description_used']=='true' && (o['type']=='memo')) ? 'use_descr' : '';
2878
2879								add_input = '\
2880								<div class="cl-s-join-collections-etcwrap cl-s-form-wrap '+(o['type']=='fupload' ? 'nodata' : '') +' '+ optional_class + '" data-jcoltype="'+o['type']+'">';
2881								add_input += '\
2882									<div class="cl-s-etc">\
2883										<span class="cl-s-etc-name">'+ name + star +'</span>\
2884										';
2885								add_input += (o['description_used']=='true') ? '<span class="cl-s-etc-description">'+ o['description'] +'</span>' : '';
2886								add_input += '\
2887									</div>\
2888									';
2889
2890								add_input += '\
2891									<div class="cl-s-etc-val '+description_class+'">\
2892								';
2893
2894								// /*라벨 앞에 <input type="text" class="hide" value=""> 이거 있었음*/
2895								// if(o['type']=='fupload') { // JH
2896								// 	add_input += $.umember.fileHtmlRender('join', {
2897								// 	orgfield : org_field
2898								// 	})
2899							 
2900								// } 
2901								if(o['type']=='select') {
2902									add_input += '\
2903									<div class="cl-s-form-group cl-s-form-group-select">\
2904										<select class="cl-s-form-control" name="'+org_field+'" id="input-' + org_field + '" required="required">\
2905											<option value="">'+$.lang[LANG]['manager.list.info.gender.select']+'</option>\
2906									';
2907								} 
2908								if(o_val_arr.length > 0) {
2909									$.each(o_val_arr, function(oval_i,oval_v){
2910										jcollection_val_str += $.umember.makeJoinCollectionsTypeVal(oval_i,o['type'],oval_v,org_field,optional_class);
2911									});
2912								} 
2913								
2914								if(o['type']=='select') {
2915									jcollection_val_str += '\
2916										</select>\
2917										<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
2918									</div>\
2919									';
2920								}
2921								jcollection_val_str += '</div></div>';
2922								
2923							} else {
2924								add_input = '\
2925											<div class="cl-s-form-wrap ' + optional_class + '">\
2926												<div class="cl-s-form-group">\
2927													<input type="text" class="cl-s-form-control" name="'+org_field+'" id="input-' + org_field + '" required="required" value="" ' + key_func + '>\
2928													<label for="input" class="cl-s-control-label">' + name + star + '</label>\
2929												</div>\
2930											</div>\
2931									';
2932								
2933								if(field == 'addr') {
2934									var addr_modal = (mode.indexOf('shopping') > -1 || o['addrsearch']) ? 'readonly onfocus="addrSearchModal(\'input\')" ' : '';
2935									add_input = '\
2936											<div class="cl-s-form-wrap ' + optional_class + '">\
2937												<div class="cl-s-form-group">\
2938													<input type="hidden" class="cl-s-form-control" name="postcode" id="input-postcode" value="">\
2939													<input type="text" class="cl-s-form-control" name="'+org_field+'" id="input-' + org_field + '" required="required" value="" ' + addr_modal + '>\
2940													<label for="input" class="cl-s-control-label">' + $.lang[LANG]['manager.list.info.addr1'] + star + '</label>\
2941												</div>\
2942											</div>\
2943											<div class="cl-s-form-wrap">\
2944												<div class="cl-s-form-group">\
2945													<input type="text" class="cl-s-form-control" name="addr2" id="input-addr2" required="required" value="">\
2946													<label for="input" class="cl-s-control-label">' + $.lang[LANG]['manager.list.info.addr2'] + '</label>\
2947												</div>\
2948											</div>\
2949									';
2950								}
2951
2952								if(field == 'gender') {
2953									add_input = '\
2954											<div class="cl-s-form-wrap ' + optional_class + '">\
2955												<div class="cl-s-form-group">\
2956													<select class="cl-s-form-control" name="'+org_field+'" id="input-' + org_field + '" required="required">\
2957														<option value="">'+$.lang[LANG]['manager.list.info.gender.select']+'</option>\
2958														<option value="01">'+$.lang[LANG]['manager.list.info.gender.01']+'</option>\
2959														<option value="02">'+$.lang[LANG]['manager.list.info.gender.02']+'</option>\
2960													</select>\
2961													<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
2962													<label for="input" class="cl-s-control-label">' + $.lang[LANG]['manager.list.info.gender'] + star + '</label>\
2963												</div>\
2964											</div>\
2965									';
2966								}
2967
2968								//if(mode == 'shopping_social' && !optional) add_input = '';
2969								if(mode == 'shopping_social' && !o['used']) add_input = '';
2970
2971
2972								if(mode.indexOf('cert') > -1) {
2973									switch (field) {
2974										case 'name':
2975										case 'gender':
2976										case 'birth':
2977										case 'tel':
2978											add_input = '<input id="input-' + org_field + '" type="hidden" name="' + org_field + '" value="">';
2979											break;
2980									}
2981								}
2982							}
2983
2984							collections_html += add_input + jcollection_val_str;
2985
2986						}
2987					});
2988					return collections_html;
2989					break;
2990
2991				default:
2992					return data[key];
2993					break;
2994			}
2995
2996		},
2997		makeJoinModalContent: function(sid,data,mode) {
2998			// console.log('umember makeJoinModalContent');
2999			if(PAGE_MODE == 's') { // 게시사이트 다국어 회원가입 페이지 한글과 섞
2999여나오는 부분 방지
3000				if(property.SLANG.select_code == undefined) {
3001					LANG = 'ko';
3002				} else {
3003					if(property.SLANG.select_code == 'ko') LANG = 'ko';
3004					else LANG = 'en';
3005				}
3006			}
3007			var collections = $.umember.makeJoinConditionsStr(sid,data,'collections',mode),
3008				captcha = $.umember.makeJoinConditionsStr(sid,data,'captcha',mode),
3009				privacy_type = (LANG == 'ko') ? 'privacy-join' : 'privacy',
3010				approval = (typeof data.approval != 'undefined' && data.approval) ? data.approval : 'hand',
3011				mode2 = data.mode2;
3012
3013			var sns_input = (mode == 'shopping_social' || (mode == 'shopping_cert' && mode2 == 'shopping_sns')) ? 'readonly="true"' : '',
3014				content = '\
3015					<div class="cl-s-form-wrap optional">\
3016						<div class="cl-s-form-group">\
3017							<input type="text" class="cl-s-form-control" name="email" id="input-email" required="required" value="" '+sns_input+'>\
3018							<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.login.email'] + '<span class="input-star">*</span></label>\
3019						</div>\
3020					</div>\
3021			';
3022
3023			if(mode == 'shopping_social' || (mode == 'shopping_cert' && mode2 == 'shopping_sns')) {
3024				content += collections;
3025				var register_form_arr = {
3026					'content' : content
3027				}
3028			} else {
3029				content += '\
3030						<div class="cl-s-form-wrap optional">\
3031							<div class="cl-s-form-group">\
3032								<input type="password" class="cl-s-form-control" name="password" id="input-password" required="required" value="">\
3033								<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.login.password'] + '<span class="input-star">*</span></label>\
3034							</div>\
3035						</div>\
3036						<div class="cl-s-form-wrap optional">\
3037							<div class="cl-s-form-group">\
3038								<input type="password" class="cl-s-form-control" name="password_checked" id="input-password-checked" required="required" value="">\
3039								<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.login.password-check'] + '<span class="input-star">*</span></label>\
3040							</div>\
3041						</div>\
3042						<div class="cl-s-form-description">' + $.lang[LANG]['siteum.login.password.description'] + '</div>\
3043						' + collections + '\
3044				';
3045				var register_form_arr = {
3046					'content' : content,
3047					'captcha' : captcha
3048				}
3049			}
3050			return register_form_arr;
3051		},
3052		joinModalInit: function(mode) {
3053			// console.log('umember joinModalInit');
3054			mode = (mode) ? '-' + mode : '';
3055			var joinModal = $('#join-modal' + mode);
3056
3057			joinModal.find('.form-group').each(function() {
3058				$(this).removeClass('focus');
3059				$(this).find('.error').remove();
3060				$(this).find('input.form-control').val('');
3061				$(this).find('#join-textarea').html('');
3062			});
3063			
3064			joinModal.find('#wr_key').val('');
3065		},
3066		joinModalKeyFunc: function(mode) {
3067			// console.log('umember joinModalKeyFunc');
3068			mode = (mode) ? '-' + mode : '';
3069			var joinModal = $('#join-modal' + mode);
3070
3071			if(!joinModal.find('.kcaptcha-wrap').hasClass('hide')) {
3072				load_kcaptcha();
3073				joinModal.find('#wr_key').live({
3074					keyup: function() {
3075						if($(this).val().trim().length > 0) { $(this).next('.error').remove(); }
3076					}
3077				});
3078			}
3079
3080			joinModal.find('input.form-control').live({
3081				focus: function() {
3082					$(this).closest('.form-group').addClass('focus').siblings().removeClass('focus');
3083				}, 
3084				blur: function() {
3085					$(this).closest('.form-group').removeClass('focus');
3086				},
3087				keydown: function(key) {
3088					if(key.keyCode == 13) $('#uJoin').click();
3089				},
3090				keyup: function() {
3091					var groupEl = $(this).closest('.form-group'),
3092						errorEL = $(this).next().next('.error'),
3093						field = $(this).attr('id').trim().replace(/input-/,''),
3094						reg_has = (typeof COLLECTION_REGEX[field] != 'undefined' && COLLECTION_REGEX[field]) ? true : false,
3095						reg_pattern = (reg_has) ? COLLECTION_REGEX[field]['pattern_j'] : '',
3096						reg_ex = (reg_has) ? COLLECTION_REGEX[field]['ex'] : '';
3097
3098					if(field=='password' || field == 'password-checked') {
3099						var pwEl = joinModal.find('#input-password'),
3100							pw2El = joinModal.find('#input-password-checked'),
3101							error_str = $.lang[LANG]['siteum.regexp.pw.invalid'];
3102
3103						if(pwEl.val() == pw2El.val()) { 
3104							pw2El.next().next('.error').remove();
3105						} else {
3106							if(pw2El.val().length > 0) {
3107								if(pw2El.next().next('.error').length > 0) pw2El.next().next('.error').removeClass('empty').text(error_str);
3108								else pw2El.closest('.form-group').append('<span class="error">'+ error_str + '</span>');
3109							}
3110						}	
3111					}
3112
3113					if(reg_has && errorEL.length > 0) { 
3114
3115						var reg = new RegExp(reg_pattern);
3116						if(reg.test($(this).val())) errorEL.remove();
3117						else {
3118							if(errorEL.hasClass('empty')) errorEL.removeClass('empty').text(reg_ex);
3119						}
3120
3121					}
3122
3123				}
3124			});
3125		},
3126		showLoginModal: function(sid) {
3127			// console.log('umember showLoginModal');
3128			if($('#join-modal').length > 0 ) $('#join-modal').delay(3000).modal('hide');
3129			if($('#forgotpw-modal').length > 0 ) $('#forgotpw-modal').delay(3000).modal('hide');
3130
3131			var content = $.umember.makeLoginModalContent();
3132			$.umember.showMngModal(sid, content, 'login-modal', false,
3133									function() { $.umember.LoginModalInit(); }, 
3134									function() { $.umember.loginModalKeyFunc(); }, '', '', '');
3135		},
3136		makeLoginModalContent: function() {
3137			// console.log('umember makeLoginModalContent');
3138			var s_um = (PAGE_MODE == 'c') ? SITEUM : property.SITEUM,
3139				join_btn = (s_um == 1) ? '' : '<div class="btn-join siteUM"><span class="join hand">' + $.lang[LANG]['manager.site-um.join.3'] + '</span></div>',
3140				privacy_type = (LANG == 'ko') ? 'privacy-join' : 'privacy';
3141	
3142			var loginModal_html = '\
3143				<div class="flat-modal mng-login-modal mng-siteUM-modal">\
3144					<div class="modal modal-default fade" id="login-modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">\
3145						<div class="modal-dialog" role="document">\
3146							<div class="modal-content">\
3147								<div class="modal-header">\
3148									<button type="button" class="close" data-dismiss="modal" aria-label="Close">\
3149										<span aria-hidden="true"><img src="https://storage.googleapis.com/i.addblock.net/fa-close-siteUM-modal.png" alt="close"></span>\
3150									</button>\
3151									<h5 class="modal-title" id="exampleModalLabel">' + $.lang[LANG]['header.login'] + '</h5>\
3152								</div>\
3153								<div class="modal-body">\
3154									<span class="form-group optional initial">\
3155										<input class="form-control" type="text" id="input-id" placeholder="' + $.lang[LANG]['siteum.login.id'] + '"/>\
3156										<label for="input-id">\
3157											<i class="fa fa-asterisk"></i>\
3158											<span>id</span>\
3159										</label>\
3160									</span>\
3161									<span class="form-group optional initial">\
3162										<input class="form-control" type="password" id="input-password" placeholder="' + $.lang[LANG]['siteum.login.password'] + '"/>\
3163										<label for="input-password">\
3164											<i class="fa fa-asterisk"></i>\
3165											<span>password</span>\
3166										</label>\
3167									</span>\
3168								</div>\
3169								<div class="modal-footer">\
3170									<button type="button" class="btn btn-primary" id="uLogin">' + $.lang[LANG]['manager.site-um.login'] + '</button>\
3171									' + join_btn + '\
3172									<p class="modal-change-wrap siteUM"><span class="forgot-pw hand">' + $.lang[LANG]['siteum.forgot.id-pw'] + '</span></p>\
3173								</div>\
3174							</div>\
3175						</div>\
3176					</div>\
3177				</div>\
3178				';
3179
3180
3181			return loginModal_html;
3182		},
3183		loginModalInit: function(mode) {
3184			mode = (mode) ? '-' + mode : '';
3185			var loginModal = $('#login-modal'+mode);
3186
3187			loginModal.find('.form-group').each(function() {
3188				$(this).removeClass('focus');
3189				$(this).find('.error').remove();
3190				$(this).find('input.form-control').val('');
3191			});
3192		},
3193		loginModalKeyFunc: function(mode) {
3194			mode = (mode) ? '-' + mode : '';
3195			var loginModal = $('#login-modal'+mode);
3196
3197			loginModal.find('input.form-control').live({
3198				focus:   function(e) { $(this).closest('.form-group').addClass('focus').siblings().removeClass('focus'); }, 
3199				blur: 	 function(e) { $(this).closest('.form-group').removeClass('focus'); },
3200				keydown: function(e) { 
3201					if($('.dsgn-body').hasClass('mobile-nav-active')) $('.el-menu header.n
3201avbar-fheader .navbar-toggle').click();
3202					if(e.keyCode == 13) $('#uLogin').click(); 
3203				},
3204				keyup: function(e) {
3205					var groupEl = $(this).closest('.form-group'),
3206						errorEL = $(this).next().next('.error');
3207					if($(this).val().length > 0) errorEL.remove();
3208				}
3209			});
3210		},
3211		showForgotIDModal: function(sid) {
3212			if($('#forgotpw-modal').length > 0 ) $('#forgotpw-modal').delay(3000).modal('hide');
3213
3214			var content = $.umember.makeForgotIDModalContent();
3215			$.umember.showMngModal(sid, content, 'forgotid-modal', false, function() {
3216					$('#forgotid-modal').find('.error').remove();
3217					$('#forgotid-modal').find('input.form-control').val('');
3218					$('#forgotid-modal .modal-body').children().removeAttr('style');
3219					$('#forgotid-modal .modal-footer').children('button').removeAttr('style');
3220					$('#forgotid-modal').find('.forgot-id-result').text('');
3221				}, function() {
3222					$('#forgotid-modal').find('input.form-control').live({
3223						keydown: function(key) { if(key.keyCode == 13) $('#uForgotID').click(); },
3224						keyup: function() {
3225							$('#forgotid-modal .modal-body').children().removeAttr('style');
3226							$('#forgotid-modal .modal-footer').children('button').removeAttr('style');
3227							$('#forgotid-modal').find('.forgot-id-result').text('');
3228							var regexp = /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
3229								errorEL = $(this).closest('.form-group').find('.error');
3230
3231							if(!regexp.test($(this).val())) errorEL.text($.lang[LANG]['siteum.regexp.check.email']);
3232							else errorEL.remove();
3233						}
3234					});
3235				}, '', '', '');
3236		},
3237		makeForgotIDModalContent: function() {
3238			var forgotIDModal_html = '\
3239				<div class="flat-modal mng-forgotid-modal mng-siteUM-modal">\
3240					<div class="modal modal-default fade" id="forgotid-modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">\
3241						<div class="modal-dialog" role="document">\
3242							<div class="modal-content">\
3243								<div class="modal-header">\
3244									<button type="button" class="close" data-dismiss="modal" aria-label="Close">\
3245										<span aria-hidden="true"><img src="https://storage.googleapis.com/i.addblock.net/fa-close-siteUM-modal.png" alt="close"></span>\
3246									</button>\
3247									<h5 class="modal-title" id="exampleModalLabel">' + $.lang[LANG]['siteum.forgot.id.link'] + '</h5>\
3248								</div>\
3249								<div class="modal-body">\
3250									<div>' + $.lang[LANG]['siteum.forgot.id.description'] + '</div>\
3251									<span class="form-group">\
3252										<input class="form-control" type="text" id="input-email" placeholder="' + $.lang[LANG]['siteum.forgot.pw.input-email'] + '"/>\
3253									</span>\
3254									<div class="forgot-id-result"></div>\
3255								</div>\
3256								<div class="modal-footer">\
3257									<button type="button" class="btn btn-primary" id="uForgotID">' + $.lang[LANG]['siteum.forgot.id.btn'] + '</button>\
3258									<p class="modal-change-wrap siteUM"> <span class="forgot-pw hand">' + $.lang[LANG]['siteum.forgot.pw.link'] + '</span></p>\
3259									<p class="modal-change-wrap siteUM"> <span class="login hand">' + $.lang[LANG]['manager.site-um.login'] + '</span></p>\
3260								</div>\
3261							</div>\
3262						</div>\
3263					</div>\
3264				</div>\
3265			';
3266
3267			return forgotIDModal_html;
3268		},
3269		showForgotPWModal: function(sid) {
3270			if($('#login-modal').length > 0 ) $('#login-modal').delay(3000).modal('hide');
3271			if($('#forgotid-modal').length > 0 ) $('#forgotid-modal').delay(3000).modal('hide');
3272
3273			var content = $.umember.makeForgotPWModalContent();
3274			$.umember.showMngModal(sid, content, 'forgotpw-modal', false, function() {
3275					$('#forgotpw-modal').find('.focus').removeClass('focus');
3276					$('#forgotpw-modal').find('.error').remove();
3277					$('#forgotpw-modal').find('input.form-control').val('');
3278				}, function() {
3279					$('#forgotpw-modal').find('input.form-control').live({
3280						foucs: function() { $(this).closest('.form-group').addClass('focus').siblings().removeClass('focus'); },
3281						blur: function() { $(this).closest('.form-group').removeClass('focus'); },
3282						keydown: function(key) { if(key.keyCode == 13) $('#uForgotPW').click(); },
3283						keyup: function() { 
3284							var regexp = /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
3285								field = $(this).attr('id').trim().replace(/input-/,''),
3286								errorEL = $(this).closest('.form-group').find('.error');
3287
3288							if(field == 'email' && !regexp.test($(this).val())) errorEL.text($.lang[LANG]['siteum.regexp.check.email']);
3289							else errorEL.remove();
3290						}
3291					});
3292				}, '', '', '');
3293		},
3294		makeForgotPWModalContent: function() {
3295			var forgotPWModal_html = '\
3296				<div class="flat-modal mng-forgotpw-modal mng-siteUM-modal">\
3297					<div class="modal modal-default fade" id="forgotpw-modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">\
3298						<div class="modal-dialog" role="document">\
3299							<div class="modal-content">\
3300								<div class="modal-header">\
3301									<button type="button" class="close" data-dismiss="modal" aria-label="Close">\
3302										<span aria-hidden="true"><img src="https://storage.googleapis.com/i.addblock.net/fa-close-siteUM-modal.png" alt="close"></span>\
3303									</button>\
3304									<h5 class="modal-title" id="exampleModalLabel">' + $.lang[LANG]['siteum.forgot.pw.title'] + '</h5>\
3305								</div>\
3306								<div class="modal-body">\
3307									<div>' + $.lang[LANG]['siteum.forgot.pw.description'] + '</div>\
3308									<span class="form-group">\
3309										<input class="form-control" type="text" id="input-id" placeholder="' + $.lang[LANG]['manager.list.info.id'] + '"/>\
3310									</span>\
3311									<span class="form-group">\
3312										<input class="form-control" type="text" id="input-email" placeholder="' + $.lang[LANG]['siteum.forgot.pw.input-email'] + '"/>\
3313									</span>\
3314								</div>\
3315								<div class="modal-footer">\
3316									<button type="button" class="btn btn-primary" id="uForgotPW">' + $.lang[LANG]['siteum.forgot.pw.btn'] + '</button>\
3317									<p class="modal-change-wrap siteUM"> <span class="forgot-id hand">' + $.lang[LANG]['siteum.forgot.id.link'] + '</span></p>\
3318									<p class="modal-change-wrap siteUM"> <span class="login hand">' + $.lang[LANG]['manager.site-um.login'] + '</span></p>\
3319								</div>\
3320							</div>\
3321						</div>\
3322					</div>\
3323				</div>\
3324			';
3325
3326			return forgotPWModal_html;
3327		},
3328		showMypageModal: function(sid) {
3329			if($('.mng-siteUM-modal').length > 0 ) $('.mng-siteUM-modal').children().first().modal('hide');
3330
3331			$.getJSON('/umember/get/type/mypage', function(data) {
3332				if(typeof data.error != 'undefined' && data.error) {
3333					alert(data.error);
3334					return false;
3335				}
3336				// COLLECTION_REGEX = $.parseJSON(data['regExp']);
3337				COLLECTION_REGEX = data['regExp'];
3338
3339				var content = $.umember.makeMypageContent(sid,data,'');
3340				$('body').find('.dsgn-body').append('<link rel="stylesheet" href="/css/manager.css" type="text/css" class="manager_css">');
3341				$.umember.showMngModal(sid, content, 'mypage-modal', false,
3342										function() { }, 
3343										function() { }, 
3344										function() { $('body .dsgn-body').find('link.manager_css').remove(); }, '', '');
3345			});
3346		},
3347		
3348		makeMypageConditionsStr: function(sid,data,mode,cert) {
3349			if(typeof cert === 'undefined' || !cert) cert = 'N';
3350
3351			var collections = '',
3352				make_pass = ['sid', 'no', 'id', 'image', 'regExp', 'cert', 'cert_date', 'cert_adult', 'cert_adult_date','sm_addr'];
3353				
3354			$.each(data, function(field,o) {
3355				if (field != 'um_sns_key') {
3356					if($.inArray(field,make_pass) == -1) {
3357						var name = (o['name']) ? o['name'] : $.lang[LANG]['manager.list.info.'+field],
3358							optional = (o['optional']) ? o['optional'] : false,
3359							optional_class = (optional) ? 'optional' : '',
3360							prev_val = (field == 'email' || field == 'nick') ? 'data-prev="' + o['value'] + '"' : '',
3361							etc_val_type = ['memo','radio','check','select','fupload'],
3362							cl_val_str = '',
3363							add_input = '',
3364							jcollection_val_str = '';
3365							 // 간결하게 삼항 연산자로 리팩토링
3366							 
3367							 var filecount_data = o['type'] === 'fupload' && o['value'] ? 'isdata' : o['type'] === 'fupload' ? 'nodata' : '';
3368
3369						var star = (optional) ? '<span class="input-star">*</span>' : '';
3370						if(field.indexOf('etc')>-1 && etc_val_type.includes(o['type'])) {
3371							var o_val = o['value'],
3372								o_val_arr = ((o['jcol_val'].indexOf('`') > -1) && (o['type']=='radio' || o['type']=='check' || o['type']=='select')) ? o['jcol_val'].split('`') : [o_val],
3373								description_class = (o['description_used']=='true' && (o['type']=='memo')) ? 'use_descr' : '';
3374
3375							add_input = '\
3376							<div class="cl-s-join-collections-etcwrap cl-s-form-wrap '+filecount_data+' '+ optional_class + '" data-jcoltype="'+o['type']+'">';
3377									
3378							var text_class = (o_val && (o['type']=='memo')) ? 'textarea-active' : '';
3379							add_input += '\
3380								<div class="cl-s-etc '+text_class+'">\
3381									<span class="cl-s-etc-name">'+ name + star +'</span>\
3382									';
3383							add_input += (o['description_used']=='true') ? '<span class="cl-s-etc-description">'+ o['description'] +'</span>' : '';
3384							add_input += '\
3385								</div>\
3386								';
3387
3388							add_input += '\
3389								<div class="cl-s-etc-val '+description_class+'">\
3390							';
3391
3392							if(o['type']=='select') {
3393								add_input += '\
3394								<div class="cl-s-form-group cl-s-form-group-select">\
3395									<select class="cl-s-form-control" name="'+field+'" id="input-' + field + '" required="required">\
3396										<option value="">'+$.lang[LANG]['manager.list.info.gender.select']+'</option>\
3397								';
3398							} 
3399							if(o_val_arr.length > 0) {
3400								$.each(o_val_arr, function(oval_i,oval_v){			
3401									jcollection_val_str += $.umember.makeJoinCollectionsTypeVal(oval_i,o['type'],oval_v,field,optional_class,'mypage',o_val);
3402								});
3403							} 
3404
3405							if(o['type']=='select') {
3406								jcollection_val_str += '\
3407									</select>\
3408									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
3409								</div>\
3410								';
3411							}
3412							jcollection_val_str += '</div></div>';
3413							
3414						} else {
3415							add_input += '\
3416							<div class="cl-s-form-wrap ' + optional_class + '">\
3417								<div class="cl-s-form-group">\
3418									<input type="text" class="cl-s-form-control" name="'+field+'" id="input-' + field + '" required="required" value="' + o['value'] + '" ' + prev_val + '>\
3419									<label for="input" class="cl-s-control-label">' + name + star + '</label>\
3420								</div>\
3421							</div>\
3422						';
3423						
3424						}
3425						if(field == 'birth') {
3426							var birth = (o['name']) ? o['name'] : $.lang[LANG]['manager.list.info.'+field];
3427
3428							add_input = '\
3429								<div class="cl-s-form-wrap ' + optional_class + '">\
3430									<div class="cl-s-form-group">\
3431										<input type="text" class="cl-s-form-control cl-s-form-birth" name="'+field+'" id="input-' + field + '" required="required" value="' + o['value'] + '" onkeyup="auto_date_format(event, this)" onkeypress="auto_date_format(event, this)">\
3432										<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.mypage.Birth'] + star + ' </label>\
3433									</div>\
3434								</div>\
3435							';
3436						} 
3437						else if (field == 'fupload'){
3438							console.log
3439						}
3440						else if(field == 'addr') {
3441							
3442							
3443							if(  mode && mode === 'business'){
3444								var o_postcode = (o['value'][0]) ? o['value'][0].trim() : '',
3445									o_addr1 = (o['value'][1]) ? o['value'][1].trim() : '',
3446									o_addr2 = (o['value'][2]) ? o['value'][2].trim() : '',
3447									addr_has_clas = (o_postcode || o_addr1) ? 'has-value' : '',
3448									addr_modal = (mode == 'shopping' || o['addrsearch']) ? 'readonly onfocus="addrSearchModal(\'input\')" ' : '';
3449
3450								add_input = '\
3451										<div class="cl-s-form-wrap ' + optional_class + '">\
3452											<div class="cl-s-form-group">\
3453												<input type="hidden" class="cl-s-form-control" name="postcode" id="input-postcode" value="' + o_postcode + '">\
3454												<input type="text" class="cl-s-form-control '+addr_has_clas+'" name="addr1" id="input-addr1" required="required" value="' + o_addr1 + '" ' + addr_modal + '>\
3455												<label for="input" class="cl-s-control-label">' + name + star + '</label>\
3456											</div>\
3457										</div>\
3458										<div class="cl-s-form-wrap">\
3459											<div class="cl-s-form-group">\
3460												<input type="text" class="cl-s-form-control" name="addr2" id="input-addr2" required="required" value="' + o_addr2 + '">\
3461												<label for="input" class="cl-s-control-label">' + $.lang[LANG]['manager.list.info.addr2'] + '</label>\
3462											</div>\
3463										</div>\
3464								';								
3465							} else if(mode && mode === 'shopping') {
3466								var sm_name    = '', 
3467									sm_tel     = '', 
3468									sm_addr0   = '', 
3469									sm_addr0_empty ='',
3470									sm_addr1   = '', 
3471									sm_addr2   = '', 
3472									sm_isalias = '',
3473									sm_isalias_empty = '',
3474									aliasText = '',
3475									sm_nodata  = '';
3476									btn_text =''
3477									  
3478								if (data['sm_addr'] && data['sm_addr']['is_default'] === 0) {
3479									sm_nodata = 'emptyFlag';
3480									btn_text = '추가하기';
3481								} else{
3482									const sm = data?.sm_addr || {};
3483
3484									sm_name    = sm.name?.trim?.() || '';
3485									sm_tel     = sm.tel?.trim?.() || '';
3486									
3487									addrText   = sm.value?.[0]?.trim?.() || '';
3488									sm_addr0   = addrText ? '[' + addrText + ']' : '';
3489									sm_addr0_empty = sm_addr0 ? '' : 'hide';
3490
3491									sm_addr1   = sm.value?.[1]?.trim?.() || '';
3492									sm_addr2   = sm.value?.[2]?.trim?.() || '';
3493									aliasText = sm.alias?.trim?.() || '';  // 먼저 alias 문자열 뽑기
3494									sm_isalias = aliasText ? '(' + aliasText + ')' : '';  // 괄호 처리
3495									sm_isalias_empty = aliasText ? '' : 'hide';  // 클래스 처리
3496
3497
3498									btn_text = '변경하기';
3499  
3500								}		
3501					 
3502								var valueCheckEl = "";
3503								console.log(sm_nodata);
3504								(valueCheckEl = sm_nodata ? '<input type="text" class="cl-s-form-control hide" required="required" value="">' : '' );
3505								add_input = '\
3506								<div class="cl-s-form-wrap sm-parent '+sm_nodata+'">\
3507									<div class="cl-s-form-wrap '+(sm_nodata ? optional_class : "") +'">\
3508										<div class="cl-s-form-group">\
3509											<div class="cl-s-form-control flexbox">\
3510											'+valueCheckEl+'\
3511												<label for="input" class="cl-s-control-label">배송지 정보<span class="input-star '+ (optional_class ? '' : 'hide') +'">*</span></label>\
3512												<div class="cl-s-form-wrap btn-load-addresses mypage" data-action="getList">\
3513													<div class="cl-s-form-group EditBtn">\
3514													<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="m15.29 7-1.31 1.31c.16-3-1.96-5.71-5-6.22-1.91-.32-3.86.3-5.23 1.67l.71.71a5.003 5.003 0 0 1 7.07 0 4.989 4.989 0 0 1 1.45 3.81L11.7 7l-.71.71 2.5 2.5 2.5-2.5-.71-.71ZM4.46 11.53a4.989 4.989 0 0 1-1.45-3.81L4.29 9 5 8.29l-2.5-2.5L0 8.29.71 9l1.31-1.31c-.16 3 1.96 5.71 5 6.22 1.91.32 3.86-.3 5.23-1.67l-.71-.71a5.003 5.003 0 0 1-7.07 0Z"/></svg><span>'+btn_text+'</span>\
3515													</div>\
3516													<div class="cl-s-form-group ">\
3517													<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" width="12" height="12"><path d="M6.5 12h-1V6.5H0v-1h5.5V0h1v5.5H12v1H6.5V12Z"/></svg><span>'+btn_text+'</span>\
3518													</div>\
3519												</div>\
3520											</div>\
3521											<div class="cl-s-form-control"><div class="sm-name">'+sm_name+'</div><div class="sm-alias '+sm_isalias_empty+'">'+sm_isalias+'</div><div class="sm-default-addr"><span>기본배송지</span></div></div>\
3522											\
3523											<div class="cl-s-form-control"><div class="sm-addr1"><span class ="'+sm_addr0_empty+'">'+sm_addr0+'</span><span>'+sm_addr1+' '+sm_addr2+'</span></div></div>\
3524											<div class="cl-s-form-control"><div class="sm-tel">'+sm_tel+'</div></div>\
3525											<div class="cl-s-form-control noaddress" style="text-align:center; padding:20px; color:#999;">등록된 배송지가 없습니다.</div>\
3526										</div>\
3527									</div>\
3528								</div>\
3529								';		
3530							}
3531
3532						} else if(field == 'gender') {
3533							add_input = '\
3534									<div class="cl-s-form-wrap ' + optional_class + '">\
3535										<div class="cl-s-form-group">\
3536											<select class="cl-s-form-control" name="gender" id="input-gender" required="required">\
3537												<option value="">선택</option>';
3538							if(o['value'] == '01') {
3539								add_input += '\
3540												<option value="01" selected>남</option>\
3541												<option value="02">여</option>';
3542							} else if(o['value'] == '02') {
3543								add_input += '\
3544												<option value="01">남</option>\
3545												<option value="02" selected>여</option>';
3546							} else {
3547								add_input += '\
3548												<option value="01">남</option>\
3549												<option value="02">여</option>';
3550							}
3551							add_input += '\
3552											</select>\
3553											<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
3554											<label for="input" class="cl-s-control-label">' + name + star +'</label>\
3555										</div>\
3556									</div>\
3557							';
3558						}
3559
3560						if(cert == 'Y') {
3561							switch (field) {
3562								case 'name':
3563								case 'gender':
3564								case 'birth':
3565								case 'tel':
3566									var value = (o['value'])? o['value']:'';
3567									add_input = '<input id="input-' + field + '" type="hidden" name="' + field + '" value="' + value + '">';
3568									break;
3569							}
3570						}
3571						
3572						collections += add_input + jcollection_val_str;
3573
3574					}
3575				}
3576			});
3577			return collections;
3578		},
3579		makeMypageContent: function(sid,data,mode,cert) {
3580			if(typeof cert === 'undefined' || !cert) cert = 'N';
3581			
3582			var collections = $.umember.makeMypageConditionsStr(sid,data,mode,cert),
3583				s_validtype = (typeof VALIDTYPE != 'undefined') ? VALIDTYPE : property.VALIDTYPE;
3584
3585			var default_info = '\
3586				<div class="profile-wrap cl-s-profile-box col-xs-12 col-sm-12 col-md-12 no-padding">\
3587					<div class="profile-image-wrap profile-image-box">\
3588						<svg viewBox="0 0 110 110">\
3589							<pattern id="profileMyImg" patternUnits="userSpaceOnUse" width="110" height="110">\
3590								<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="' + data['image'] + '" x="0" width="110" height="110"></image>\
3591							</pattern>\
3592							<circle cx="55" cy="56" r="54" fill="url(#profileMyImg)" stroke="#ededed"></circle>\
3593						</svg>\
3594					</div>\
3595					<div class="profile-text-wrap">\
3596						<div class="cl-s-form-wrap cl-s-info-id" disabled>\
3597							<input type="hidden" class="cl-s-form-control" name="id" id="input-id" required="required" value="' + data['id']['value'] + '">\
3598							<span class="id-text">' + data['id']['value'] + '</span>\
3599						</div>\
3600						<label for="profileMyImgFileupload">' + $.lang[LANG]['siteum.mypage.change.image'] + '</label>\
3601						<input id="profileMyImgFileupload" class="modal-upload-button um-image-upload" type="file" name="files[]" data-sid="' + sid + '" data-uid="' + data['id']['value'] + '" />\
3602						<p class="cl-s-image-size">' + $.lang[LANG]['manager.mypage.profile.image.note'] + ' ' + $.lang[LANG]['manager.mypage.profile.image.size'] + '</p>\
3603					</div>\
3604				</div>\
3605				<div class="clearfix"></div>\
3606				';
3607
3608			var content = '\
3609				<div class="cl-s-form-wrap">\
3610					<div class="cl-s-form-group">\
3611						<input type="password" class="cl-s-form-control" name="password" id="input-password" required="required" value="">\
3612						<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.login.password.myinfo'] + '</label>\
3613					</div>\
3614				</div>\
3615				<div class="cl-s-form-wrap">\
3616					<div class="cl-s-form-group">\
3617						<input type="password" class="cl-s-form-control" name="password_checked" id="input-password-checked" required="required" value="">\
3618						<label for="input" class="cl-s-control-label">' + $.lang[LANG]['siteum.login.password-check'] + '</label>\
3619					</div>\
3620				</div>\
3621				<div class="cl-s-form-description">' + $.lang[LANG]['siteum.login.password.description'] + '</div>\
3622			';
3623
3624			return { content: content, collections: collections, default_info: default_info };
3625		},
3626		showMyImageUploadModal: function(sid,uid,src) {
3627			var content = '\
3628				<div class="flat-modal mng-mypage-modal">\
3629					<div class="modal modal-default fade" id="my-image-modal" tabindex="-1" role="dialog" aria-labelledby="mySmallMod
3629alLabel" aria-hidden="true" data-sid="' + sid + '" data-uid="' + uid + '">\
3630						<div class="modal-dialog w385">\
3631							<div class="modal-content">\
3632								<button type="" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true"><img src="https://storage.googleapis.com/i.addblock.net/fa-close-modal.png" alt="close"></span></button>\
3633								<div class="modal-body">\
3634									<div class="profile-image-wrap no-opacity">\
3635										<div>\
3636											<span class="top"></span>\
3637											<span class="bottom"></span>\
3638										</div>\
3639										<img class="my-image img-responsive" src="' + src + '" alt="profile image" />\
3640									</div>\
3641									<p>' + $.lang[LANG]['manager.mypage.profile.image.note'] + ' <strong>' + $.lang[LANG]['manager.mypage.profile.image.size'] + '</strong></p>\
3642								</div>\
3643								<div id="progress" class="progress">\
3644									<div class="progress-bar progress-bar-success"></div>\
3645								</div>\
3646								<div class="modal-footer">\
3647									<button type="button" class="btn btn-default" data-dismiss="modal">' + $.lang[LANG]['config.close'] + '</button>\
3648									<span class="btn btn-primary fileinput-button">\
3649										<span>' + $.lang[LANG]['manager.mypage.profile.image.apply'] + '</span>\
3650										<input id="profileUMFileupload" class="modal-upload-button um-image-upload" type="file" name="files[]" data-sid="' + sid + '" data-uid="' + uid + '" >\
3651									</span>\
3652								</div>\
3653							</div>\
3654						</div>\
3655					</div>\
3656				</div>\
3657			';
3658
3659			$.umember.showMngModal(sid, content, 'my-image-modal', false, '', '', '', '', '');				
3660		},
3661		fileurlcreate : function(cl_val) {
3662			// 단일 파일 URL 생성 함수
3663			// cl_val을 받아서 다운로드 링크와 파일 정보를 반환
3664			var result = {
3665				download_link: '',
3666				file_links: '',
3667				file_data: '',
3668				file_info: {
3669					name: '',
3670					size: '',
3671					url: '',
3672					size_display: ''
3673				}
3674			};
3675			
3676			if(cl_val && cl_val.trim() !== '') {
3677				// 단일 파일 처리 - 첫 번째 파일만 사용
3678				var file_data = cl_val.split(',')[0];
3679				result.file_data = file_data;
3680				
3681				if(file_data && file_data.trim() !== '') {
3682					var explode_v = file_data.split('||');
3683					// console.log('fileurlcreate explode_v:', explode_v); // 디버깅용
3684					
3685					// 현재 데이터 구조에 맞게 수정
3686					// explode_v[0]: 파일명, explode_v[1]: 파일 크기, explode_v[2]: URL
3687					var link_url = explode_v[2] || '';
3688					var link_url_arr = link_url.split('/');
3689					var true_file_name = link_url_arr[link_url_arr.length - 1];
3690					
3691					if(explode_v[0]) {
3692						// 파일 크기 계산 (explode_v[1]에서 크기 추출)
3693						var flink_s = (explode_v[1]) ? parseFloat(explode_v[1].replace(/[^0-9\.]/g, '')) : 0;
3694						var flink_unit = (explode_v[1] && explode_v[1].indexOf('MB') > -1) ? 'MB' : 'KB';
3695						var flink_size = (flink_unit === 'MB') ? flink_s : flink_s;
3696						// view.html의 round($flink_size,2)와 동일하게 소수점 2자리까지 표시
3697						var flink_str = (explode_v[1]) ? parseFloat(flink_size.toFixed(2)) + flink_unit : '';
3698						
3699						var current_sid = (typeof property !== 'undefined' && property.SID) ? property.SID : (typeof SID !== 'undefined' ? SID : '');
3700						var download_link = '<a href="/down/flink/1/sid/' + current_sid + '/name/' + encodeURIComponent(explode_v[0]) + '/s/' + true_file_name + '" class="file-download-btn" target="_blank">';
3701						
3702						result.download_link = download_link;
3703						result.file_links = download_link;
3704						result.file_info = {
3705							name: explode_v[0],
3706							size: explode_v[1] || '',
3707							url: link_url,
3708							size_display: flink_str
3709						};
3710					}
3711				}
3712			}
3713			
3714			return result;
3715		},
3716		fileHtmlRender : function(orgfield,option){// 그리기 담당 메서드
3717 			// 온 값에따라 그리는거 달라지기 
3718			option = $.extend({
3719				val : "",
3720				type : "",
3721				type2_downlink : ""	
3722
3723				
3724			},  option);
3725			
3726			// option.val에서 파일 정보 파싱 (파일명||파일크기||파일경로 형태)
3727			var fileName = '';
3728			var fileSize = '';
3729			var filePath = '';
3730			var fileSizeDisplay = '';
3731			var fileSizeUnit = 'KB';
3732			var hasValidFile = false;
3733			// option.val이 있고 파일 정보 형식이 맞는지 확인
3734			if (option.val && option.val.indexOf('||') > -1) {
3735				var fileData = option.val.split('||');
3736				if (fileData.length >= 3) {
3737					fileName = fileData[0];
3738					fileSize = fileData[1];
3739					filePath = fileData[2];
3740					filePaths = (filePath && filePath.indexOf('/') > -1 ? [filePath.split('/').pop()] : []);
3741					// 파일명과 경로가 모두 있는 경우에만 유효한 파일로 판단
3742					if (fileName && filePath) {
3743						hasValidFile = true;
3744						
3745						// 파일 크기 단위 처리
3746						if (fileSize.indexOf('KB') > -1) {
3747							fileSize = parseFloat(fileSize.replace('KB', ''));
3748							fileSizeUnit = 'KB';
3749						} else if (fileSize.indexOf('MB') > -1) {
3750							fileSize = parseFloat(fileSize.replace('MB', ''));
3751							fileSizeUnit = 'MB';
3752						} else {
3753							fileSize = parseFloat(fileSize);
3754							fileSizeUnit = 'KB';
3755						}
3756						
3757						// 파일 크기 표시 형식 조정
3758						if (fileSizeUnit === 'KB' && fileSize > 1024) {
3759							fileSizeDisplay = (fileSize / 1024).toFixed(2) + 'MB';
3760						} else {
3761							fileSizeDisplay = fileSize.toFixed(2) + fileSizeUnit;
3762						}
3763					}
3764				}
3765			}
3766			
3767			var temphtml = '';
3768
3769			if(option.type == 'type1') {
3770				if (hasValidFile) {
3771					// 파일이 있는 경우
3772					temphtml +=	'\
3773					<div class="cl-s-form-group">\
3774						<input type="text" class="cl-s-form-control valueCheck"  value="' + option.val + '" required="required" name="'+orgfield+'" id="input-' + orgfield + '">\
3775						<div class="cl-s-form-control-register">\
3776							<p class="file-title text hide">첨부된 파일이 없습니다.</p>\
3777							<label r-fupload-type="file.upload" r-fupload-require="" class="hide"><input type="file" class="hide" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M1 15v-3.5h1V14h12v-2.5h1V15H1Zm6.5-2.79v-9.3L4.35 6.06l-.71-.71L8 1l4.35 4.35-.71.71-3.15-3.15v9.29h-1Z"/></svg>' + $.lang[LANG]['register.fileUpload.btn.text'] + '</label>\
3778							<div class="file-row display-flex align-items-center">\
3779								<div class="r-flex-left">\
3780									<div class="file-thumb"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M4 16c-1.66 0-3-1.34-3-3V6l6-6h5c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H4Zm-2-3c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2H8v4c0 1.1-.9 2-2 2H2v6Zm.41-7H6c.55 0 1-.45 1-1V1.41L2.41 6ZM4 13v-1h8v1H4Zm0-3V9h8v1H4Z"/></svg></div>\
3781									<div>\
3782										<p class="file-name">'+fileName+'</p>\
3783									</div>\
3784								</div>\
3785								<div class="r-flex-right">\
3786									<p class="file-size">'+fileSizeDisplay+'</p>\
3787									<span class="form-file-delete" data-src="'+filePaths+'">\
3788									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" width="15" height="15"><g>
3788<path d="M2.35 12.65c-.2-.2-.2-.51 0-.71l9.6-9.6c.2-.2.51-.2.71 0 .2.2.2.51 0 .71l-9.6 9.6c-.2.2-.52.2-.71 0z"/><path d="M12.3 2.2a.47.47 0 0 0-.35.15l-9.6 9.6c-.2.2-.2.51 0 .71.1.1.23.15.35.15.13 0 .26-.05.35-.15l9.6-9.6c.2-.2.2-.51 0-.71-.1-.1-.22-.15-.35-.15z"/><path d="M12.65 12.65c-.2.2-.51.2-.71 0l-9.6-9.6c-.2-.2-.2-.51 0-.71.2-.2.51-.2.71 0l9.6 9.6c.2.2.2.52 0 .71z"/><path d="M2.7 2.2a.47.47 0 0 0-.35.15c-.2.2-.2.51 0 .71l9.6 9.6c.1.1.23.15.35.15.13 0 .26-.05.35-.15.2-.2.2-.51 0-.71l-9.6-9.6a.47.47 0 0 0-.35-.15z"/></g></svg>\
3789									</span>\
3790								</div>\
3791							</div>\
3792						</div>\
3793					</div>\
3794					';
3795				} else {
3796					// 파일이 없는 경우
3797					temphtml +=	'\
3798					<div class="cl-s-form-group">\
3799						<input type="text" class="cl-s-form-control valueCheck"  value=""  required="required" name="'+orgfield+'" id="input-' + orgfield + '">\
3800						<div class="cl-s-form-control-register"  >\
3801							<p class="file-title hide text">첨부된 파일이 없습니다.</p><label r-fupload-type="file.upload" r-fupload-require="" class=""><input type="file" class="hide" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M1 15v-3.5h1V14h12v-2.5h1V15H1Zm6.5-2.79v-9.3L4.35 6.06l-.71-.71L8 1l4.35 4.35-.71.71-3.15-3.15v9.29h-1Z"/></svg>' + $.lang[LANG]['register.fileUpload.btn.text'] + '</label></div>\
3802						</div>\
3803					</div>\
3804					';
3805				}
3806			} else if(option.type == 'type2') {
3807				if(!option.val){
3808					temphtml += '\
3809					<div class="type2 cl-common-form-wrap nonplace-holder  '+ (option.val ? 'isdata' : 'nodata') +'" data-jcoltype="fupload" id="member-'+ orgfield + '">\
3810						<div class="cl-common-form-group">\
3811									<div class="cl-s-form-group">\
3812										<input type="text" class="member-info-input form-control cl-s-form-control valueCheck"  value=""  required="required" name="member-'+orgfield+'" id="member-' + orgfield + '">\
3813										<div class="cl-s-form-control-register"  >\
3814										<label r-fupload-type="file.upload" r-fupload-require="" class=""><input type="file" class="hide" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M1 15v-3.5h1V14h12v-2.5h1V15H1Zm6.5-2.79v-9.3L4.35 6.06l-.71-.71L8 1l4.35 4.35-.71.71-3.15-3.15v9.29h-1Z"/></svg>' + $.lang[LANG]['register.fileUpload.btn.text'] + '</label></div>\
3815										</div>\
3816									</div>\
3817					</div>';					
3818				} else {
3819					temphtml += '\
3820					<div class="type2 cl-common-form-wrap nonplace-holder  '+ (option.val ? 'isdata' : 'nodata') +'" data-jcoltype="fupload" id="member-'+ orgfield + '">\
3821						<div class="cl-common-form-group">\
3822									<div class="cl-s-form-group">\
3823										<input type="text" class="member-info-input form-control cl-s-form-control valueCheck"  value="'+option.val+'"  required="required" name="member-'+orgfield+'" id="member-' + orgfield + '">\
3824										<div class="cl-s-form-control-register"  >\
3825																<div class="file-row file-info-layout">\
3826																	<div class="file-left-area">\
3827																		<p class="file-name">'+fileName+'</p>\
3828																	</div>\
3829																	<div class="file-right-area">\
3830																		<span class="file-size">'+fileSizeDisplay+'</span>\
3831																		'+$.umember.fileurlcreate(option.val).download_link+'\
3832																			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">\
3833																				<path d="M5 19v-3.5h1V18h12v-2.5h1V19H5Zm2.65-7.15.71-.71 3.15 3.15V5h1v9.29l3.15-3.15.71.71-4.35 4.35-4.35-4.35Z"/>\
3834																			</svg>\
3835																		</a>\
3836																		<span class="form-file-delete" data-src="'+filePaths+'">\
3837																			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">\
3838																				<path d="M19 8h-3V6H8.02v2H5v1h1v9c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9h1V8ZM9.02 7H15v1H9.02V7ZM17 18c0 .55-.45 1-1 1H8c-.55 0-1-.45-1-1V9h10v9Zm-7-7h1v6h-1v-6Zm3 0h1v6h-1v-6Z"/>\
3839																			</svg>\
3840																		</span>\
3841																	</div>\
3842																</div>\
3843										<label r-fupload-type="file.upload" r-fupload-require="" class=""><input type="file" class="hide" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M1 15v-3.5h1V14h12v-2.5h1V15H1Zm6.5-2.79v-9.3L4.35 6.06l-.71-.71L8 1l4.35 4.35-.71.71-3.15-3.15v9.29h-1Z"/></svg>
3843' + $.lang[LANG]['register.fileUpload.btn.text'] + '</label></div>\
3844										</div>\
3845									</div>\
3846					</div>';						
3847				}
3848			}
3849
3850			return temphtml;
3851		}
3852		
3853	} /*umember end*/
3854
3855
3856
3857	$(document).on("click", "label[r-fupload-type='file.upload']", function () {
3858		var currentPage = ""
3859		if($(this).closest('.info-modal').length > 0) currentPage = "info";
3860		else if ($(this).closest(".register_form-wrap").length > 0) currentPage = "register";
3861		else if ($(this).closest(".account-info").length > 0) currentPage = "mypage";
3862
3863
3864		var REGISTER_MAX_FILE_NUMBER = 1;
3865
3866    $(" div[data-jcoltype='fupload'] input[type='file']").fileupload({        
3867        url: '/template/register_fupload/upload-file',
3868        dataType: 'json',
3869        async: true,
3870        pasteZone: null,
3871        formData: function() {
3872            // sid 값을 가져오기 위한 로직
3873            var current_sid = (typeof property !== 'undefined' && property.SID) ? property.SID : (typeof SID !== 'undefined' ? SID : '');
3874            return [
3875                {name: 'sid', value: current_sid}
3876            ];
3877        },			
3878        change : function (e, data) { // 파일 선택 후 확인 버튼 클릭할때 change 조건들 통과해야 함
3879            if(data.files.length > REGISTER_MAX_FILE_NUMBER || $(this).closest(".cl-s-form-control-register ").find('.file-row').length + data.files.length > REGISTER_MAX_FILE_NUMBER){
3880				//		    $(this).showModalFlat($.lang[LANG]['manager.list.member.block.title'], modal_content, true, true, function() {
3881
3882                var modal = $(this).showModalFlat('',$.lang[LANG]['register.file.upload.limit'], modal_content, true, true, function() {
3883                    $(document).on('keydown', function(e) {
3884                        if(e.keyCode == 27) modal.modal('hide');
3885                    });
3886                }, 'cancel','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
3887                return false; 
3888            }
3889			// console.log("afaf");
3890			var maxsize = "";
3891			if(typeof property != 'undefined' && property) maxsize = (property.VALIDPLAN && $.inArray(property.VALIDTYPE,['BN','SM']) > -1) ? 104857600 : 10485760;
3892			else if(typeof VALIDTYPE != 'undefined' && VALIDTYPE) maxsize = ($.inArray(VALIDTYPE,["BUSNESS","SHOPPING"]) > -1) ? 104857600 : 10485760;
3893			// console.log(maxsize);
3894            var flag = true;
3895            $.each(data.files, function(idx, file) {
3896                var filesize = file.size;
3897                if(file.size > maxsize) {
3898                    filesize = (filesize/1024/1024).toFixed(1);
3899                    if(maxsize == 104857600) err = $.lang[LANG]['editor.upload.max.100'] + $.lang[LANG]['editor.upload.max.2'];
3900                    else err = $.lang[LANG]['editor.upload.max.1'] + $.lang[LANG]['editor.upload.max.2'];
3901				
3902					$('.flat-modal').addClass('hide');
3903					$('.modal-backdrop').addClass('hide');
3904					
3905					var modal = $(this).showModalFlat('', err,true,false,function(){
3906						
3907						$(document).on('keydown', function(e) {
3908                            if(e.keyCode == 27) modal.modal('hide');
3909                        });
3910						$('.flat-modal').removeClass('hide');
3911						$('.modal-backdrop').removeClass('hide');
3912
3913					},'ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-t80 cl-modal cl-none-title cl-close-btn',false,function(){
3914						$('.flat-modal').removeClass('hide');
3915						$('.modal-backdrop').removeClass('hide');
3916
3917					});
3918					
3919
3920                    flag = false;
3921                    return false;
3922                }
3923            });
3924
3925            if(!flag) return false;
3926        },
3927        add: function(e,data) { // 서버에 업로드 일단 함
3928            var r = $.upload_add(e,data,'register_flink');
3929			// r 객체에 submit이 false이고 err 메시지가 있는 경우 에러 팝업을 띄우는 처리 예시입니다.
3930			if (r && r.submit === false && r.err) {
3931				$('.flat-modal').addClass('hide');
3932				$('.modal-backdrop').addClass('hide');
3933			}
3934
3935            if(r.submit) {
3936                $('#loading').css('left','-100%');
3937                $.processON();
3938                data.submit();
3939				
3940                // var jqXHR = data.submit();
3941            } else {
3942				
3943				
3944
3945				var modal = $(this).showModalFlat('', r.err,true,false,function(){
3946					$(document).on('keydown', function(e) {
3947                        if(e.keyCode == 27) modal.modal('hide');
3948                    });
3949					$('.flat-modal').removeClass('hide');
3950					$('.modal-backdrop').removeClass('hide');
3951
3952				},'ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-t80 cl-modal cl-none-title cl-close-btn',false,function(){
3953					$('.flat-modal').removeClass('hide');
3954					$('.modal-backdrop').removeClass('hide');
3955
3956				});				
3957            }
3958        },
3959        done: function (e, data) {
3960            if(typeof data.result.error != 'undefined' && data.result.error) {
3961                // alert(data.result.error);
3962
3963				var modal = $(this).showModalFlat('', data.result.error,true,false,function(){
3964						
3965					$(document).on('keydown', function(e) {
3966                        if(e.keyCode == 27) modal.modal('hide');
3967                    });
3968					$('.flat-modal').removeClass('hide');
3969					$('.modal-backdrop').removeClass('hide');
3970
3971				},'ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-t80 cl-modal cl-none-title cl-close-btn',false,function(){
3972					$('.flat-modal').removeClass('hide');
3973					$('.modal-backdrop').removeClass('hide');
3974
3975				});	
3976                // $('.progress .progress-bar').css('width','0%');
3977                $.processOFF();
3978                return;
3979            }
3980            if(typeof data.result.file == 'undefined' || !data.result.file || typeof data.result.uploaded == 'undefined' || !data.result.uploaded) {
3981              
3982
3983				var modal = $(this).showModalFlat('', $.lang[LANG]['form.file.upload.disabled'],true,false,function(){
3984						
3985					$(document).on('keydown', function(e) {
3986                        if(e.keyCode == 27) modal.modal('hide');
3987                    });
3988					$('.flat-modal').removeClass('hide');
3989					$('.modal-backdrop').removeClass('hide');
3990
3991				},'ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-t80 cl-modal cl-none-title cl-close-btn',false,function(){
3992					$('.flat-modal').removeClass('hide');
3993					$('.modal-backdrop').removeClass('hide');
3994
3995				});					
3996                $.processOFF();
3997                return;
3998            }
3999
4000            if(data.result.uploaded) {
4001                var flink_s = (data.result.uploaded.file_size) ? Number(data.result.uploaded.file_size) : 0,
4002                    flink_unit = (flink_s > 1024) ? 'MB' : 'KB',
4003                    flink_size = (flink_s > 1024) ? flink_s/1024 : flink_s;
4004                    
4005                var uploaded = data.result.uploaded;
4006                var thumb = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50" height="50"><g><path d="M28 16.82c0 1.21.98 2.18 2.18 2.18H40L28 7v9.82z" style="fill:#3870B2"/><path d="M30.18 19c-1.2 0-2.18-.98-2.18-2.18V7H13c-1.66 0-3 1.34-3 3v30c0 1.66 1.34 3 3 3h24c1.66 0 3-1.34 3-3V19h-9.82zM32 35H18v-2h14v2zm0-5H18v-2h14v2zm0-5H18v-2h14v2z" style="fill:#4789e7"/></g></svg>';
4007                if(uploaded.file_type.indexOf('image/') > -1 && uploaded.thumbnail_url) {
4008                    thumb = '<img src="' + uploaded.thumbnail_url + '">';
4009                }
4010                
4011                //$(this).closest(".cl-s-etc-val").find("input[type='text']").remove();
4012                $(this).closest("[data-jcoltype='fupload']").find(".valueCheck").val(data.result.uploaded.orig_name + '||' + data.result.uploaded.file_size + 'KB' + '||' + data.result.file);
4013                $(this).closest(".cl-s-form-wrap").removeClass("empty");
4014				
4015				switch(currentPage){
4016					case "mypage" : 
4017					case "register" : 
4018						var fileRow = '\
4019						<div class="file-row display-flex align-items-center">\
4020							<div class="r-flex-left">\
4021								<div class="file-thumb"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M4 16c-1.66 0-3-1.34-3-3V6l6-6h5c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H4Zm-2-3c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2H8v4c0 1.1-.9 2-2 2H2v6Zm.41-7H6c.55 0 1-.45 1-1V1.41L2.41 6ZM4 13v-1h8v1H4Zm0-3V9h8v1H4Z"/></svg></div>\
4022								<div>\
4023									<p class="file-name">'+uploaded.orig_name+'</p>\
4024								</div>\
4025							</div>\
4026							<div class="r-flex-right">\
4027									<p class="file-size">'+flink_size.toFixed(2) + flink_unit+'</p>\
4028								<span class="form-file-delete" data-src="'+uploaded.file_name+'">\
4029									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" width="15" height="15"><g>
4029<path d="M2.35 12.65c-.2-.2-.2-.51 0-.71l9.6-9.6c.2-.2.51-.2.71 0 .2.2.2.51 0 .71l-9.6 9.6c-.2.2-.52.2-.71 0z"/><path d="M12.3 2.2a.47.47 0 0 0-.35.15l-9.6 9.6c-.2.2-.2.51 0 .71.1.1.23.15.35.15.13 0 .26-.05.35-.15l9.6-9.6c.2-.2.2-.51 0-.71-.1-.1-.22-.15-.35-.15z"/><path d="M12.65 12.65c-.2.2-.51.2-.71 0l-9.6-9.6c-.2-.2-.2-.51 0-.71.2-.2.51-.2.71 0l9.6 9.6c.2.2.2.52 0 .71z"/><path d="M2.7 2.2a.47.47 0 0 0-.35.15c-.2.2-.2.51 0 .71l9.6 9.6c.1.1.23.15.35.15.13 0 .26-.05.35-.15.2-.2.2-.51 0-.71l-9.6-9.6a.47.47 0 0 0-.35-.15z"/></g></svg>\
4030								</span>\
4031							</div>\
4032						</div>\
4033						';
4034					break; 		
4035								
4036					case "info" :
4037						// 파일 정보를 조합하여 다운로드 링크 생성
4038						var file_info_str = uploaded.orig_name + '||' + uploaded.file_size + 'KB' + '||' + data.result.file;
4039						var fileResult = $.umember.fileurlcreate(file_info_str);
4040						var download_link = fileResult.download_link;
4041						
4042						var fileRow = '\
4043						<div class="file-row file-info-layout">\
4044							<div class="file-left-area">\
4045								<p class="file-name">'+uploaded.orig_name+'</p>\
4046							</div>\
4047							<div class="file-right-area">\
4048								<span class="file-size">'+flink_size.toFixed(2) + flink_unit+'</span>\
4049								'+download_link+'\
4050									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">\
4051										<path d="M5 19v-3.5h1V18h12v-2.5h1V19H5Zm2.65-7.15.71-.71 3.15 3.15V5h1v9.29l3.15-3.15.71.71-4.35 4.35-4.35-4.35Z"/>\
4052									</svg>\
4053								</a>\
4054								<span class="form-file-delete" data-src="'+uploaded.file_name+'">\
4055									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">\
4056										<path d="M19 8h-3V6H8.02v2H5v1h1v9c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9h1V8ZM9.02 7H15v1H9.02V7ZM17 18c0 .55-.45 1-1 1H8c-.55 0-1-.45-1-1V9h10v9Zm-7-7h1v6h-1v-6Zm3 0h1v6h-1v-6Z"/>\
4057									</svg>\
4058								</span>\
4059							</div>\
4060						</div>\
4061						';
4062					break; 	
4063				}	
4064                $(this).closest("[data-jcoltype='fupload'] .cl-s-form-control-register").append(fileRow);
4065				$(this).closest("[data-jcoltype='fupload']").find('label[r-fupload-type="file.upload"]').addClass('hide');
4066
4067				$(this).closest("[data-jcoltype='fupload']").addClass('isdata');
4068				$(this).closest("[data-jcoltype='fupload']").removeClass('nodata');
4069            }
4070            
4071             if($(this).closest("[data-jcoltype='fupload']").find('.file-row').length >= REGISTER_MAX_FILE_NUMBER) {
4072                $(this).closest("[data-jcoltype='fupload'] .cl-s-form-control-register").find('label').addClass('disabled');
4073                $(this).closest("[data-jcoltype='fupload'] .cl-s-form-control-register ").find('input[type="file"]').prop('disabled', true);
4074
4075				var $inputElement = $(this).closest("[data-jcoltype='fupload']").find('.valueCheck');
4076				$inputElement.attr('data-etcidx', '');
4077				$inputElement.attr('data-id', '');
4078				$inputElement.attr('data-file-name', '');				
4079            }
4080            $.processOFF();
4081            // $('#loading').css('left','50%');
4082        },
4083    }).prop('disabled', !$.support.fileInput)
4084        .parent().addClass($.support.fileInput ? undefined : 'disabled');
4085	});
4086
4087	$(document).on("click", "div[data-jcoltype='fupload'] .form-file-delete", function() {
4088		var REGISTER_MAX_FILE_NUMBER = 1;
4089		var $elem = $(this);
4090
4091		var $label = $(this).closest("[data-jcoltype='fupload']").find('label');
4092		var $inputFile = $(this).closest("[data-jcoltype='fupload']").find('input[type="file"]');
4093		var etcIdx = $(this).closest("[data-jcoltype='fupload']").find('.valueCheck').attr('name');
4094		etcIdx = etcIdx.replace('member-', '');
4095		var directDeleteFlag = false;
4096		var $closestForm = $(this).closest('form[name="myinfo_form"]');
4097		var id = "";
4098
4099		if( $closestForm.length > 0 && $closestForm.attr('action') === '/_myinfo_proc') {
4100			directDeleteFlag = true;
4101			id = $(this).closest($closestForm).find('[name="email"]').val();
4102		} else if (($(this).closest(".mng-modal-body").length > 0)){
4103			directDeleteFlag = true;
4104			id = $(this).closest(".mng-modal-body").find(".member-info-input").val();
4105		}
4106
4107		if(directDeleteFlag) {
4108
4109			var $inputElement = $elem.closest("[data-jcoltype='fupload']").find('.valueCheck');
4110			$inputElement.attr('data-etcidx', etcIdx);
4111			$inputElement.attr('data-id', id || '');
4112			$inputElement.attr('data-file-name', $elem.data('src'));
4113			
4114			// 파일 업로드 상태 업데이트
4115			var fileRowCnt = $elem.closest("[data-jcoltype='fupload']").find('.file-row').length;
4116			$elem.closest("[data-jcoltype='fupload']").find(".valueCheck").attr('value', '');
4117			
4118			$elem.closest("[data-jcoltype='fupload']").addClass('nodata');
4119			$elem.closest("[data-jcoltype='fupload']").removeClass('isdata');
4120			$elem.closest("[data-jcoltype='fupload']").find('label[r-fupload-type="file.upload"]').removeClass('hide');
4121
4122			if($elem.closest("[data-jcoltype='fupload']").hasClass("type2")) {
4123				$elem.closest("[data-jcoltype='fupload']").removeClass("isdata");
4124				$elem.closest("[data-jcoltype='fupload']").addClass("nodata");
4125			}
4126			if(fileRowCnt - 1 < REGISTER_MAX_FILE_NUMBER) {
4127				$label.removeClass('disabled');
4128				$inputFile.prop('disabled', false);
4129			}
4130			$elem.closest('.file-row').remove();
4131			
4132			// 확인 메시지
4133			
4134		} else {
4135			if(confirm(directDeleteFlag ? $.lang[LANG]['upload.file.confirm.delete'] : $.lang[LANG]['form.file.confirm.delete'])) {
4136			
4137 			$.ajax({
4138				url:"/template/register_fupload/delete-file",
4139				type:"post",
4140				async: true,
4141				beforeSend: function() {
4142					$.processON();
4143				},
4144				data:{
4145					"s": $elem.data("src"),
4146					"directDeleteflag" : directDeleteFlag ,
4147					"etcIdx" : etcIdx,
4148					"id" : id || "",
4149					"sid": (typeof property !== 'undefined' && property.SID) ? property.SID : (typeof SID !== 'undefined' ? SID : '')
4150				},
4151				dataType:"json",
4152				success:function() {
4153					var fileRowCnt = $elem.closest("[data-jcoltype='fupload']").find('.file-row').length;
4154					$elem.closest("[data-jcoltype='fupload']").find(".valueCheck").attr('value', '');
4155					if(fileRowCnt > 1) {
4156						$elem.closest("[data-jcoltype='fupload']").find('.file-uploaded-number').text('(' + (fileRowCnt - 1) + '/' + REGISTER_MAX_FILE_NUMBER + ')');
4157					} else {
4158						$elem.closest("[data-jcoltype='fupload']").addClass('nodata');
4159						$elem.closest("[data-jcoltype='fupload']").removeClass('isdata');
4160						$elem.closest("[data-jcoltype='fupload']").find('label[r-fupload-type="file.upload"]').removeClass('hide');
4161
4162						if($elem.closest("[data-jcoltype='fupload']").hasClass("type2")) {
4163							$elem.closest("[data-jcoltype='fupload']").removeClass("isdata");
4164							$elem.closest("[data-jcoltype='fupload']").addClass("nodata");
4165						}
4166					}
4167					
4168					if(fileRowCnt - 1 < REGISTER_MAX_FILE_NUMBER) {
4169						$label.removeClass('disabled');
4170						$inputFile.prop('disabled', false);
4171					}
4172				},
4173				complete: function() {
4174					$elem.closest('.file-row').remove();
4175					$.processOFF();
4176				}
4177			});
4178		 }
4179		}			
4180	});		
4181	// $.fixbtnConfig = {
4182	// 	html: function(e){
4183	// 		// console.log('fixbtnConfig html');
4184
4185	// 		var $this = ($('.siteLANG').has(e.target).length || $(e.target).hasClass('siteLANG')) ? $('.el-menu .siteLANG') : $(e.target),
4186	// 			fixbtnPosition = $.fixbtnConfig.position($this),
4187	// 			checkSidebar = ($('.navbar-fheader').hasClass('sidebar')) ? true : false,
4188	// 			fh_type = $('header.navbar[data-fixtype]').attr('data-fh-type'),	
4189	// 			fixtypeNum = $('header.navbar').attr('data-fixtype').replace(/(top|sidebar)\_/gi,''),		
4190	// 			fixtypeArr = ['01','02','03','08'],
4191	// 			edit_html = '<div class="fixbtn_wrap"><span class="fixbtn_edit">' + clSVG('block-config',15,15) + '</span></div>',
4192	// 			checktarget = $.fixbtnConfig.checkTarget($this);
4193				
4194	// 		if(checktarget.indexOf('FixedMenu')>-1) {
4195	// 			if(checkSidebar) $('.navbar-fheader[data-fixtype] .cl-fixed-menu').prepend(edit_html);
4196	// 			else $('.navbar-fheader[data-fixtype] .cl-fixed-menu').before(edit_html);
4197	// 		} else {
4198	// 			$('.element [data-fixtype^="sidebar_"] .siteLANG.cl-fixbtn').prepend(edit_html);
4199	// 		}
4200			
4201	// 		$('.fixbtn_wrap').css('left',fixbtnPosition.left+'px');
4202			
4203	// 		if(checkSidebar && $.inArray(fixtypeNum, fixtypeArr) > -1) $('.fixbtn_wrap').css('top',fixbtnPosition.top+'px');
4204	// 		if(!checkSidebar) $('.fixbtn_wrap').css('height',fixbtnPosition.height+'px');
4205	// 		if(!checkSidebar && (fh_type=='top')) $('header.navbar[data-fixtype]').find('.cl-fixed-menu').css('padding-left','50px');
4206	// 	},
4207	// 	position: function($this){
4208	// 		// console.log('fixbtnConfig position');
4209	// 	    if((window.innerWidth < 769 && typeof MODE == 'undefined')) return false; 
4210	// 	    var height_arr = {},
4211	// 	    	fh_type = ($('c').attr('data-fh-type')) ? $('header.navbar[data-fixtype]').attr('data-fh-type') : 'top',
4212	// 	    	fixtextalign = ($('header.navbar[data-fixtype]').attr('data-fixtextalign')) ? $('header.navbar[data-fixtype]').attr('data-fixtextalign') : 'center',
4213	// 	        fixtypeNum = $('header.navbar').attr('data-fixtype').replace(/(top|sidebar)\_/gi,''),
4214	// 	        fixtypeArr = ['01','02','03','08'],
4215	// 	        checkSlang = ($('.cl-fixbtn.siteLANG').length > 0) ? true : false,
4216	// 	        checkFixedMenu = ($('.cl-fixed-menu').length > 0) ? true : false,
4217	// 	        checkSidebar = ($('.navbar-fheader').hasClass('sidebar')) ? true : false,
4218	// 	        checktarget = $.fixbtnConfig.checkTarget($this);
4219
4220	// 			$this = (checktarget.indexOf('FixedMenu')>-1) ? $('.element header.navbar[data-fixtype] .cl-fixed-menu') : $('.element [data-fixtype^="sidebar_"] .siteLANG.cl-fixbtn');
4221
4222	// 	    var $cl_fixbtn = ($('header.navbar[data-fixtype] .cl-fixed-menu .cl-fixbtn.cl-visible').length>0) ? $('header.navbar[data-fixtype] .cl-fixed-menu .cl-fixbtn.cl-visible') : '',
4223	// 	    	width_val = ($cl_fixbtn) ? $cl_fixbtn.width() : 0,
4224    //             clfixbtn_eq = (fixtextalign=='left' && checkSidebar && !$this.hasClass('siteLANG')) ? ($cl_fixbtn ? $cl_fixbtn.last() : $cl_fixbtn.first()) : ($this.hasClass('siteLANG') ? '' : $cl_fixbtn.first()),
4225    //             $selector = $this.hasClass('siteLANG') ? $this.find('.cl-lang').offset().left.toFixed(0) : 
4226	// 	        			( $cl_fixbtn ? ((clfixbtn_eq.find('> a:visible').length>0) ? clfixbtn_eq.find('> a:visible').offset().left.toFixed(0) : 0) : 0),
4227	//    			leftPosCal = (checkSidebar) ? 50 : 47,
4228	// 	        top_cal = '';
4229
4230	//    			$selector = Number($selector);
4231
4232   	// 		//사이드바 세로디자인 확장기능버튼(01,02,03,08) => a 태그 width 최대값 구하기
4233   	// 		if(checkSidebar && ($.inArray(fixtypeNum, fixtypeArr) > -1) && !$this.hasClass('siteLANG')) {  
4234	//         	var width_arr = [],
4235	//         		selector_arr = [];
4236
4237    //             $cl_fixbtn.find('> a:visible').each(function(){
4238    //             	var w_val = $(this).width();
4239    //             	if(!top_cal) top_cal = Number(($(this).parents('li.cl-fixbtn.cl-visible').height() - 25) / 2);
4240            
4241    //             	width_arr.push(w_val);
4242    //             	selector_arr.push($(this));
4243    //             });
4244
4245    //             var w_max = Math.max(...width_arr),
4246    //             	w_index = width_arr.indexOf(w_max);
4247	
4248    //         	$selector = Number($(selector_arr[w_index]).offset().left.toFixed(0));      
4249            	     	
4250    //         	width_val = w_max;
4251    //         } 
4252          	
4253    //         var fixed_left = ($this.hasClass('siteLANG')) ? ((fixtextalign=='left') ? $selector+$this.find('.cl-lang').width()-3 : $selector-47) : ((fixtextalign=='left' && checkSidebar) ? $selector+width_val : $selector-leftPosCal),
4254	// 	        fixed_height = ($this.height() < 15) ? 45 : (fh_type=='right' ? $('header.navbar[data-fixtype]').find('#tpl-menu li').height() + 1 : $('header.navbar[data-fixtype]').find('#fixed-menu').height());
4255	       
4256	// 	    height_arr = {
4257	// 	        'left' : fixed_left,
4258	// 	        'height' : fixed_height,
4259	// 	        'top' : top_cal
4260	// 	    }
4261
4262	// 	    return height_arr;
4263	// 	},
4264	// 	checkTarget : function($this) {
4265	// 		// console.log('fixbtnConfig checkTarget');
4266	// 		var checkTarget = '',
4267	// 			checkSidebar = ($('.navbar-fheader').hasClass('sidebar')) ? true : false;
4268
4269	// 		if(checkSidebar) {
4270	// 	    	checkTarget = ($this.has($('.siteLANG')).length>0 || $this.hasClass('siteLANG')) ? 'sidebarSiteLang' : 'sidebarFixedMenu';
4271	// 	    } else {	
4272	// 	    	checkTarget = 'topFixedMenu'
4273	// 	    }
4274
4275	// 	    return checkTarget;
4276	// 	}
4277	// }
4278
4279	var setLoginLogoutAttribute = function(check_login,nav,display) {
4280		if(!check_login) {
4281			nav.find('.siteUM').removeClass('dropdown').find('.cl-login').show().removeClass(display).addClass(display);
4282			nav.find('.siteUM').find('.cl-logout').hide();
4283		} else {
4284			nav.find('.siteUM').find('.cl-login').hide();				
4285			nav.find('.siteUM').find('.cl-logout').show();
4286			nav.find('.siteUM').find('.dropdown-menu').remove();
4287		}
4288	}
4289
4290	var getJoinCollectionsList = function(sid) {
4291		var returnHtml = '';
4292		$.ajax({
4293			url: '/umember/collections',
4294			type: 'post',
4295			data: { sid : sid },
4296			dataType: 'html',
4297			success: function (list_html) {
4298				// $('.order-list-area').html(list_html);
4299				returnHtml += list_html;
4300			}, error: function () {
4301	
4302			}, complete: function () {
4303				// $.processOFF();
4304			}
4305		});
4306	   
4307		return returnHtml;
4308	}	
4309	
4310	/***********************************************************************************************************************************member-config page START*/
4311	var activePrev = $('#join-activate').selectpicker('val');
4312	$('#join-activate, #join-language, #join-approval, #join-display, #join-captcha').live('change', function () {
4313		var key = $(this).attr('id').replace(/join-/gi,''),
4314			val = ($(this).is('select')) ? $(this).val() : $(this).prop('checked');
4315
4316		$.ajax({
4317			type: 'POST',
4318			url: '/umember/update/type/condition',
4319			data: { sid : SID, key : key, val : val },
4320			dataType: 'json',
4321			async: true,
4322			success: function(data) {
4323				if(typeof data.error != 'undefined' && data.error) {
4324					alert(data.error);
4325					return false;
4326				}
4327				if(data.cert_use !== undefined && data.cert_use) {
4328					$('#join-activate').selectpicker('val', activePrev);
4329		            var modal_str = $.lang[LANG]['manager.cert.disable.option.txt'];
4330		            $(this).showModalFlat($.lang[LANG]['manager.cert.disable.option'], modal_str,true,false,'','ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0 cl-okbtn-pbt70 site-umember-modal');
4331		            return false;
4332				}
4333				activePrev = val;
4334
4335				if(val == '0') {
4336					$('#section-top-menu li').addClass('disabled-cert');
4337				} else {
4338					$('#section-top-menu li').removeClass('disabled-cert');
4339				}
4340			}
4341		});
4342	});
4343
4344	$(document).off('click', '.mng-settings[data-type="collection"] .collection-item-used, .mng-settings[data-type="collection"] .collection-item-optional')
4345			   .on('click', '.mng-settings[data-type="collection"] .collection-item-used, .mng-settings[data-type="collection"] .collection-item-optional', function() {
4346		if($(this).closest('.checkboxs').hasClass('disabled')) {
4347			var modal = $(this).showModalFlat($.lang[LANG]['config.information'], $.lang[LANG]['manager.check.collection.required.message'], true, false, '', 'ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
4348			return false;
4349		}
4350
4351		var cl_val = $(this).prop('checked'),
4352			item_seq = $(this).parents('.collection-item').attr('data-seq'),
4353			jcol_name = $(this).parents('.collection-item').find('.collection-name').text(),
4354			update_data = {},
4355			jcol_data = {},
4356			d_index = 0,
4357			check_class = $(this).attr('class').replace(/collection-item-/gi,'');
4358
4359		check_class = (check_class=='optional') ? 'require' : check_class;
4360				
4361		jcol_data[0] = {
4362			seq : item_seq,
4363			[check_class] : cl_val.toString()
4364		}
4365
4366		if (check_class === 'used' && cl_val.toString() === 'false' && $(this).closest('.use-option-check').find('.collection-item-optional').prop('checked') === true) {
4367			jcol_data[0]['require'] = 'false';
4368			$(this).closest('.use-option-check').find('.collection-item-optional').prop('checked', false);
4369		}
4370		if (check_class === 'require' && cl_val.toString() === 'true' && $(this).closest('.use-option-check').find('.collection-item-used').prop('checked') === false) {
4371			jcol_data[0]['used'] = 'true';
4372			$(this).closest('.use-option-check').find('.collection-item-used').prop('checked', true);
4373		}
4374		
4375		$.ajax({
4376			type: 'POST',
4377			url: '/umember/setJoinCollections/type/jcol_update',
4378			data: { sid: SID, update_data: jcol_data },
4379			dataType: 'json',
4380			async: true,
4381			success: function(data) {
4382				if(typeof data.error != 'undefined' && data.error) {
4383					alert(data.error);
4384					return false;
4385				}
4386
4387				var slog_val = check_class+'.'+cl_val.toString(),
4388					slog_field = {'field_name':jcol_name};
4389				setSiteLogs('um.config.collection.new',slog_val,slog_field,'um.config.collection.new');
4390			},
4391			complete: function () {
4392				$.processOFF();
4393			}
4394		});
4395	});
4396	
4397	$('.cl-s-join-collections-etcwrap[data-jcoltype="memo"] textarea').live({
4398		focus : function(e){
4399			$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').addClass('etc-mouseEnter');
4400			if($(this).val()) {
4401				$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('textarea-active').addClass('textarea-active');
4402			} else {
4403				$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('textarea-active');
4404			}
4405		},
4406		focusout : function(e) {
4407			$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('etc-mouseEnter');
4408			$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('textarea-active-text').addClass('textarea-active-text');
4409			if($(this).val()) {
4410				$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('textarea-active').addClass('textarea-active');
4411			} else {
4412				$(this).parents('.cl-s-join-collections-etcwrap').find('.cl-s-etc').removeClass('textarea-active');
4413			}
4414		}
4415		
4416	});
4417
4418	$('.mng-member .mng-settings[data-type="collection"] .collection-add').live('click',function() {
4419
4420		if($('.mng-member .collection-content').find('.collection-item.additem').length>0) {
4421			return false;
4422		}
4423		// if($('.mng-member .collection-content').find('.collection-update').length>0) {
4424		// 	$('.mng-member .collection-content .collection-update').find('input').focus();
4425		// 	return false;
4426		// }
4427	
4428		if($('.mng-member .collection-content').find('.collection-item').length==15) $(this).hide();
4429		if($('.mng-member .collection-content').find('.collection-item').length>16) {
4430			var modal = $(this).showModalFlat('DELETE FIELD', $.lang[LANG]['manager.join.cl.item.max-add'], true, false, '', 'ok');
4431			return false;
4432		}
4433
4434		var cl_etc_arr = $('.mng-member .collection-content .collection-item').map(function() { 
4435							var cl_type = $(this).attr('data-type');
4436							if(cl_type.match(/^etc/)) return cl_type.replace('etc','');
4437						}).get().sort(),
4438			cl_etc = $('.collection-content .collection-item').length-6;
4439
4440		for (var i = 0; i < 10; i++) {
4441			if(typeof cl_etc_arr[i] == 'undefined' || parseInt(cl_etc_arr[i]) != (i+1) ) {
4442				cl_etc = i+1; 
4443				break;
4444			}
4445		}
4446
4447		var str = collectionItem('',cl_etc);
4448		
4449        $('.mng-member .collection-content').append(str)
4450		
4451		
4452		$('.mng-member .collection-content').find('.collection-item[data-etc="' + cl_etc + '"] .collection-edit').click();
4453		$('.collection-type-selectbox select[name="jcollection-select-type"]').selectpicker();		
4454		
4455		$('.collection-item.additem').find('.collection-config').removeClass('hide').addClass('hide');
4456		collectionSortable('.mng-member .collection-item');
4457		
4458	});
4459
4460
4461	
4462
4463    $('.mng-member .mng-settings[data-type="collection"] .collection-edit').live('click', function() {
4464		if($('.mng-member .collection-content').find('.collection-update').length > 0 ) {
4465			return false;
4466		}
4467		var selectCl = $(this).closest('.collection-item'),
4468			cl_name = selectCl.find('.collection-name').text(),
4469			input_text = addCollectionInput(cl_name);
4470
4471		selectCl.removeClass('collection-status-edit').addClass('collection-status-edit');
4472		$('.mng-member .collection-content').removeClass('collection-status-disabled').addClass('collection-status-disabled');
4473		$(this).parents('.collection-item').siblings().find('.collection-config > .icons').removeClass('hide').addClass('hide');
4474		// $(input_text).prependTo(selectCl.find('.collection-info'));
4475		// $(input_text).prependTo(selectCl);
4476
4477		// $(this).parents('.collection-item').find('.collection-info .collection-name').hide();
4478		// $('.mng-member .collection-content').find('.collection-item').css('pointer-events','none');
4479		// $('.mng-member .collection-content').find('.collection-update-cancel, .collection-update-save, .collection-update-name').css('pointer-events','auto');
4480		// $('.mng-member .collection-update .collection-update-name').focus();
4481		$('#join-collections,#mjoin-collections').sortable({cancel: '.collection-item' });
4482	});
4483
4484	$('.mng-member .mng-settings[data-type="collection"] .collection-delete').live('click', function() {
4485		var selectCl = $(this).closest('.collection-item'),
4486			cl_etc = (typeof selectCl.attr('data-etc') != 'undefined' && selectCl.attr('data-etc')) ? selectCl.attr('data-etc') : '',
4487			cl_field = 'etc' + cl_etc,
4488			cl_name = selectCl.find('.collection-name').text(),
4489			item_seq = $(this).parents('.collection-item').attr('data-seq');
4490
4491		var del_modal = $(this).showModalFlat($.lang[LANG]['manager.join.cl.item.delete.title'], $.lang[LANG]['manager.join.cl.item.delete'], true, true, function() {
4492			selectCl.addClass('delete_item');
4493
4494			$.processON();
4495
4496			$.ajax({
4497				type: 'POST',
4498				url: '/umember/setJoinCollections/type/jcol_delete',
4499				data: { sid: SID, d_seq : item_seq },
4500				dataType: 'json',
4501				async: true,
4502				success: function(data) {
4503					if(typeof data.error != 'undefined' && data.error) {
4504						alert(data.error);
4505						return false;
4506					}
4507			
4508					$('.mng-member .collection-content').find('.collection-item[data-etc="'+cl_etc+'"]').remove();
4509					if($('.mng-member .collection-content').find('.collection-item').length<16) {
4510						$('.mng-member .collection-add').show();
4511					}
4512					
4513					del_modal.modal('hide');
4514
4515					setSiteLogs('um.config.collection','delete',{'field_name':cl_name,'field':cl_field},'um.config.collection');
4516
4517				},
4518				complete: function () {
4519					$.processOFF();
4520				}
4521			});
4522		}, 'cancel',$.lang[LANG]['manager.join.cl.item.delete.btn.delete'],'cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
4523	});
4524
4525
4526	$('.mng-member .mng-settings[data-type="collection"] .collection-update-cancel').live('click', function() {
4527		if($('.mng-member .collection-content').find('.collection-item').length<16) $('.mng-member .collection-add').show();
4528		if(!$(this).closest('.collection-item').find('.collection-name').text()) {
4529			$(this).closest('.collection-item').remove();
4530		}
4531		$(this).parents('.collection-item').find('.collection-info .collection-name').show();
4532		$('.mng-member .collection-content').find('.config-error').remove();
4533		$('.mng-member .collection-content').find('.collection-item').removeAttr('style');
4534		$(this).closest('.collection-update').remove();
4535		collectionSortable();
4536	});
4537
4538	$('.mng-member .collection-update-save').live('click', function(e) {
4539		var selectCl = $(this).closest('.collection-item'),
4540			cl_etc = (typeof selectCl.attr('data-etc') != 'undefined' && selectCl.attr('data-etc')) ? selectCl.attr('data-etc') : '',
4541			cl_field = 'etc' + cl_etc,
4542			cl_type = selectCl.find('.collection-item-type-select').val(),
4543			cl_name = selectCl.find('.collection-update-name').val().trim(),
4544			cl_prev = selectCl.find('.collection-name').text().trim(),
4545			regexp = /^[ㄱ-ㅎ가-힣ㅏ-ㅣa-zA-Z0-9\# ]+$/i,
4546			error_str = '';
4547
4548
4549		$('.collection-content .config-error').remove();
4550		$(this).parents('.collection-item').find('.collection-info .collection-name').show();
4551
4552		if(cl_prev == cl_name) {
4553			if(selectCl.hasClass('additem')) {
4554				error_str = $.lang[LANG]['manager.join.cl.item.name.enter'];
4555			} else {
4556				$('.collection-content').find('.collection-item').removeAttr('style');
4557				$('.collection-content').find('.collection-update').remove();
4558				return false;
4559			}
4560		}
4561
4562
4563		if(cl_name.length == 0) error_str = $.lang[LANG]['board.enter-group-name'];
4564		else if(checkEmojis(cl_name)) error_str = $.lang[LANG]['config.unable.emoji'];
4565		else if(!regexp.test(cl_name)) error_str = $.lang[LANG]['board.allowed-chars'];
4566		else if(cl_name.length>20) error_str = $.lang[LANG]['board.enter-max-chars'];
4567		else if(cl_prev == cl_name) {
4568			if(selectCl.hasClass('additem')) {
4569				error_str = $.lang[LANG]['manager.join.cl.item.name.enter'];
4570			} else {
4571				$('.collection-content').find('.collection-item').removeAttr('style');
4572				$('.collection-content').find('.collection-update').remove();
4573				return false;
4574			}
4575		} else {
4576			var cl_name_list = $('.collection-content').find('.collection-name').map(function() { return $(this).text().trim(); }).get();
4577			if($.inArray(cl_name,cl_name_list) > -1) {
4578				error_str = $.lang[LANG]['manager.join.cl.item.name.inuse'];
4579			}
4580		}
4581
4582		if(error_str.length > 0) {
4583			e.preventDefault();
4584			$(this).parents('.collection-item').find('.collection-info .collection-name').hide();
4585			selectCl.append('<div class="config-error collection-edit">' + error_str + '</div>');
4586			return false;
4587		}
4588			
4589		var collections = {};
4590		$('.mng-member .collection-content').children('.collection-item').each(function() {
4591			var field = $(this).attr('data-type'),
4592				name = (field == cl_field) ? cl_name : $(this).find('.collection-name').text().trim(),
4593				type = (field == cl_field) ? cl_type : $(this).find('.collection-item-type-select').val(),
4594				used = $(this).find('.collection-item-used').prop('checked'),
4595				optional = $(this).find('.collection-item-optional').prop('checked');
4596
4597			collections[field] = {
4598				'used'	: used,
4599				'optional'	: optional,
4600				'name'	: name,
4601				'type'	: type
4602			};
4603		});
4604		
4605		$.ajax({
4606			type: 'POST',
4607			url: '/umember/update/type/condition',
4608			data: { sid: SID, key: 'collections_all', val: JSON.stringify(collections) },
4609			dataType: 'json',
4610			async: true,
4611			success: function(data) {
4612				if(typeof data.error != 'undefined' && data.error) {
4613					alert(data.error);
4614					return false;
4615				}
4616
4617				if(selectCl.hasClass('additem')) {
4618					selectCl.removeClass('additem');
4619					selectCl.find('#collection-item-used-additem').removeAttr('id').attr('id','collection-item-used-'+cl_field);
4620					// selectCl.find('label[for="collection-item-used-additem"]').removeAttr('for').attr('for','collection-item-used-'+cl_field);
4621					selectCl.find('#collection-item-optional-additem').removeAttr('id').attr('id','collection-item-optional-'+cl_field);
4622					// selectCl.find('label[for="collection-item-optional-additem"]').removeAttr('for').attr('for','collection-item-optional-'+cl_field);
4623				}
4624				selectCl.find('.collection-name').text(cl_name);
4625
4626				$('.collection-content').find('.config-error').remove();
4627				$('.collection-content').find('.collection-item').removeAttr('style');
4628				selectCl.find('.collection-update').remove();
4629				collectionSortable();
4630
4631
4632				var checkAdd = (cl_prev == '') ? true : false,
4633					slog_val = (checkAdd) ? 'add' : 'edit',
4634					slog_field = (checkAdd) ? {'field_name':cl_name,'field':cl_field} : {'field_name':cl_prev,'field':cl_field,'before':cl_prev,'after':cl_name};
4635				setSiteLogs('um.config.collection',slog_val,slog_field,'um.config.collection');
4636
4637			}
4638		});
4639	});
4640
4641
4642	$('#config-acces-terms, #config-privacy, #config-privacy-join, #config-privacy-nonmem, #config-description').live('blur', function(e) {
4643		var blur_id = $(this).attr('id'),
4644			key = blur_id.replace(/config-/gi,'').replace(/-/gi,'_'),
4645			val = $(this).val().trim(),
4646			mng_settings_el = $(this).closest('.mng-settings');
4647
4648		if(key.charAt(0) == 'm') key = key.substring(1,key.length);
4649
4650		$.ajax({
4651			type: 'POST',
4652			url: '/umember/update/type/condition',
4653			data: { sid : SID, key : key, val : val },
4654			dataType: 'json',
4655			async: true,
4656			success: function(data) {
4657				if(typeof data.error != 'undefined' && data.error) {
4658					alert(data.error);
4659					return false;
4660				}
4661				mngShowToast('check', $.lang[LANG]['manager.check.save.text'] , mng_settings_el);
4662
4663				if(typeof data.val  != 'undefined' && val == '') {
4664					$('#'+blur_id).val(data.val);
4665				}
4666			}
4667		});
4668
4669	});
4670
4671
4672	/*가입 수집 항목 : type 변경 기능(추후) 사용되는 부분.*/
4673	$('.mng-settings[data-type="collection"] .collection-toggle').live('click', function() {
4674	    $(this).closest('.collection-item').toggleClass('item-content-open');
4675	    if($(this).closest('.collection-item').hasClass('item-content-open')) {
4676	        $(this).removeClass('fa-angle-down').addClass('fa-angle-up');
4677	        // $(this).closest('.collection-item').find('.collection-item-content').removeAttr('style');
4678	    } else {
4679	        $(this).removeClass('fa-angle-up').addClass('fa-angle-down');
4680	        // $(this).closest('.collection-item').find('.collection-item-content').css('display','none');
4681	    }
4682	});
4683
4684
4685    $('.mng-siteUM-modal .profile-image-wrap,#my-image-modal .profile-image-wrap').live({
4686		click: function() {
4687			var checkFirstStep = ($(this).find('#profileMyImg').length > 0) ? false : true;
4688			if(checkFirstStep) $('.mng-siteUM-modal .my-image-edit').click();
4689			else $('#profileUMFileupload').click();
4690		}
4691	});
4692
4693    $('#profileUMFileupload').live({
4694		click: function() {
4695			
4696			var sid = $('#my-image-modal').attr('data-sid'),
4697				uid = $('#my-image-modal').attr('data-uid');
4698
4699			$(this).fileupload({
4700				url: '/umember/update/type/myimage/sid/'+sid+'/uid/'+uid,
4701				dataType: 'json',
4702				pasteZone: null,
4703				async: true,
4704				add: function(e, data) {
4705					$('#loading').css('left','-100%');
4706					$.processON();
4707					data.submit();
4708				}, 
4709				done: function(e, data) {
4710					if(typeof data.result.error != 'undefined' && data.result.error) {
4711						alert(data.result.error);
4712						$('.progress .progress-bar').css('width','0%');
4713						$.processOFF();
4714						return;
4715					}
4716					if(data.result.src) {
4717						$('.profile-image-wrap .my-image').prop('src',data.result.src);
4718						if($('.dashboard._admin_dashboard').length > 0) $('#dashboard-image-top image').attr('xlink:href',data.result.src);
4719						if($('#mobile-nav').length > 0) $('#mobile-nav .login-profile img').prop('src',data.result.src);
4720					}
4721                    $.processOFF();
4722					$('#loading').css('left','50%');
4723				},
4724				progressall: function(e, data) {
4725					var progress = parseInt(data.loaded / data.total * 100, 10);
4726					$('.progress .progress-bar').css(
4727						'width',
4728						progress + '%'
4729					);
4730				},
4731			}).prop('disabled', !$.support.fileInput)
4732				.parent().addClass($.support.fileInput ? undefined : 'disabled');
4733
4734		}
4735	});
4736
4737
4738	$('#uJoin').live('click', function() {
4739		var joinModal = $('#join-modal'),
4740			approval = $(this).attr('data-approval'),
4741			input_data = {};
4742
4743		if($(this).closest('#join-modal-preview').length != 0) {
4744			$(this).showModalFlat('INFORMATION', $.lang[LANG]['manager.check.no-support.render-mode'], true, false, '', 'ok');
4745			return false; 
4746		}
4747
4748		joinModal.find('.form-group').each(function(i) { 
4749			var inputEL = $(this).find('input.form-control'),
4750				errorEL = $(this).find('.error'),
4751				field 	= inputEL.attr('id').trim().replace(/input-/,''),
4752				val		= inputEL.val(), 
4753				optional = $(this).hasClass('optional'),
4754				empty_class = (optional && val.trim().length == 0) ? 'empty' : '',
4755				error_str =   (optional && val.trim().length == 0) ? $.lang[LANG]['manager.check.required.message'] : '';
4756
4757			if(!error_str && val.trim().length > 0) {
4758				switch(field) {
4759					case 'password-checked': 
4760						if(joinModal.find('#input-password').val().trim() != val.trim()) {
4761							error_str = $.lang[LANG]['siteum.regexp.pw.invalid'];
4762						}
4763						break;
4764
4765					default:
4766						if(typeof  COLLECTION_REGEX[field] != 'undefined' &&  COLLECTION_REGEX[field]) {
4767							var pattern = COLLECTION_REGEX[field]['pattern_j'],
4768								reg = new RegExp(pattern);
4769							if(!reg.test(val)) error_str = COLLECTION_REGEX[field]['error'];
4770						}
4771						break;
4772				}
4773			}
4774
4775
4776			if(error_str.length > 0) {
4777				if(errorEL.length > 0) errorEL.text(error_str);
4778				else $(this).append('<span class="error ' + empty_class + '">' + error_str + '</span>');
4779
4780				if(joinModal.find('.focus').length == 0) inputEL.focus();
4781			} else {
4782				errorEL.remove();
4783				if(field == 'id') val = val.toLowerCase();
4784				if(field == 'password') val = hex_md5(val);
4785				if(field == 'email') val = val.toLowerCase();
4786
4787				if(field != 'password-checked') input_data[field] = val;
4788			}
4789
4790			input_data['wr_key'] = $("#wr_key").val();
4791		});
4792
4793		if(!joinModal.find('.kcaptcha-wrap').hasClass('hide')) {
4794			var captcha = joinModal.find('#wr_key'),
4795				val = captcha.val(),
4796				captcha_error = captcha.next('label.error'),
4797				error_str = '';
4798
4799			if( val.trim().length == 0 ) {
4800				error_str = $.lang[LANG]['manager.join.regexp.captcha'];
4801			} else if( val && (Base64.encode(val.trim()) != md5_norobot_key)) {
4802				error_str = $.lang[LANG]['manager.join.regexp.captcha.wrong'];
4803			} 
4804
4805			if( error_str.length > 0 ) {
4806				if(captcha_error.length > 0) captcha_error.text(error_str);
4807				else captcha.after('<label class="error">' +  error_str + '</label>');
4808				
4809				if(joinModal.find('.focus').length == 0) captcha.focus();
4810			} else {
4811				captcha_error.remove();
4812			}
4813		}
4814
4815
4816		if(joinModal.find('.error').length == 0) {
4817
4818			var sid = joinModal.attr('data-sid');
4819			$.post('/umember/join/update', { sid : sid, data : JSON.stringify(input_data) }, function(data) {
4820				if(typeof data.error != 'undefined' && data.error) {
4821					$.each(data.error, function(key,str) {
4822						if(joinModal.find('#input-'+key).length > 0 ) {
4823							joinModal.find('#input-'+key).focus();
4824							joinModal.find('#input-'+key).closest('.form-group').append('<span class="error">' + str + '</span>');
4825						} else { alert(str,'/manager/member'); return false; }
4826					});
4827					if(joinModal.find('.error').length > 0) return false;
4828				}
4829				
4830				if(typeof userSiteJoinCallback == 'function')
4831			    			userSiteJoinCallback();
4832			    		
4833				var okModal = $(this).showModalFlat('INFORMATION', $.lang[LANG]['manager.join.success.'+approval], true, false, '', $.lang[LANG]['config.close']);
4834				$.umember.joinModalInit();
4835				joinModal.modal('hide');
4836			},'json');
4837
4838		}
4839
4840
4841	});
4842
4843
4844	$('.view-join-textarea').live('click', function() {
4845		var sid = $(this).closest('.modal-default').attr('data-sid'),
4846			type = $(this).attr('data-type').replace(/-/gi,'_');
4847
4848		$.post('/umember/get/type/join', { sid : sid, field : type }, function(data) {
4849			if(typeof data.error != 'undefined' && data.error) {
4850				alert(data.error);
4851				return false;
4852			}
4853
4854			$('#join-textarea').html(data);
4855			if($('#join-textarea').css('display') == 'none') $('#join-textarea').fadeIn();
4856
4857		}, 'json');
4858
4859	});
4860
4861
4862	$('#uLogin').live('click', function() {
4863		var loginModal = $('#login-modal'),
4864			input_data = {};
4865
4866		loginModal.find('.form-group').each(function(i) { 
4867			var inputEL = $(this).find('input.form-control'),
4868				errorEL = $(this).find('.error'),
4869				field 	= inputEL.attr('id').trim().replace(/input-/,''),
4870				val		= inputEL.val(),
4871				error_str = (val.trim().length == 0) ? $.lang[LANG]['siteum.regexp.'+field+'.input'] : '';
4872
4873			if(error_str.length > 0 ) {
4874				if(errorEL.length > 0) errorEL.text(error_str);
4875				else $(this).append('<span class="error">' + error_str + '</span>');
4876
4877				if(loginModal.find('.focus').length == 0) inputEL.focus();
4878			} else {
4879				errorEL.remove();
4880				if(field == 'id') val = val.trim().toLowerCase();
4881				if(field == 'password') val = hex_md5(val);
4882				input_data[field] = val;
4883			}
4884		});
4885
4886		if(loginModal.find('.error').length == 0) {
4887
4888			var sid = loginModal.attr('data-sid');
4889			$.post('/umember/login/in', { sid : sid, data : JSON.stringify(input_data) }, function(data) {
4890
4891				if(typeof data.error != 'undefined' && data.error) {
4892					$.each(data.error, function(key,str) {
4893						if(loginModal.find('#input-'+key).length > 0 ) {
4894							loginModal.find('#input-'+key).closest('.form-group').append('<span class="error">' + str + '</span>');
4895						} else { alert(str,'/manager/member'); return false; }
4896					});
4897					if(loginModal.find('.error').length > 0) return false;
4898				}
4899
4900				$.umember.loginModalInit();
4901				$.umember.init();
4902				loginModal.modal('hide');
4903
4904				if(data.member.check_login) {
4905					if(typeof data.ss_url != 'undefined' && data.ss_url) {
4906						$.each(data.ss_url, function(i,url) {
4907							$('.dsgn-body').after('<img class="auth-img" src="' + url + '">');
4908						});
4909					}
4910
4911					if(typeof data.ga_uid != 'undefined' && data.ga_uid) {
4912						localStorage.setItem('googleAnalyticsUID'+sid, data.ga_uid);
4913					}
4914				}
4915
4916				if($('.menu-lock-block').length > 0 || $('.forum-view').length > 0) location.reload(); 
4917				if($('.element[data-type="latest"]').find('.latest-table-loop').hasClass('latest-table-empty')) location.reload();
4918				if($('.element[data-type="forum"]').length > 0) {
4919					if( 
4920						$('.element[data-type="forum"]').find('.tpl-forum-list-title[data-option="S"]').length > 0 ||
4921						$('.element[data-type="forum"]').find('.container .table tr > td[colspan="10"]').length > 0 ||
4922						$('.element[data-type="forum"]').find('.tpl-forum-write:contains(login)').length > 0 
4923					) location.reload();
4924				}
4925
4926				$('.gallery-item').each(function () {
4927					if ($(this).hasClass('nonePrice')) {
4928						location.reload();
4929					}
4930				});
4931
4932			},'json');
4933
4934		}
4935
4936	});
4937
4938	$('#uForgotID').live('click', function() {
4939		var forgotIDModal = $('#forgotid-modal'),
4940			input_data = '';
4941
4942		var groupEL = forgotIDModal.find('.form-group'),
4943			errorEL = groupEL.find('.error'),
4944			val		= forgotIDModal.find('input.form-control').val(),
4945			regexp = /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
4946			error_str = (val.trim().length == 0) ? $.lang[LANG]['siteum.regexp.email.input'] : '';
4947		
4948		if(error_str.length == 0 &&  !regexp.test(val)) {
4949			error_str = $.lang[LANG]['siteum.regexp.check.email'];
4950		}
4951
4952		if(error_str.length > 0 ) {
4953			if(errorEL.length > 0) errorEL.text(error_str);
4954			else groupEL.append('<span class="error">' + error_str + '</span>');
4955			
4956			groupEL.find('input').focus();
4957		} else {
4958			errorEL.remove();
4959			input_data = val.toLowerCase();
4960		}
4961
4962		if(forgotIDModal.find('.error').length == 0) {
4963
4964			$.post('/umember/password/forgot', { fn:'id', email:input_data }, function(data) {
4965				if(typeof data.error != 'undefined' && data.error) {
4966					$.each(data.error, function(key,str) {
4967						if(forgotIDModal.find('#input-'+key).length > 0 ) {
4968							forgotIDModal.find('#input-'+key).closest('.form-group').append('<span class="error">' + str + '</span>');
4969							forgotIDModal.find('#input-'+key).focus();
4970						} else { return false; }
4971					});
4972					if(forgotIDModal.find('.error').length > 0) return false;
4973				}
4974
4975				forgotIDModal.find('input.form-control').val('');
4976				var num = ((data.uid.length/3)*2).toFixed(0),
4977					uid = data.uid.substr(0,num);
4978				for(var i=0; i<(data.uid.length-num); i++) {
4979					uid += '*';
4980				}
4981				forgotIDModal.find('.modal-body').children(':not(.forgot-id-result)').css({'opacity':0.4});
4982				forgotIDModal.find('.modal-footer').children('button').css({'opacity':0.4, 'pointer-events':'none'});
4983				forgotIDModal.find('.modal-body').find('.forgot-id-result').text(uid);
4984
4985			},'json');
4986
4987		}
4988
4989	});
4990
4991	$('#uForgotPW').live('click', function() {
4992		var forgotPWModal = $('#forgotpw-modal'),
4993			input_data = {};
4994
4995		forgotPWModal.find('.form-group').each(function(i) { 
4996			var inputEL = $(this).find('input.form-control'),
4997				errorEL = $(this).find('.error'),
4998				field 	= inputEL.attr('id').trim().replace(/input-/,''),
4999				val		= inputEL.val(),
5000				regexp = /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
5001				error_str = (val.trim().length == 0) ? $.lang[LANG]['siteum.regexp.'+field+'.input'] : '';
5002			
5003			if(error_str.length == 0 &&  field == 'email' && !regexp.test(val)) {
5004				error_str = $.lang[LANG]['siteum.regexp.check.email'];
5005			}
5006
5007			if(error_str.length > 0 ) {
5008				if(errorEL.length > 0) errorEL.text(error_str);
5009				else $(this).append('<span class="error">' + error_str + '</span>');
5010
5011				if(forgotPWModal.find('.focus').length == 0) inputEL.closest('.form-group').addClass('focus').find('input').focus();
5012			} else {
5013				errorEL.remove();
5014				input_data[field] = val.toLowerCase();
5015			}
5016		});
5017
5018		if(forgotPWModal.find('.error').length == 0) {
5019
5020			$.post('/umember/password/forgot', { fn:'pw', uid:input_data['id'], email:input_data['email'] }, function(data) {
5021				if(typeof data.error != 'undefined' && data.error) {
5022					$.each(data.error, function(key,str) {
5023						if(forgotPWModal.find('#input-'+key).length > 0 ) {
5024							forgotPWModal.find('#input-'+key).closest('.form-group').append('<span class="error">' + str + '</span>');
5025							forgotPWModal.find('#input-'+key).focus();
5026						} else { return false; }
5027					});
5028					if(forgotPWModal.find('.error').length > 0) return false;
5029				}
5030				forgotPWModal.find('input.form-control').val('');
5031				forgotPWModal.modal('hide');
5032
5033				var modal = $(this).showModalFlat('INFORMATION', data.result, true, false, '', 'ok');
5034				// var modal = $(this).showModalFlat('INFORMATION', '<h3>이메일 발송 완료!</h3><p>비밀번호 재설정 링크 확인 및 변경을 위한 이메일을 확인하세요.</p>', true, false, '', 'ok');
5035
5036			},'json');
5037
5038		}
5039
5040	});
5041
5042
5043
5044	/* [Fixed menu link] Click*/
5045	$(` .siteUM .join, 
5046		.siteUM .login, 
5047		.siteUM .logout, 
5048		.siteUM .forgot-id, 
5049		.siteUM .forgot-pw, 
5050		.siteUM .dashboard, 
5051		.siteUM .mypage, 
5052		.siteUM-dmenu-wrap .mypage, 
5053		.siteUM-dmenu-wrap .logout, 
5054		.cl-fixed-menu#fixed-menu .logout.cl-umMenu,
5055		.cl-fixnav-item.loginout a.login,
5056		.cl-fixnav-item.loginout a.logout,
5057		.cl-nav .clnav-mobile-btn.mypage .cl-fixsubnav-item > a.dashboard,
5058		.cl-nav .clnav-mobile-btn.mypage .cl-fixsubnav-item > a.logout,
5059		.clnav-sidemobile .section-area.user > .login,
5060		.clnav-sidemobile .section-area.user > .logout,
5061		.clnav-sidemobile .cl-fixsubnav-item > a.logout,
5062		#mobile-nav .dashboard
5063	`).live({
5064		click: function(e) {
5065			e.preventDefault();
5066
5067			if(typeof PAGE_MODE != 'undefined' && PAGE_MODE == 's' && property.SITEFIXEDLANG && property.SITEFIXEDLANG != LANG) {
5068				LANG = property.SITEFIXEDLANG;
5069			}
5070			var sid = (typeof SID != 'undefined' && SID) ? SID : property.SID;
5071
5072
5073			var possible_page = ['s', 'um'];
5074			if(typeof PAGE_MODE != 'undefined' && PAGE_MODE && $.inArray(PAGE_MODE,possible_page) == -1) {
5075				var str = (PAGE_MODE == 'r') ? $.lang[LANG]['manager.check.no-support.render-mode'] : $.lang[LANG]['manager.check.no-support.config-mode'];
5076				if($.clnav.check()) str = '';
5077				if(str != '') $(this).showModalFlat('INFORMATION',str,true,false,'','ok');
5078				return false;
5079			} else {
5080
5081				var checkUAdminMode = ($('header').hasClass('_admin')) ? true : false,
5082					s_validtype = (typeof VALIDTYPE != 'undefined' && VALIDTYPE) ? VALIDTYPE : ((typeof property != 'undefined' && property) ? property.VALIDTYPE : ''),
5083					s_siteum = (typeof SITEUM != 'undefined' && SITEUM) ? SITEUM : ((typeof property != 'undefined' && property) ? property.SITEUM : -1),
5084					checkShoppingUM = (!checkUAdminMode && s_validtype == 'SM') ? true : false,
5085					service = (typeof SERVICE == 'undefined') ? ((typeof property == 'undefined') ? '' : property.SERVICE) : SERVICE,
5086					checkGabia = (service.indexOf('gabia') > -1) ? true : false;
5087
5088				if($(this).hasClass('join')) {
5089
5090					var mode = (typeof $(this).attr('data-preview') == 'undefined') ? '' : 'preview';
5091					if(mode == 'preview') {
5092						var checkUadmin = ($('.mng-dashboard').hasClass('_admin')) ? true : false,
5093							check_url = (checkUadmin) ? '/_admin/dashboard/checkDomainConnect' : '/dashboard/checkDomainConnect',
5094							domains_flag = false;
5095					    $.ajax({
5096					        url: check_url,
5097					        type:'post',
5098					        dataType:'json',
5099					        data:{'sid' : SID},
5100					        success:function(data) {
5101
5102					        	var domain = sid + '.' + getServiceHost(location.host);
5103					        	if(data.domains_active_list.length) {
5104					        		domain = data.domains_active_list[0].zone_domain;
5105					        	} else if(checkUadmin) {
5106					        		domain = getServiceHost(location.host);
5107					        	}
5108					        	
5109					        	var http_str = (checkGabia) ? 'http://' : '//';
5110								window.open(http_str + domain + '/_register/preview', '_blank');
5111					        }
5112					    });
5113					} else {
5114						location.href = '/_register';
5115						return false;
5116					}
5117
5118					/*
5119					if(checkShoppingUM) {
5120						location.href = '/_register';
5121						return false;
5122					}
5123
5124					var mode = (typeof $(this).attr('data-preview') == 'undefined') ? '' : 'preview';
5125					var joinModal = $.umember.showJoinModal(sid,mode);
5126					*/
5127				} else if($(this).hasClass('login')) {
5128
5129					location.href = (location.port) ? '/_login' : 'https://'+location.host+'/_login';
5130					return false;
5131					/*
5132					if($('#join-modal-preview').length > 0) {
5133			            $(this).showModalFlat('INFORMATION', $.lang[LANG]['manager.check.no-support.render-mode'], true, false, '', 'ok');
5134						return false;
5135					}
5136
5137					if($('header').hasClass('_admin')) { //goto url -> uadmin login page
5138						if($(this).closest('#join-modal-preview').length >0) {
5139				            $(this).showModalFlat('INFORMATION', $.lang[LANG]['manager.check.no-support.render-mode'], true, false, '', 'ok');
5140							return false;
5141						}
5142						if(location.pathname == '/_admin') $('.flat-modal[class*="mng-"] .modal').modal('hide');
5143						else location.replace('/_admin');
5144						return false;
5145					}
5146
5147					if(checkShoppingUM) {
5148						location.href = (location.port) ? '/_login' : 'https://'+location.host+'/_login';
5149						return false;
5150					}
5151
5152					if(typeof s_siteum != 'undefined' && s_siteum > 0)  var loginModal = $.umember.showLoginModal(sid);
5153					else return false;
5154					*/
5155				} else if($(this).hasClass('forgot-id')) {
5156					/*
5157					var forgotIDModal = $.umember.showForgotIDModal(sid);
5158					*/
5159				} else if($(this).hasClass('forgot-pw')) {
5160					/*
5161					var forgotPWModal = $.umember.showForgotPWModal(sid);
5162					*/
5163				} else if($(this).hasClass('logout')) {
5164					$.getJSON('/umember/login/out', function(r) {
5165						if($.cookie('cert_popup') !== undefined) {
5166							$.removeCookie('cert_popup', true, { path: '/', expires: 12 * 60 * 60 * 1000 });
5167						}
5168						
5169			            if(typeof sid!='undefined' && sid) {
5170			            	if($.cookie('domainSet-next-'+sid) !== undefined) $.removeCookie('domainSet-next-'+sid, { path: '/' });  
5171			            }
5172
5173						var load_url =  (typeof r.url != 'undefined' && r.url) ? r.url : '/';
5174						if($('header').hasClass('_admin')) location.href = load_url;
5175						else if(s_validtype == 'SM')  location.href = load_url;
5176						else location.reload();
5177					},'json');
5178				} else if($(this).hasClass('dashboard')) {
5179					$.getJSON('/umember/goDashboard', function(r) {
5180						if(typeof r.url != 'undefined' && r.url) location.href = r.url;
5181					},'json');
5182				} else if($(this).hasClass('mypage')) {
5183					if(checkUAdminMode) {
5184							location.replace('/_myinfo');			
5185					} else {
5186						if(s_validtype == 'BN') {
5187							location.replace('/_mypost');
5188						} else {
5189							location.replace('/_mypage');
5190						}
5191					}
5192
5193					return false;
5194					/*
5195					if(checkShoppingUM && $(this).attr('href') == 'javascript:;') {
5196						location.replace('/_mypage');
5197						return false;
5198					}
5199
5200					var mypageModal = $.umember.showMypageModal(sid);
5201					*/
5202				}
5203			}
5204
5205		}
5206	});
5207
5208
5209	/*************************************************************************************************************************************member-config page END*/
5210
5211
5212
5213	/*************************************************************************************************************************************member-list page START*/
5214	$('.mng-settings.memberlist[data-type="member-list"] .mng-selectboxlist select.form-control').live('change',function() {
5215		// var sfl_type = $(this).attr('id').replace('sfl_',''),
5216		// 	val = $(this).val();
5217		// location.replace('/manager/member/list/page/1/'+sfl_type+'/'+val);
5218
5219		var url_str = ($('header').hasClass('_admin')) ?  '/_admin/member/list' : '/manager/member/list',
5220			sfl_sort = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_sort').val(),
5221			sfl_view = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_view').val(),
5222			stx =  $(this).parents('.mng-list').find('.mng-search-box').find('#stx').val();
5223
5224		location.replace(url_str+'/page/1/sort/'+sfl_sort+'/view/'+sfl_view);
5225	});
5226
5227	$('.mng-settings.memberlist[data-type="member-list"] .mng-search-box .search-btn').live('click',function(e) {
5228		var url_str = ($('header').hasClass('_admin')) ?  '/_admin/member/list' : '/manager/member/list',
5229			sfl_sort = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_sort').val(),
5230			sfl_view = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_view').val(),
5231			stx =  $(this).parents('.mng-search-box').find('#stx').val();
5232
5233		if(checkEmojis(stx)) {
5234			e.preventDefault();
5235			errorEmojisModal();
5236			return false;
5237		}
5238
5239		setSiteLogs('um.list','search',{'stx':stx},'um.list');
5240
5241		if(stx.length > 0) stx = '/stx/'+stx;
5242		location.replace(url_str+'/page/1/sort/'+sfl_sort+'/view/'+sfl_view+stx);
5243	});
5244
5245    $('.mng-settings[data-type="member-list"] .mng-sortBtn').live('click',function() {
5246    	if ($('.mng-sortBtn').hasClass('active') === true) {
5247			$('.mng-sortBtn').removeClass('active');
5248			$('.mng-sortlistWrap').hide();	
5249    	} else {
5250			$('.mng-sortBtn').addClass('active');
5251			$('.mng-sortlistWrap').show();
5252		}
5253    });
5254    
5255    $('body').click(function(e){
5256    	if($(e.target).parents('.mng-sortWrap').length==0) {
5257    		$('.mng-sortBtn').removeClass("active");
5258			$('.mng-sortlistWrap').hide();
5259    	}
5260    });
5261
5262	$('.member-message-btn').live('click', function() {
5263		if($(this).hasClass('member_disabled')) {
5264			siteNotice('manager');
5265			return false;
5266		}
5267		var check_data = getMemberListCheckData($(this)),
5268			mng_settings_el = $(this).closest('.mng-settings');
5269
5270		if( typeof check_data.error != 'undefined' && check_data.error) {
5271			$(this).showModalFlat('INFORMATION', check_data.error, true, false, '', 'ok');
5272			return false;
5273		}
5274
5275		var first_name = (LANG == 'en' && check_data.count > 0) ? '' : '<span class="addressee-name">' + check_data.name + '</span> ' + ((check_data.count == 0) ? $.lang[LANG]['manager.list.member.str'] : ''),
5276			others_name = (LANG == 'en' || check_data.count < 1) ? '' :  $.lang[LANG]['manager.list.member.selected.multi.1'] + '\
5277						<span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">\
5278						' + check_data.count + '</span>' + $.lang[LANG]['manager.list.member.selected.multi.2'],
5279			last_name = (LANG == 'en' && check_data.count > 0) ? $.lang[LANG]['manager.list.member.selected.multi.3'] : '',
5280			selected_str = $.lang[LANG]['manager.list.member.message.txt.1'] + first_name + others_name + last_name + $.lang[LANG]['manager.list.member.message.txt.2'];
5281
5282		var modal_content = '\
5283			<div class="mng-modal-body message-modal">\
5284				<p class="desc">\
5285					' + selected_str + '\
5286				</p>\
5287				<div class="form-group">\
5288					<input type="text" class="form-control" id="message-title" placeholder="제목" />\
5289				</div>\
5290				<div class="form-group clearfix">\
5291					<textarea class="form-control" name="" id="message-content" 
5291cols="30" rows="2" placeholder="내용"></textarea>\
5292					<label for="message-content"><span class="write-count">0</span>/1000</label>\
5293				</div>\
5294				<div class="form-group">\
5295					<div class="btn-wrap">\
5296						<span class="btn btn-xs btn-white"><i class="fa fa-sticky-note-o" aria-hidden="true"></i>파일첨부</span>\
5297					</div>\
5298				</div>\
5299			</div>\
5300		';
5301
5302		$('#message-title, #message-content').live('keyup', function() {
5303			var type = ($(this).attr('id').match(/title/) !== null) ? 'title' : 'content',
5304				str = $(this).val();
5305
5306			if(str.length > 0) $(this).closest('.form-group').find('.mng-error').remove();
5307			$(this).next('label').find('.write-count').text(str.length);
5308			if(str.length > 1000 && type == 'content') {
5309				$(this).val($(this).val().substring(0, 1000));
5310			}
5311		});
5312
5313		var message_modal = $(this).showModalFlat('SEND MESSAGE', modal_content, true, true, function() {
5314			var message_title = $('#message-title').val(),
5315				message_content = $('#message-content').val();
5316
5317			if(message_title.length == 0) {
5318				$('#message-title').focus();
5319				$('#message-title').closest('.form-group').append('<div class="mng-error">제목을 입력하세요</div>');
5320				return false;
5321			}
5322			if(message_content.length == 0) {
5323				$('#message-content').focus();
5324				$('#message-content').closest('.form-group').append('<div class="mng-error">내용을 입력하세요</div>');
5325				return false;
5326			}
5327			//메시지 전송 기능 작업.
5328
5329			message_modal.modal('hide');
5330			mngShowToast('check', '전송 완료', mng_settings_el);
5331
5332		}, 'cancel', 'send', 'w480');
5333	});
5334
5335
5336
5337
5338	/*$('.member-sms-btn').live('click', function() {
5339		var check_data = getMemberListCheckData($(this)),
5340			mng_settings_el = $(this).closest('.mng-settings');
5341
5342		if( typeof check_data.error != 'undefined' && check_data.error) {
5343			$(this).showModalFlat('INFORMATION', check_data.error, true, false, '', 'ok');
5344			return false;
5345		}
5346
5347		var others_str = (check_data.count<1) ? '' : ' 외 <span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">' + check_data.count + '</span> 명';
5348		var modal_content = '\
5349			<div class="mng-modal-body sms-modal">\
5350				<p class="desc">\
5351					<span class="addressee-name">' + check_data.name + '</span> \
5352					' + others_str + ' 에게 SMS를 보냅니다.\
5353				</p>\
5354				<div class="sms-recharge-btn-wrap">\
5355					<div>잔여 SMS <span class="sms-count point">8</span>건 </div>\
5356					<span class="sms-recharge-btn btn btn-xs btn-white">충전하기</span>\
5357				</div>\
5358				<div class="form-group">\
5359					<input type="text" class="form-control" id="sms-title" placeholder="보내는 번호" />\
5360				</div>\
5361				<div class="form-group clearfix">\
5362					<textarea class="form-control" name="" id="sms-content" cols="30" rows="2" placeholder="내용"></textarea>\
5363					<label for="sms-content"><span class="write-count">0</span>/90 Byte</label>\
5364					<span class="info">90바이트가 초과될 경우 MS로 전환되어 3건의 SMS가 차감됩니다.</span>\
5365				</div>\
5366				<div class="form-group clearfix">\
5367					<div class="btn-wrap pull-left">\
5368						<span class="btn btn-xs btn-white"><i class="fa fa-sticky-note-o" aria-hidden="true"></i>파일첨부</span>\
5369					</div>\
5370					<div class="precautions pull-right">\
5371						<span data-toggle="tooltip" data-placement="right" data-html="true" data-original-title="' + $.lang[LANG]['manager.list.sms.precautions'] + '"><i class="fa fa-info-circle"></i> 광고성 SMS 전송 시 주의사항</span>\
5372					</div>\
5373				</div>\
5374			</div>\
5375		';
5376
5377		$('#sms-title, #sms-content').live('keyup', function() {
5378			var type = ($(this).attr('id').match(/title/) !== null) ? 'title' : 'content',
5379				str = $(this).val(),
5380				str_len = $(this).val().length,
5381				cbyte = 0,
5382				clen = 0,
5383				maxInputByte = 90;
5384
5385			if(str.length > 0) $(this).closest('.form-group').find('.mng-error').remove();
5386
5387			if(type == 'content') {
5388				for(var i=0; i<str_len; i++) {
5389					var is_one_char = $(this).val().charAt(i);
5390					if(escape(is_one_char).length > 4) {
5391						cbyte += 2; //korean 1 char == 2byte
5392					} else {
5393						cbyte++;
5394					}
5395
5396					if(cbyte <= maxInputByte) {
5397						clen = i + 1;
5398					}
5399				}
5400				$(this).next('label').find('.write-count').text(parseInt(cbyte));
5401				if(parseInt(cbyte) > parseInt(maxInputByte)) {
5402					$(this).val($(this).val().substring(0, clen));
5403					$(this).next('label').find('.write-count').text(parseInt(maxInputByte));
5404				}
5405			}
5406		});
5407
5408		var sms_modal = $(this).showModalFlat('SEND SMS', modal_content, true, true, function() {
5409			var sms_title = $('#sms-title').val(),
5410				sms_content = $('#sms-content').val();
5411
5412			if(sms_title.length == 0) {
5413				$('#sms-title').focus();
5414				$('#sms-title').closest('.form-group').append('<div class="mng-error">보내실 번호를 입력하세요</div>');
5415				return false;
5416			}
5417			if(sms_content.length == 0) {
5418				$('#sms-content').focus();
5419				$('#sms-content').closest('.form-group').append('<div class="mng-error">내용을 입력하세요</div>');
5420				return false;
5421			}
5422			//SMS 전송 기능 작업.
5423
5424
5425			sms_modal.modal('hide');
5426			mngShowToast('check', '전송 완료', mng_settings_el);
5427
5428		}, 'cancel', 'send', 'w480');
5429
5430		$('.sms-recharge-btn').click(function() {
5431			smsRechargeModal(SID);
5432		});
5433
5434	});/*sms*/
5435
5436
5437	/*$('.member-level-btn .dropdown-item').live('click', function() {
5438		var level = parseInt($(this).text().trim()),
5439			check_data = getMemberListCheckData($(this)),
5440			mng_settings_el = $(this).closest('.mng-settings');
5441
5442		if( typeof check_data.error != 'undefined' && check_data.error) {
5443			$(this).showModalFlat('INFORMATION', check_data.error, true, false, '', 'ok');
5444			return false;
5445		}
5446
5447		var others_str = (check_data.count<1) ? '' : ' 외 <span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">' + check_data.count + '</span> 명';
5448		var modal_content = '\
5449			<div class="mng-modal-body level-modal">\
5450				<p class="addressee-wrap">\
5451					<span class="addressee-name">' + check_data.name + '</span> \
5452					' + others_str + ' 의 회원 레벨을 <br><span class="point">' + level + '</span> (으)로 적용하시겠습니까?\
5453				</p>\
5454			</div>\
5455		';
5456
5457		var level_modal = $(this).showModalFlat('회원 등급 변경', modal_content, true, true, function() {
5458			var uids = check_data.ids;ㅈ
5459
5460			$.ajax({
5461				type: 'POST',
5462				url: '/umember/update/type/level',
5463				data: { sid : SID, uids : uids, val : level },
5464				dataType: 'json',
5465				async: true,
5466				success: function(data) {
5467					if(typeof data.error != 'undefined' && data.error) {
5468						// alert(data.error);
5469						if(level_modal.find('.error').length == 0) level_modal.find('.level-modal').append('<span class="error">' + data.error + '</span>');
5470						else level_modal.find('.level-modal').find('.error').text(data.error);
5471						return false;
5472					}
5473
5474					$.each(uids, function(i,v) {
5475						$(mng_settings_el).find('.mng-list table tbody tr[data-uid="'+v+'"]').find('.level').text(level);
5476					});
5477
5478					level_modal.modal('hide');
5479					mngShowToast('check', '저장완료', mng_settings_el);
5480				}
5481			});
5482
5483
5484		});
5485
5486	});/*level-all*/
5487
5488
5489	$('#member-level-select').live('change', function() {
5490		var conf = confirm("선택하신 회원의 레벨을 변경하시겠습니까?");
5491		if(conf){
5492			var uid = $(this).closest('tr').attr('data-uid')
5493			var level = $(this).val();
5494
5495			if(typeof uid == 'undefined' || !uid) {
5496				window.location.reload();
5497				return false;
5498			}
5499			
5500			$.ajax({
5501				type: 'POST',
5502				url: '/umember/update/type/level',
5503				data: { sid : SID, uids : uid, val : level },
5504				dataType: 'json',
5505				async: true,
5506				success: function(data) {
5507					if(typeof data.error != 'undefined' && data.error) {
5508						alert(data.error);
5509						return false;
5510					}
5511					
5512					// setSiteLogs('um.edit','level.one',{'id':uid,'level':level},'um.list');
5513				}
5514			});
5515		}else{
5516			window.location.reload();
5517			return false;
5518		}
5519		
5520	});
5521
5522
5523	$('.member-leave-btn').live('click', function() {
5524		if($(this).hasClass('member_disabled')) {
5525			siteNotice('manager');
5526			return false;
5527		}
5528		var check_data = getMemberListCheckData($(this)),
5529			mng_settings_el = $(this).closest('.mng-settings');
5530
5531		if( typeof check_data.error != 'undefined' && check_data.error) {
5532            $(this).showModalFlat($.lang[LANG]['manager.list.member.selected.empty.title'], check_data.error,true,false,'','ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0 cl-member-list-block');
5533			return false;
5534		}
5535
5536		var first_name = (LANG == 'en' && check_data.count > 0) ? '' : '<span class="addressee-name">' + check_data.name + '</span> ' + ((check_data.count == 0) ? $.lang[LANG]['manager.list.member.str'] : ''),
5537			others_name = (LANG == 'en' || check_data.count < 1) ? '' :  $.lang[LANG]['manager.list.member.selected.multi.1'] + '\
5538						<span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">\
5539						' + check_data.count + '</span>' + $.lang[LANG]['manager.list.member.selected.multi.2'],
5540			last_name = (LANG == 'en' && check_data.count > 0) ? $.lang[LANG]['manager.list.member.selected.multi.3'] : '',
5541			selected_str = $.lang[LANG]['manager.list.member.leave.txt.1'] + first_name + others_name + last_name + $.lang[LANG]['manager.list.member.leave.txt.2'];
5542
5543		var modal_content = '\
5544			<div class="mng-modal-body leave-modal">\
5545				<p class="addressee-wrap">\
5546					' + selected_str + '\
5547				</p>\
5548			</div>\
5549		';
5550
5551		var level_modal = $(this).showModalFlat($.lang[LANG]['manager.list.member.leave.title'], modal_content, true, true, function() {
5552			var uids = check_data.ids;
5553
5554			$.ajax({
5555				type: 'POST',
5556				url: '/umember/update/type/leave',
5557				data: { sid : SID, uids : uids, val : 'deny' },
5558				dataType: 'json',
5559				async: true,
5560				success: function(data) {
5561					if(typeof data.error != 'undefined' && data.error) {
5562						// alert(data.error);
5563						if(level_modal.find('.error').length == 0) level_modal.find('.leave-modal').append('<span class="error">' + data.error + '</span>');
5564						else level_modal.find('.leave-modal').find('.error').text(data.error);
5565						return false;
5566					} else {
5567						level_modal.modal('hide');
5568						window.location.reload();
5569					}
5570
5571				}
5572			});
5573
5574
5575		}, 'cancel','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
5576
5577	});
5578
5579
5580	$('.member-block-btn').live('click', function() {
5581		if($(this).hasClass('member_disabled')) {
5582			siteNotice('manager');
5583			return false;
5584		}
5585		var check_data = getMemberListCheckData($(this)),
5586			mng_settings_el = $(this).closest('.mng-settings');
5587
5588		if( typeof check_data.error != 'undefined' && check_data.error) {
5589            $(this).showModalFlat($.lang[LANG]['manager.list.member.selected.empty.title'], check_data.error,true,false,'','ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0 cl-member-list-block');
5590			return false;
5591		}
5592
5593		var first_name = (LANG == 'en' && check_data.count > 0) ? '' : '<span class="addressee-name">' + check_data.name + '</span> ' + ((check_data.count == 0) ? $.lang[LANG]['manager.list.member.str'] : ''),
5594			others_name = (LANG == 'en' || check_data.count < 1) ? '' :  $.lang[LANG]['manager.list.member.selected.multi.1'] + '\
5595						<span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">\
5596						' + check_data.count + '</span>' + $.lang[LANG]['manager.list.member.selected.multi.2'],
5597			last_name = (LANG == 'en' && check_data.count > 0) ? $.lang[LANG]['manager.list.member.selected.multi.3'] : '',
5598			selected_str = $.lang[LANG]['manager.list.member.block.txt.1'] + first_name + others_name + last_name + $.lang[LANG]['manager.list.member.block.txt.2'];
5599
5600		var modal_content = '\
5601			<div class="mng-modal-body block-modal">\
5602				<p class="addressee-wrap">\
5603					' + selected_str + '\
5604				</p>\
5605			</div>\
5606		';
5607
5608		var block_modal = $(this).showModalFlat($.lang[LANG]['manager.list.member.block.title'], modal_content, true, true, function() {
5609			var val = check_data.ids;
5610
5611			$.ajax({
5612				type: 'POST',
5613				url: '/umember/set/type/block',
5614				data: { sid : SID, key : 'id', val : val },
5615				dataType: 'json',
5616				async: true,
5617				success: function(data) {
5618					if(typeof data.error != 'undefined' && data.error) {
5619						// alert(data.error);
5620						if(block_modal.find('.error').length == 0) block_modal.find('.block-modal').append('<span class="error">' + data.error + '</span>');
5621						else block_modal.find('.block-modal').find('.error').text(data.error);
5622						return false;
5623					} else {
5624						block_modal.modal('hide');
5625						window.location.reload();
5626					}
5627				}
5628			});
5629
5630		}, 'cancel','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
5631	});
5632	
5633	let startX, startY;
5634	$('.fullcover-scroll.payment .address-item')
5635	.live('click',function(e){
5636		if( $(e.target).closest('.edit btn-edit-addr').length > 0) {
5637			return;
5638		}
5639		
5640
5641	})
5642	.live('mousedown', function(e) {
5643		startX = e.clientX;
5644		startY = e.clientY;
5645	})
5646	.live('mouseup', function(e) {
5647		const dx = Math.abs(e.clientX - startX);
5648		const dy = Math.abs(e.clientY - startY);
5649
5650		// 드래그가 거의 없었으면 클릭으로 판단
5651		if (dx < 5 && dy < 5) {
5652		// 클릭 동작 수행
5653		$(this).find('input[type="radio"]').prop('checked',true)
5654		//   console.log('클릭됨');
5655		} else {
5656		// 드래그한 것으로 판단하여 무시
5657		console.log('텍스트 선택 감지됨, 클릭 무시');
5658		}
5659	});
5660
5661	$('.adm-member-addr').live('click',function(){
5662		const action = $(this).data('action');
5663		switch (action){
5664			case "adm-edit" : 
5665				getaddrList("manager", false, function(result) {
5666				});
5667			break;
5668		}
5669	});
5670
5671	
5672	// 주소 목록, 기본 주소 설정
5673 	$('.btn-load-addresses, .btn-default-address, .btn-add-addr, .btn-edit-addr,.address-delete').live('click',function(){
5674		//if (!property?.SID || !property?.UMEMBER?.id) return;
5675		
5676		const action = $(this).data('action');
5677		let currentPage =  '';
5678		const elcurPage = $('.btn-load-addresses');		
5679		if(elcurPage.hasClass('mypage')){
5680			currentPage = 'mypage';
5681		} else if (elcurPage.parent().hasClass('smpage-btn')){
5682			currentPage = 'payment';
5683		} else {
5684			currentPage = 'manager';
5685		}
5686
5687		if (!action) return;		
5688 
5689		// 목록 버튼 눌렀을때 > 
5690		// 추가 팝업에서 저장하기 눌렀을떄 
5691		// 기본 주소 설정하기 눌렀을 때
5692		if (action === 'getList') {
5693			getaddrList(currentPage);
5694		} else if (action == "add") {
5695			if ($('.address-item').length <= 14) {				
5696				editAndaddPoppup("N","add",currentPage);
5697			}
5698		} else if (action == "edit") {
5699			editAndaddPoppup("N","edit",currentPage,$(this));
5700		} else if (action =="delete") {
5701			deletePopup(currentPage,$(this));
5702		} else if (action === 'setDefault') {
5703			var seq = $(this).attr('seq');
5704			if(!seq) return;
5705
5706			$.ajax({
5707				type: 'POST',
5708				url: '/umember/get/type/smAddressList',
5709				data: {
5710				sid: property.SID,
5711				uid: property.UMEMBER.id,
5712				seq: seq,
5713				action: 'setDefault'
5714				},
5715				dataType: 'json',
5716				success: function (data) {
5717					
5718					//$addresslist_popup.modal('hide');
5719
5720					if (data?.error) {
5721						alert(data.error);
5722						getaddrList(currentPage);
5723						return;
5724					} else {
5725						//$addresslist_popup.one('hidden.bs.modal', function () {
5726							// setTimeout(function() {
5727							// 	getaddrList(currentPage);
5728							// 	updateAddressUI(data,currentPage);
5729														
5730							// }, '50');
5731								getaddrList(currentPage,true);
5732
5733								if(currentPage == "payment"){
5734									var elSeq = $('.sm-parent').attr('data-smseq');
5735									var elDefault = $('.sm-parent').find('.sm-default-addr').hasClass("hide");
5736
5737									if(!elDefault || elSeq == seq){
5738										updateAddressUI(data,currentPage);
5739									}
5740								} else {
5741									updateAddressUI(data,currentPage);
5742								}
5743						//});
5744					}
5745				}
5746			}); 
5747		}
5748  	});
5749	window.checkNumberPopup = function(el) {
5750		var val = el.val();
5751		el.val(val.replace(/[^0-9]/g,''));
5752	}
5753	// 주소 가져오기 
5754	var getaddrList = function(currentPage,changeHtml = false ) {
5755 		$.ajax({
5756			type: 'POST',
5757			url: '/umember/get/type/smAddressList',
5758			data: {
5759			sid: (typeof property !== 'undefined' && property?.SID) ? property.SID : SID,
5760			uid: (currentPage=='manager') ? $('.memberinfo-modal .member-info-input').val() :  property.UMEMBER.id,
5761			action: 'getList'
5762			},
5763			dataType: 'json',
5764			success: function (data) {
5765				// if(currentPage === "manager" && callback){
5766				// 	callback(data);
5767				// 	return true;
5768				// } 
5769				if (data?.error) {
5770					alert(data.error);
5771					return;
5772				}
5773				if (data.length > 0) {
5774					// 가져온 주소 팝업에 그리기
5775					// console.log(changeHtml);
5776					var changehtm = showList(data, currentPage,changeHtml);
5777					if(changehtm){
5778						// console.log(changehtm);
5779						const $tempDom = $('<div>').html(changehtm); 
5780						const $newItems = $tempDom.find('li.address-item');
5781
5782						const $list = $addresslist_popup.find('ul.address-list');
5783
5784						// 기존 li 제거 후 새 li 삽입
5785						$list.empty().append($newItems);
5786					}
5787					if(data.length >= 15) {
5788						
5789						$('.btn-add-addr').addClass('pointer-none');
5790					}					
5791					
5792				} else {	
5793					// 가져온 주소x 
5794					editAndaddPoppup("Y","add",currentPage);
5795				}
5796
5797			}
5798		});
5799	}
5800	
5801	// 주소 그리기
5802	var showList = function(d,currentPage,changeHtml = false) { 
5803		
5804		if(currentPage == "manager") {
5805			$('.memberinfo-modal').closest('.flat-modal').hide();
5806			$('.memberinfo-modal').closest('.flat-modal').next('.modal-backdrop').hide();
5807		}
5808		var content_li = '';
5809		$.each(d,function(i,v){
5810			const isDefault = v.is_default == 1 ? 'show' : 'hide';
5811			const name = v.to_name;
5812			const alias = v.alias || '';
5813			const aliasel = (v.alias) ? 'open' : 'hide';
5814			const seq = v.seq;			
5815			const tel = v.to_tel;
5816			
5817			
5818			const to_addr1 = v.to_addr1 || '';
5819			let postCode = '';
5820			let addr1 = '';
5821
5822			if (to_addr1.includes('||')) {
5823			const parts = to_addr1.split('||');
5824			postCode = parts[0].trim();
5825			addr1 = parts[1].trim();
5826			} else {
5827			postCode = '';
5828			addr1 = to_addr1.trim();
5829			}
5830
5831			const addr2 = v.to_addr2 || '';
5832			content_li += `
5833			<li class="address-item">
5834				<div class="div1">
5835					<span class="name">${name}</span> 
5836					<span class="tag ${!alias ? 'hide' : ''}" edit-tag="${escape(alias)}">${alias ? '(' + alias + ')' : ''}</span> 
5837					<span class="default ${isDefault}">기본 배송지</span>
5838					<div class="newcheckbox hand">
5839						<div class="newcheckboxSvgRadio">
5840						<label>
5841							<input type="radio" name="temp" value="${seq}"  ${v.is_default == 1 ? 'checked' : ''}>
5842							<svg viewBox="0 0 18 18" width="18" height="18">
5843								<path fill="#dbdcdf" d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 0-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"></path>
5844							</svg>
5845							<svg class="active" viewBox="0 0 18 18" width="18" height="18">
5846								<path fill="#4789e7" d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 0-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"></path>
5847								<circle fill="#4789e7" cx="9" cy="9" r="6"></circle>
5848							</svg>
5849						</laberl>		
5850						</div>
5851					</div>
5852				</div>
5853				<div  class="div2">
5854					<span class="address1 ${!postCode ? 'hide' : ''}" edit-postcode="${postCode}">${postCode ? '[' + postCode + ']' : ''}</span><span class="address2" edit-addr1="${escape(addr1)}" edit-addr2="${escape(addr2)}">${addr1} ${addr2}</span>
5855				</div>
5856				<div class="div3 phone">${tel}</div>
5857				<div class="div4 actions clearfix">
5858					<button class="edit btn-edit-addr" data-action="edit" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" class="address-edit" data-toggle="tooltip" data-placement="top" title="" data-original-title="수정" width="12" height="12"><path d="m11.56.57-.13-.13C11.14.15 10.76 0 10.37 0c-.38 0-.77.15-1.06.44L.75 9 0 12l3-.75 8.56-8.56c.59-.59.59-1.54 0-2.12zm-9.07 9.78-1.11.28.28-1.11 6.58-6.58.84.84-6.59 6.57zm8.36-8.37L9.77 3.06l-.83-.83 1.08-1.08a.487.487 0 0 1 .7 0l.13.13c.2.19.2.51 0 .7z"></path></svg></button><button class=" ${currentPage == "manager" ? 'hide' : ''} delete ${(v.is_default == 1) ? 'hide' : ''}"><svg viewBox="0 0 12 13" width="12" height="13" class="address-delete" data-toggle="tooltip" data-placement="top" title="" data-original-title="삭제" data-action="delete"><path d="M11.01 2H9V0H3v2H0.99 0v1h1v8c0 1.1 0.9 2 2 2h6c1.1 0 2-0.9 2-2V3h1V2H11.01zM4 1h4v1H4V1zM10 11c0 0.55-0.45 1-1 1H3c-0.55 0-1-0.45-1-1V3h1.02H9h1V11z"></path><rect x="4" y="4" width="1" height="7"></rect><rect x="7" y="4" width="1" height="7"></rect></svg></button>
5859					<div data-action="setDefault" seq ="${v.seq}" class="  ${currentPage == "manager" ? 'hide' : ''} btn-default-address ${(v.is_default == 1) ? 'hide': ''}" style="">기본 배송지 설정</div>
5860				</div>
5861			</li>
5862		`;
5863		});
5864
5865		var modal_content =`
5866		<div class="btn-add-addr  ${currentPage == "manager" ? 'hide' : ''}"  data-action="add" >
5867			<div>
5868				<svg viewBox="0 0 15 15" width="15" height="15">
5869					<polygon points="15 7 8 7 8 0 7 0 7 7 0 7 0 8 7 8 7 15 8 15 8 8 15 8 "></polygon>
5870				</svg>		
5871				<span>배송지 추가</span>
5872			</div>
5873		</div>
5874		<ul class="fullcover-scroll address-list ${currentPage}">
5875			${content_li}
5876		</ul>
5877		`		 
5878		if(changeHtml) return content_li;
5879		$addresslist_popup = $(this).showModalFlat("배송지 목록", modal_content, true, (currentPage == "mypage" ||currentPage == "manager" ) ? false : true , function(){
5880			
5881			
5882				// 결제 페이지의 목록 팝업에서 확인 버튼 클릭 시
5883				$("#no-fouc").removeClass("scroll-lock-fullcover-popup");
5884				var seq = $addresslist_popup.find('.address-item input[type="radio"]:checked').attr('value');
5885
5886				$.ajax({
5887					type: 'POST',
5888					url: '/umember/get/type/smAddressList',
5889					data: {
5890					sid: property.SID,
5891					uid: property.UMEMBER.id,
5892					seq:seq,
5893					action: 'getExistAddr',
5894					},
5895					dataType: 'json',
5896					success: function (data) {
5897						if (data?.error) {
5898							alert(data.error);
5899							$addresslist_popup.modal('hide');
5900							getaddrList(currentPage);						
5901							return;
5902						} else {
5903							UpdateelSeq(seq);
5904							updateAddressUI(data,currentPage);
5905							$addresslist_popup.modal('hide');
5906
5907						}
5908					}
5909				});				
5910		},   (currentPage == "payment" ? 'cancel' : 'close' )  , 'config.save', 'cl-cmmodal cl-s-btn w560 cl-p70 cl-p0  addr-list-parents cover fullcover-modal fullcover-modal-scroll  ' + ((currentPage === 'manager') ? "manager" : "") + '   ',true,function(){
5911			$("#no-fouc").removeClass("scroll-lock-fullcover-popup");
5912
5913			if(currentPage == "manager") {
5914				$('.memberinfo-modal').closest('.flat-modal').show();
5915				$('.memberinfo-modal').closest('.flat-modal').next('.modal-backdrop').show();
5916			}
5917		},function(){
5918
5919			// if($addresslist_popup.closest('#flat-modal1').length >0 ){
5920			// 	$addresslist_popup.closest('#flat-modal1').attr('id','flat-modal');
5921			// }
5922
5923		});
5924		
5925		if($("#no-fouc").addClass("scroll-lock-fullcover-popup"));
5926	  
5927		
5928	}
5929	
5930	// 마이페이지 팝업에서 주소를 등록하거나 결제 페이지 팝업에서 저장 버튼을 클릭했을 때 데이터 반영
5931	var updateAddressUI = function(d,cPage){
5932			
5933		if(cPage == "mypage"){
5934			var removeEl = $('.sm-parent.emptyFlag'); // 요소 자체를 담음
5935			if (removeEl.length) { 
5936				// optional 클래스 제거
5937				removeEl.find('.cl-s-form-wrap.empty').removeClass('empty');
5938				removeEl.find('.optional').removeClass('optional');
5939				// flexbox 안의 input 제거
5940				removeEl.find('.flexbox').children('input').remove();
5941			}
5942		} 
5943			
5944
5945		var $sm = $('.sm-parent');
5946		var $sm_btn = $sm.find('.btn-load-addresses div span');
5947		var $sm_name = $sm.find('.sm-name');
5948		var $sm_alias = $sm.find('.sm-alias');
5949		var $sm_default = $sm.find('.sm-default-addr');
5950
5951		const $sm_addr1 = $sm.find('.sm-addr1 span').first();   // [우편번호]
5952		const $sm_addr2 = $sm.find('.sm-addr1 span').last();    // 주소
5953		const $sm_tel = $sm.find('.sm-tel');  				    // 주소2
5954
5955		d?.alias ? $sm_alias.text('(' + d.alias + ')').removeClass('hide') 
5955: $sm_alias.text('').addClass('hide');
5956		
5957		$sm.removeClass('emptyFlag');
5958		
5959
5960		
5961		(cPage == "mypage") ? $sm_btn.text('변경하기') : $sm_btn.text('배송지 목록');
5962		
5963		$sm_name.text(d?.to_name);
5964		
5965		const tempArr = d.to_addr1?.split('||') || [];			
5966		tempArr[0] ? $sm_addr1.text('[' + tempArr[0] + ']').removeClass('hide') : $sm_addr1.addClass('hide');
5967		$sm_addr2.text(tempArr[1] +' '+d?.to_addr2);
5968		$sm_tel.text(d?.to_tel);
5969		$sm.find('.noaddress').addClass('hide');
5970
5971		if($('.btn-load-addresses.empty').length > 0) {
5972			$('.btn-load-addresses.empty').removeClass('empty');
5973		}
5974
5975		if(cPage == "payment") {
5976
5977			if (+d.is_default > 0) {
5978			$sm_default.removeClass("hide");
5979			} else {
5980			$sm_default.addClass("hide");
5981			}				
5982			
5983			$('#reciever-name').val(d.to_name);
5984			$('#reciever-phone').val(d.to_tel);
5985			$('#reciever-postcode').val(tempArr[0]);
5986			$('#reciever-addr1').val(tempArr[1]);
5987			$('#reciever-addr2').val(d.to_addr2);
5988			changeDeliveryPrice($(this).closest('form').attr('data-sid'));
5989			// console.log($(this));
5990		}
5991	}
5992
5993	var editAndaddPoppup = function(fix_addr = "N",  mode = "", cpage = "",select = ""){
5994		var dontclick_label = "";		
5995		var opa = "";
5996
5997		if (fix_addr === "Y") {
5998			dontclick_label = 'disabled checked';
5999			opa = "opa";
6000		} else if (mode === "edit") {
6001			var $a_item = select.closest('.address-item');
6002
6003			if ($a_item.find('.default.show').length > 0) {
6004				dontclick_label = 'disabled checked';				
6005				opa = "opa";
6006			}
6007		}
6008
6009		var modal_content =  `
6010					<div>
6011						<div class="cl-s-info">배송지 정보</div>
6012						<div class="col-xs-12 col-sm-12 col-md-12 no-padding">
6013							<div class="cl-s-form-wrap">
6014								<div class="cl-s-form-group">
6015									<input type="text" class="cl-s-form-control-popup" id="addrPopup-alias"name ="alias" required>
6016									<label for="input" class="cl-s-control-label">배송지명</label>
6017								</div>
6018							</div>
6019						</div> 					
6020						<div class="col-xs-6 col-sm-6 col-md-6 no-padding p-r-5">
6021							<div class="cl-s-form-wrap">
6022								<div class="cl-s-form-group">
6023									<input type="text" class="cl-s-form-control-popup" id="addrPopup-name" name="to_name" required="required">
6024									<label for="input" class="cl-s-control-label">이름<span class="input-star">*</span></label>
6025									
6026								</div>
6027							</div>
6028						</div>
6029						<div class="col-xs-6 col-sm-6 col-md-6 no-padding p-l-5">
6030							<div class="cl-s-form-wrap">
6031								<div class="cl-s-form-group">
6032									<input type="text" class="cl-s-form-control-popup" id="addrPopup-phone" name="to_tel" required="required" onkeyup="checkNumberPopup($(this))">
6033									<label for="input" class="cl-s-control-label">연락처<span class="input-star">*</span></label>
6034								</div>
6035							</div>
6036						</div>
6037						<div class="col-xs-12 col-sm-12 col-md-12 no-padding clearfix">
6038							<div class="cl-s-form-wrap">
6039								<div class="cl-s-form-group">
6040									<input type="hidden" class="cl-s-form-control-popup" id="addrPopup-postcode" name="addr1" required="required" value="">
6041									<input type="text" class="cl-s-form-control-popup" id="addrPopup-addr1" name="addr2" required="required" readonly onfocus="addrSearchModal('addrPopup')">
6042									<label for="input" class="cl-s-control-label">주소<span class="input-star">*</span></label>
6043								</div>
6044							</div>
6045							<div class="cl-s-form-wrap">
6046								<div class="cl-s-form-group">
6047									<input type="text" class="cl-s-form-control-popup" id="addrPopup-addr2" name="addr3" required>
6048									<label for="input" class="cl-s-control-label">상세주소</label>
6049								</div>
6050							</div>
6051						</div> 
6052						<span class="pull-left checkbox-wrap ${cpage == "manager" ? 'hide' : ''}">
6053							<div class="cl-s-checkbox ${opa}">
6054								<label>
6055									<input type="checkbox" id="addrPopup-set" name="is_default" ${dontclick_label}>
6056									<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M13 0H3C1.3 0 0 1.3 0 3v10c0 1.7 1.3 3 3 3h10c1.7 0 3-1.3 3-3V3C16 1.3 14.7 0 13 0zM15 13c0 1.1-0.9 2-2 2H3c-1.1 0-2-0.9-2-2V3c0-1.1 0.9-2 2-2h10c1.1 0 2 0.9 2 2V13z"></path></svg>
6057									<svg class="active" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0zM13.03 6.03l-5.5 5.5C7.38 11.68 7.19 11.75 7 11.75s-0.38-0.07-0.53-0.22l-3.5-3.5c-0.29-0.29-0.29-0.77 0-1.06s0.77-0.29 1.06 0L7 9.94l4.97-4.97c0.29-0.29 0.77-0.29 1.06 0S13.32 5.74 13.03 6.03z"></path></svg>
6058									기본 배송지 설정
6059								</label>
6060							</div>
6061						</span>						
6062					</div>			
6063		`		
6064		
6065		var $addPopup = $(this).showModalFlat( (mode == "add") ? "배송지 추가" : "배송지 수정" , modal_content, true, true , function(){
6066			
6067			$addPopup.find('.cl-s-form-wrap').removeClass('empty');
6068
6069			let focused = false;
6070			let flagCheck = false;
6071
6072			$addPopup.find('.cl-s-form-wrap').each(function (i,e) {
6073				const $wrap = $(this);
6074				const $inputs = $wrap.find('input:not([type=hidden]), textarea');
6075				const hasError = $wrap.hasClass('error');
6076
6077				let isEmpty = false;
6078
6079				// 오직 required="required" 로 명시된 필드만 검사
6080				$inputs.each(function () {
6081					const input = this;
6082					const $input_id = $(input).attr('id');
6083				 	let error_str= "";
6084					// required만 검사
6085					if (input.getAttribute('required') === 'required') {
6086						// console.log($(this));
6087						const val = $(input).val()?.trim();
6088						const $wrap = $(input).closest('.cl-s-form-wrap');
6089						const $errorLabel = $wrap.next('.cl-s-control-label.error');
6090
6091						// 기존 에러 제거
6092						$errorLabel.remove();
6093
6094						if (!val) {
6095							isEmpty = true;
6096							 error_str = "";
6097
6098							switch($input_id){
6099								case "addrPopup-name" :
6100									error_str = " 이름을 입력해 주세요.";
6101									break;
6102								case "addrPopup-phone" :
6103									error_str = " 연락처를 입력해 주세요."
6104									break;
6105								case "addrPopup-addr1" :
6106									error_str = " 주소 찾기를 통해 주소를 입력해주세요."									
6107									break;
6108							}
6109							// 새 에러 추가
6110							$wrap.after(
6111								'<label for="input" class="cl-s-control-label error"><i class="cl-icon alert02"></i>' + error_str + '</label>'
6112							);
6113						}
6114					}
6115				});
6116
6117				if (isEmpty) {
6118					$wrap.addClass('empty');
6119					flagCheck = true;
6120				}
6121
6122				// 포커스: 첫 번째 error 또는 empty 항목
6123				if ((isEmpty || hasError) && !focused) {
6124					flagCheck = true;
6125					const $focusTarget = $wrap.find('input, textarea').filter(':visible').first();
6126					if ($focusTarget.length > 0) {
6127					$focusTarget.focus();
6128					focused = true;
6129					}
6130				}
6131			});
6132
6133			if (flagCheck) return true;
6134
6135
6136			const formValues = {
6137				to_name: $addPopup.find('#addrPopup-name').val()?.trim(),
6138				to_tel: $addPopup.find('#addrPopup-phone').val()?.trim(),
6139				to_addr1: `${$addPopup.find('#addrPopup-postcode').val()?.trim()}||${$addPopup.find('#addrPopup-addr1').val()?.trim()}`,
6140				to_addr2: $addPopup.find('#addrPopup-addr2').val()?.trim(),
6141				alias: $addPopup.find('#addrPopup-alias').val()?.trim(),				
6142				is_default: $addPopup.find('#addrPopup-set').prop('checked') ? '1' : '0'
6143			};
6144
6145			if(mode == "add"){
6146				$.ajax({
6147					type: 'POST',
6148					url: '/umember/get/type/smAddressList',
6149					data: {
6150					sid: property.SID,
6151					uid: property.UMEMBER.id,
6152					action: 'add',
6153					fixaddr : fix_addr,
6154					value : formValues
6155					},
6156					dataType: 'json',
6157					success: function (data) {
6158						if (data?.error) {
6159							alert(data.error);
6160							$addPopup.modal('hide');
6161							getaddrList(cpage);						
6162							return;
6163						} else {
6164							if( typeof $addresslist_popup !== "undefined" && $addresslist_popup.length > 0) {
6165								$addresslist_popup.modal('hide');
6166							}
6167
6168							if(cpage == "mypage" && formValues.is_default == "1"){
6169								updateAddressUI(formValues,cpage);
6170							} 
6171							else if (
6172								(cpage == "payment" && fix_addr == "Y") ||
6173								(cpage == "payment" && formValues.is_default > 0 && $('.sm-default-addr:not(.hide)').length > 0)
6174							) {
6175								updateAddressUI(formValues,cpage);
6176								UpdateelSeq(data["seq"]);
6177							}
6178							$addPopup.modal('hide');							
6179							getaddrList(cpage);
6180						}
6181					}
6182				});		
6183			} else if (mode == "edit") {
6184			
6185				var $tempitem = select.closest('.address-item');
6186				var radio_value = $tempitem.find('input[type="radio"]').val() || '';
6187				if (!radio_value) return true;
6188				
6189				if(cpage == "manager" && $('#member-postcode').length > 0 && formValues.is_default > 0) {
6190					$('#member-addr1').val($addPopup.find('#addrPopup-addr1').val()?.trim()) ;
6191					$('#member-addr2').val(formValues.to_addr2) ;
6192					// console.log('afaf');
6193					$('#member-postcode').attr('value',$addPopup.find('#addrPopup-postcode').val()?.trim());	
6194					
6195					var temp_uid = $('.memberinfo-modal .member-info-input').val();
6196					$('.mng-list table tr[data-uid="' + temp_uid + '"]').find('.'+'addr').text(formValues.to_addr1 + formValues.to_addr2);
6197
6198				}
6199					$.ajax({
6200						type: 'POST',  
6201						url: '/umember/get/type/smAddressList',
6202						data: {
6203						sid: (typeof property !== 'undefined' && property.SID) ? property.SID : SID,
6204						uid: (cpage=='manager') ? $('.memberinfo-modal .member-info-input').val() :  property.UMEMBER.id,
6205						action: 'edit',
6206						seq : radio_value,
6207						value : formValues
6208						},
6209						dataType: 'json',
6210						success: function (data) {
6211							if (data?.error) {
6212								alert(data.error);
6213								$addPopup.modal('hide');
6214								getaddrList(cpage);						
6215								return;
6216							} else {
6217								$addPopup.modal('hide');
6218								$addresslist_popup.modal('hide');
6219								
6220								getaddrList(cpage);
6221								
6222								var elSeq = $('.sm-parent').attr('data-smseq');
6223								var elDefault = $('.sm-parent').find('.sm-default-addr').hasClass("hide");
6224
6225								if(cpage =="payment" && !elDefault &&  formValues["is_default"] == 1 || 
6226								   cpage =="payment" &&  elSeq == radio_value
6227								){
6228									updateAddressUI(formValues,cpage);
6229								} else if(cpage != "payment"){
6230
6231									updateAddressUI(formValues,cpage);
6232								}
6233							}
6234						}
6235					});		
6236
6237			}
6238	
6239
6240
6241		}, 'cancel', (cpage === 'manager' ? '저장' : 'config.save'), 'cl-cmmodal cl-s-btn w560 cl-p70 cl-p0 parallax-description-modal cl-s-add-addrPopup cover fullcover-modal ' + ( (cpage == "manager") ? 'manageredit' : '')  +'',true,function(){
6242			console.log('a');
6243		},function(){});		
6244
6245		if(mode == "edit") {
6246			if($addresslist_popup.length > 0) {
6247
6248				var $item = select.closest('.address-item');
6249
6250				var name_edit = $item.find('.name').text().trim();
6251				var aliasAttr = unescape($item.find('.tag').attr('edit-tag'));
6252				var alias_edit = aliasAttr ? aliasAttr.trim() : '';
6253				var is_default_edit = $item.find('.default.show').length > 0 ? '1' : '0';
6254				var postcodeAttr = $item.find('[edit-postcode]').attr('edit-postcode');
6255				var postcode_edit = postcodeAttr ? postcodeAttr.trim() : '';
6256				var addr1Attr = unescape($item.find('[edit-addr1]').attr('edit-addr1'));
6257				var address1_edit = addr1Attr ? addr1Attr.trim() : '';
6258				var addr2Attr = unescape($item.find('[edit-addr2]').attr('edit-addr2'));
6259				var address2_edit = addr2Attr ? addr2Attr.trim() : '';
6260				var phone_edit = $item.find('.div3.phone').text().trim();
6261				if (mode === 'edit') {
6262						$addPopup.find('#addrPopup-alias').val(alias_edit);
6263						$addPopup.find('#addrPopup-name').val(name_edit);
6264						$addPopup.find('#addrPopup-phone').val(phone_edit);
6265						$addPopup.find('#addrPopup-postcode').val(postcode_edit);
6266						$addPopup.find('#addrPopup-addr1').val(address1_edit).addClass('has-value');
6267						$addPopup.find('#addrPopup-addr2').val(address2_edit);
6268						$addPopup.find('#addrPopup-set').prop('checked', is_default_edit === '1');
6269				}
6270			}
6271		}	 
6272	}	
6273
6274	var deletePopup = function(cpage,c_this){
6275
6276		$addresslist_popup.addClass('hide');
6277		var $tempitem = $(c_this).closest('.address-item');
6278		var radio_value = $tempitem.find('input[type="radio"]').val() || '';
6279						
6280		var $addr_modal_delete = $(this).showModalFlat("주소를 삭제하시겠습니까?", "삭제한 주소는 복구할 수 없습니다. <br> 정말 삭제하시겠습니까?", true, true , function(){
6281			
6282			$.ajax({
6283				type: 'POST',
6284				url: '/umember/get/type/smAddressList',
6285				data: {
6286				sid: property.SID,
6287				uid: property.UMEMBER.id,
6288				seq:radio_value,
6289				action: 'delete',
6290				},
6291				dataType: 'json',
6292				success: function (data) {		
6293					setTimeout(function() {
6294						getaddrList(cpage);							
6295					},'');		
6296					$addr_modal_delete.modal('hide');
6297					$addresslist_popup.modal('hide'); 
6298				}
6299			});
6300
6301		}, 'cancel','ok','modal-dialog cl-cmmodal cl-s-btn w560 cl-p70',false,'','',function(){
6302			$addresslist_popup.removeClass('hide');
6303		});
6304				
6305
6306	}
6307
6308	var UpdateelSeq = function(seq){
6309		$('.sm-parent').attr("data-smseq",seq);
6310	}
6311
6312	$('.btn-add-addr.pointer-none').live('click',function(e) {
6313		var modal = $(this).showModalFlat($.lang[LANG]['config.information'], $.lang[LANG]['shopping.addr.title.dec'], true, false, function(){
6314			$backModal = $('#flat-modal').closest('.cl-common-modal').css('opacity',1)		
6315			if ($backModal.next().hasClass('modal-backdrop')) {
6316				$backModal.next().css('opacity', 0.9);  // 원하는 스타일
6317			}
6318		}, 'ok', '', 'cl-p130 cl-cmmodal cl-s-btn w560 cl-p0 cl-okbtn-pbt70',true,function(){
6319			$backModal = $('#flat-modal').closest('.cl-common-modal').css('opacity',1)		
6320			if ($backModal.next().hasClass('modal-backdrop')) {
6321				$backModal.next().css('opacity', 0.9);  // 원하는 스타일
6322			}
6323
6324		},function(){
6325		});
6326		$backModal = $('#flat-modal').closest('.cl-common-modal').css('opacity',0)		
6327		if ($backModal.next().hasClass('modal-backdrop')) {
6328			$backModal.next().css('opacity', 0);  // 원하는 스타일
6329		}
6330	});
6331
6332
6333	$('.cl-s-add-addrPopup .cl-s-form-group').live('click',function(e) {
6334		if($(e.target).hasClass('cl-s-form-group')) {
6335			$(e.target).find('.cl-s-form-control-popup:not([type=hidden])').focus();
6336		}
6337	});
6338	$('.cl-s-form-control-popup').live({
6339		
6340		focus: function(e) {
6341			if($(this).attr('type') == 'hidden') {
6342				e.preventDefault();
6343				return false;
6344			}
6345			if($(this).is('#addrPopup-addr2') && $('#addrPopup-addr1').val().trim().length > 0 ) {
6346
6347				const formWrap = $('#addrPopup-addr1').closest('.cl-s-form-wrap');
6348				const nextElement = formWrap.next('.cl-s-control-label');
6349
6350				if (nextElement.length > 0) {
6351					nextElement.remove();
6352				}
6353				var input_id = $(this).attr('id'),
6354					input_addr1 = input_id.replace('-addr2','-addr1');
6355					// console.log(input_addr1);
6356				if($('#'+input_addr1).val().trim().length > 0) {
6357					$('#'+input_addr1).closest('.cl-s-form-wrap').removeClass('empty');
6358				}
6359			}
6360			$(this).closest('.cl-s-form-wrap').addClass('active');
6361		},
6362		blur: function(e) {
6363			$(this).closest('.cl-s-form-wrap').removeClass('active');
6364
6365			if($(this).attr('type') == 'hidden' || $(this).is('textarea')) {
6366				e.preventDefault();
6367				return false;
6368			}
6369
6370			var	error_str = '',
6371				val = $(this).val().trim();
6372
6373
6374			if (val.length === 0 && this.getAttribute('required') === 'required') {
6375				$(this).closest('.cl-s-form-wrap').removeClass('error').addClass('empty');
6376				$(this).closest('.cl-s-form-wrap').find('.cl-s-control-label.error').remove();
6377				return false;
6378			} else {
6379				$(this).closest('.cl-s-form-wrap').removeClass('empty');
6380				$(this).closest('.cl-s-form-wrap').next('.cl-s-control-label.error').remove();
6381
6382				if(val.length > 0 && checkEmojis(val)){
6383				 	error_str = $.lang[LANG]['config.unable.emoji'];
6384					
6385				} else if( ($(this).is('#addrPopup-alias') || $(this).is('#addrPopup-name')) &&  val.length > 50) {
6386					      error_str = '50자 이내로 입력해 주세요.';
6387				}
6388
6389				if(error_str.length > 0) {
6390					$(this).closest('.cl-s-form-wrap').addClass('error');
6391					if($(this).parent().find('.cl-s-control-label.error').length > 0) {
6392						$(this).parent().find('.cl-s-control-label.error').html(error_str);
6393					} else {
6394						$(this).after('<label for="input" class="cl-s-control-label error">' + error_str + '</label>');
6395					}
6396					return false;
6397				}
6398			}
6399
6400			// 유효성 통과 시 에러 문구들 제거
6401			$(this).closest('.cl-s-form-wrap').removeClass('error').removeClass('empty');
6402			$(this).closest('.cl-s-form-wrap').find('.cl-s-control-label.error').remove();
6403
6404		}
6405	});
6406	//레벨변경 탭 추가
6407	$('.member-level-btn').live('click', function() {
6408		if($(this).hasClass('member_disabled')) {
6409			siteNotice('manager');
6410			return false;
6411		}
6412		var blank = $('input[type="checkbox"]:checked').hasClass("blank");
6413		if(blank){
6414			$(this).showModalFlat($.lang[LANG]['manager.list.member.selected.empty.title'], $.lang[LANG]['manager.list.member.selected.blank'],true,false,'','ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0 cl-member-list-block');
6415			return false;
6416		}
6417		
6418		var check_data = getMemberListCheckData($(this)),
6419			mng_settings_el = $(this).closest('.mng-settings');
6420
6421		if( typeof check_data.error != 'undefined' && check_data.error) {
6422            $(this).showModalFlat($.lang[LANG]['manager.list.member.selected.empty.title'], check_data.error,true,false,'','ok','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0 cl-member-list-block');
6423			return false;
6424		}
6425
6426		var first_name = (LANG == 'en' && check_data.count > 0) ? '' : '<span class="addressee-name">' + check_data.name + '</span> ',
6427			others_name = (LANG == 'en' || check_data.count < 1) ? '' :  $.lang[LANG]['manager.list.member.selected.multi.1'] + '\
6428						<span class="addressee-count point" data-toggle="tooltip" data-placement="bottom" data-html="true" data-original-title="' + check_data.names + '">\
6429						' + check_data.count + '</span>' + $.lang[LANG]['manager.list.member.selected.multi.2'],
6430			last_name = (LANG == 'en' && check_data.count > 0) ? $.lang[LANG]['manager.list.member.selected.multi.3'] : '',
6431			selected_str = $.lang[LANG]['manager.list.member.level.txt.1'] + first_name + others_name + last_name + $.lang[LANG]['manager.list.member.level.txt.2'];
6432		
6433		//레벨숫자버튼 생성
6434		var level_btn = "";
6435		for(var i=1; i < 11; i++){
6436			level_btn += '<button class="btn-lg btn-default level-btn" value="' + i + '">' + i + '</button>';
6437		}
6438		
6439		var modal_content = '\
6440			<div class="mng-modal-body level-modal">\
6441			<p class="addressee-wrap">\
6442				' + selected_str + '\
6443				</p>\
6444				' + level_btn + '\
6445			</div>\
6446		';
6447		
6448		var level_modal = $(this).showModalFlat($.lang[LANG]['manager.list.member.level.title'], modal_content, true, true, function() {
6449			var uids = check_data.ids;
6450			var level = $(".level-modal").children(".active").val();
6451
6452			if(level == "undefined" || !level){
6453				alert("레벨을 선택해 주세요");
6454				return false;
6455			}
6456
6457			if(typeof uids == 'undefined' || !uids) {
6458				window.location.reload();
6459				return false;
6460			}
6461			
6462			$.ajax({
6463				type: 'POST',
6464				url: '/umember/update/type/level',
6465				data: { sid : SID, uids : uids, val : level },
6466				dataType: 'json',
6467				async: true,
6468				success: function(data) {
6469					if(typeof data.error != 'undefined' && data.error) {
6470						//alert(data.error);
6471						if(level_modal.find('.error').length == 0) level_modal.find('.level-modal').append('<span class="error">' + data.error + '</span>');
6472						else level_modal.find('.level-modal').find('.error').text(data.error);
6473						return false;
6474					} else {
6475						level_modal.modal('hide');
6476					}
6477					location.reload(true);
6478				}
6479			});
6480			
6481		}, 'cancel','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0',true);
6482	});
6483
6484	$('input[type="checkbox"].cl-etc-input-val').live('click',function(){ 
6485		if($(this).is(":checked")===true) {
6486			
6487			console.log($(this).prop('checked'));
6488			$(this).prop('checked',true);
6489		} else {
6490			
6491			console.log($(this).prop('checked'));
6492			$(this).prop('checked',false);
6493		}
6494	
6495	});
6496	
6497	$('.member-info').live('click', function() {
6498		var isGabia = ($('.dashboard_u.gabia').length > 0) ? true : false,
6499			checkViewMode = ($(this).find('.collection-view').length > 0) ? true : false,
6500			uid = $(this).closest('tr').attr('data-uid'),
6501			mng_settings_el = $(this).closest('.mng-settings'),
6502			list_type = mng_settings_el.attr('data-type'),
6503			list_str = '',
6504			no_active_btn = $('div[data-ssuser]').attr('data-ssuser');
6505
6506		$.post('/umember/lists/type/memberinfo', { sid : SID, val : uid }, function(data) {
6507			if(typeof data.error != 'undefined' && data.error) {
6508				alert(data.error);
6509				return false;
6510			}
6511			var page_type = $('.mng-settings').attr('data-type'),
6512				slog_p = '';
6513			if(typeof page_type != 'undefined' && page_type) {
6514				if(page_type == 'member-waitlist') setSiteLogs('um.wait','info',{'id':uid},'um.waitlist');
6515				else setSiteLogs('um.list','info',{'id':uid},'um.list');
6516			}
6517			var cert_use = $('.memberlist-table').attr('data-cert');
6518			$.each(data, function(k,o) {
6519				if(isGabia && $.inArray(k, ['cert_date','cert_adult_date']) > -1) return true;				
6520				var cl_name = (o['name']) ? o['name'] : $.lang[LANG]['manager.list.info.'+k],
6521					cl_type = (o['type']) ? o['type'] : 'text',
6522					cl_val = (o['value']) ? o['value'].replace(/\"/g,'&quot;').replace(/\'/g,'&#39;').replace(/\</g,'&lt;').replace(/\>/g,'&gt;') : '',
6523					pass_field = ['no','addr2','umseq'],
6524					disabled_field = ['id','approvaldate'],
6525                    cl_jcol_list_type = ((o['type']=='check') || (o['type']=='radio')) ? 'cl-etc-list-type' : '';
6526
6527				list_str += ($.inArray(k,pass_field) > -1) ? '' : '\
6528					<div class="form-group">\
6529						<label class="memW-title control-label '+cl_jcol_list_type+' " id="member-'+ k + '-label">'+ cl_name + '</label>\
6530						<div class="memW-info-wrap">\
6531				';
6532
6533				if(k=='birth') cl_val = (cl_val=='0000-00-00') ? '' : cl_val;
6534				
6535				switch(k) {
6536					case 'no':
6537					case 'addr2': 
6538					case 'umseq': 
6539						break;
6540
6541					case 'addr1':
6542						var addr2_str = (data['addr2']['value']) ? '||' + data['addr2']['value'] : '|| ',
6543							addr_str = (cl_val.indexOf('||') === -1) ? ' || '+cl_val+addr2_str : cl_val+addr2_str,
6544							addr = addr_str.split('||'),
6545							plan_type = (typeof property != 'undefined' && property) ? property.VALIDTYPE : VALIDTYPE,
6546							checkSM = (typeof plan_type != 'undefined' && (plan_type == 'SM' || plan_type == 'SHOPPING')) ? true : false,
6547							usedAddrSearchModal = (checkSM || o['addrsearch']) ? 'readonly onclick="addrSearchModal(\'member\')"' : '';
6548							;
6549							
6550						var sm_addr =  (data && data.umseq) ? data.umseq : '',
6551							sm_name =  (sm_addr && sm_addr.to_name) ? sm_addr.to_name : '',							
6552							sm_alias = (sm_addr && sm_addr.alias) ? sm_addr.alias : '',
6553							sm_tel = (sm_addr && sm_addr.to_tel) ? sm_addr.to_tel : '',
6554							addr_list_btn ='';
6555							addr_default_html = '';
6556							if(sm_addr || checkSM) {
6557								
6558								addr_list_btn += '\
6559								<div class="cl-s-form-wrap btn-load-addresses adm-member-addr '+(!sm_addr? 'hide' : '' )+' " data-action="adm-edit">\
6560									<div class="cl-s-form-group "><span>배송지 목록</span>\
6561									</div>\
6562								</div>';		
6563								
6564								addr_default_html += '\
6565								<div class="sm-parent '+ (!sm_addr ? 'emptyFlag' : '') +'">\
6566									<div class="cl-s-form-wrap">\
6567										<div class="cl-s-form-group">\
6568											<div class="cl-s-form-control"><div class="sm-name">'+sm_name+'</div><div class="sm-alias ' +(sm_alias ? '':'hide')+ '">' +(sm_alias ? '('+sm_alias+')' : '' )+ ' </div><div class="sm-default-addr"><span>기본배송지</span></div></div>\
6569											<div class="cl-s-form-control"><div class="sm-addr1"><span class=" '+ (addr[0]?.trim() ? '' : 'hide')+' "> '+(addr[0]?.trim() ? '['+ addr[0]?.trim() +']' : '' )+'</span><span>'+  addr[1].trim() +' '+ addr[2].trim() +'</span></div></div>\
6570											<div class="cl-s-form-control"><div class="sm-tel">'+sm_tel+'</div></div>\
6571											<div class="cl-s-form-control noaddress" style="text-align:center; padding:20px; color:#999;">등록된 배송지가 없습니다.</div>\
6572										</div>\
6573									</div>\
6574								</div>\
6575								';
6576							}
6577							 
6578						if(list_type == 'member-list') {
6579							if(sm_addr || checkSM) { list_str += addr_list_btn; }
6580
6581							list_str += '\
6582								<input class="hide" id="member-postcode" type="hidden" value="' + addr[0].trim() + '">\
6583								<div class="cl-common-form-wrap nonplace-holder">\
6584			   						<div class="cl-common-form-group">\
6585                                       	<input class="member-info-input form-control" id="member-'+ k + '" type="text" value="' + addr[1].trim() + '" ' + usedAddrSearchModal + ' name="member-'+ k + '" required="required">\
6586			 						</div>\
6587			   					</div>\
6588			   					<div class="cl-common-form-wrap nonplace-holder">\
6589			   						<div class="cl-common-form-group">\
6590                                       	<input class="member-info-input form-control" id="member-addr2" type="text" value="' + escapeHtml(addr[2].trim()) + '" name="member-addr2" required="required">\
6591			 						</div>\
6592			   					</div>\
6593							';
6594
6595							if (sm_addr || checkSM) { list_str += addr_default_html;}							
6596						} else {
6597							list_str += '\
6598								<input class="hide" id="member-postcode" type="hidden" value="' + addr[0].trim() + '">\
6599								<span id="member-'+ k + '" '+usedAddrSearchModal+'>'
6600									+ addr[1].trim() + ((addr[2].trim() != '') ? '<br>'+addr[2].trim() : '') +
6601								'</span>\
6602							';
6603						}
6604						break;
6605					case 'gender':
6606						if(list_type == 'member-list') {
6607							var disabled = (cert_use == 'Y' || cert_use == 'A' || checkViewMode) ? ' disabled':'';
6608							list_str += '\
6609								<select class="form-control" name="member-'+ k + '" id="member-'+ k+ '"'+disabled+'>\
6610									<option value="">선택</option>';
6611							if(o['value'] == '01') {
6612								list_str += '\
6613									<option value="01" selected>남</option>\
6614									<option value="02">여</option>';
6615							} else if(o['value'] == '02') {
6616								list_str += '\
6617									<option value="01">남</option>\
6618									<option value="02" selected>여</option>';
6619							} else {
6620								list_str += '\
6621									<option value="01">남</option>\
6622									<option value="02">여</option>';
6623							}
6624							list_str += '\
6625								</select>\
6626								<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
6627							';
6628						} else {
6629							var gender_val = (cl_val)? ((cl_val == '01')? '남':'여'):'';
6630							list_str += '\
6631								<span id="member-'+ k + '">'
6632									+ gender_val +
6633								'</span>\
6634								';
6635						}
6636							
6637						break;
6638					case 'memo':
6639						var m_count = cl_val.length,
6640							checkReadonly = (checkViewMode) ? 'readonly' : '';
6641						if(list_type == 'member-list') {
6642							list_str += '\
6643								<textarea class="form-control" name="member-'+ k + '" id="member-'+ k+ '" rows="3" '+checkReadonly+'>' + cl_val + '</textarea>\
6644								<label for="member-'+ k + '"><span class="write-count">' + m_count + '</span>/1000</label>\
6645								';
6646						} else {
6647							list_str += '\
6648								<span id="member-'+ k+ '">' + cl_val + '</span>';
6649						}
6650						break;
6651
6652					case 'birth':
6653						if(list_type == 'member-list') {
6654							var disabled = (cert_use == 'Y' || cert_use == 'A') ? ' disabled':'';
6655							list_str += '\
6656								<div class="cl-common-form-wrap nonplace-holder">\
6657			   						<div class="cl-common-form-group'+disabled+'">\
6658	                                       <input class="member-info-input form-control birthKeyCheck" id="member-'+ k + '" type="text" value="' + cl_val + '" name="member-'+ k + '" onkeyup="auto_date_format(event, this)" onkeypress="auto_date_format(event, this)" required="required"'+disabled+'>\
6659			 						</div>\
6660			   					</div>\
6661							';
6662						} else {
6663							list_str += '\
6664								<span id="member-'+ k + '" class="birthKeyCheck" onkeyup="auto_date_format(event, this)" onkeypress="auto_date_format(event, this)">'
6665									+ cl_val +
6666								'</span>\
6667							';
6668						}
6669
6670						break;
6671
6672					case 'cert_date':
6673					case 'cert_adult_date':
6674						if(list_type == 'member-list') {
6675							list_str += '\
6676		                            <div class="cl-common-form-wrap nonplace-holder member-'+ k + '-wrap">';
6677		                        if(cl_val != '' && cl_val != '0000-00-00 00:00:00') {
6678				   				list_str += '\
6679				   						<div class="cl-common-form-group">\
6680		                                    <input class="member-info-input form-control" id="member-'+ k + '" type="text" value="' + cl_val + '" name="member-'+ k + '" required="required" ' + prev_val + ' disabled>\
6681				 						</div>';
6682					 			}
6683				 			list_str += '\
6684				   					</div>\
6685								';
6686						} else {
6687							if(cl_val != '' && cl_val != '0000-00-00 00:00:00') {
6688								list_str += '\
6689									<span id="member-'+ k + '">'
6690										+ cl_val +
6691									'</span>\
6692								';
6693							}
6694						}
6695
6696						break;
6697					default:
6698						var disabled = ($.inArray(k,disabled_field) > -1) ? 'disabled' : '',
6699							prev_val = (k == 'email' || k == 'nick') ? 'data-prev="' + cl_val + '"' : '',
6700							cl_type_str = '';
6701
6702						if(list_type == 'member-list') {
6703							if($.inArray(k, ['name', 'tel']) > -1 && (cert_use == 'Y' || cert_use == 'A')) disabled = 'disabled';
6704							var list_jcolval = [o['jcol_val']];
6705							if((cl_type=='select') || (cl_type=='check') || (cl_type=='radio')) {
6706								list_jcolval =  (o['jcol_val'].indexOf('`') > -1) ? o['jcol_val'].split('`') : list_jcolval;
6707							}
6708
6709							switch (cl_type) {
6710								case 'memo':
6711									cl_type_str += '<textarea class="form-control" name="member-'+ k + '" id="member-'+ k+ '" rows="3">' + cl_val + '</textarea>';
6712									break;
6713								case 'select':									
6714									if(list_jcolval.length > 0) {
6715										cl_type_str += '\
6716										<select class="form-control etc-select" name="member-'+ k + '" id="member-'+ k+ '"'+disabled+'>\
6717											<option value="">선택</option>';
6718										$.each(list_jcolval, function(i,v) {
6719											var selected = (v==cl_val) ? 'selected' : '';
6720											cl_type_str += '\
6721											<option value="'+v+'" '+selected+'>'+v+'</option>\
6722											';
6723										});
6724										cl_type_str += '\
6725										</select>\
6726										<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 4" width="8" height="4"><path d="m0 0 4 4 4-4z"/></svg>\
6727										';
6728									}
6729									
6730									break;
6731
6732								case 'radio':
6733									if(list_jcolval.length > 0) {
6734										$.each(list_jcolval, function(i,v) {
6735											var checked = (v==cl_val) ? 'checked' : '';
6736											cl_type_str += '\
6737											<div class="newcheckbox cl-etc-jcoltype">\
6738												<label>\
6739													<div class="newcheckboxSvgRadio">\
6740														<input type="radio" class="form-control cl-common-form-radio-hide cl-etc-input-val cl-s-form-control" id="member-'+ k + '-'+i+'" name="member-'+ k + '" value="'+v+'" '+checked+'>\
6741														<svg viewBox="0 0 18 18" width="18" height="18">\
6742															<path d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 
67420-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"/>\
6743														</svg>\
6744														<svg class="active" viewBox="0 0 18 18" width="18" height="18">\
6745															<path d="M9 0C4.03 0 0 4.03 0 9c0 4.97 4.03 9 9 9s9-4.03 9-9C18 4.03 13.97 0 9 0zM9 17c-4.41 0-8-3.59-8-8 0-4.41 3.59-8 8-8s8 3.59 8 8C17 13.41 13.41 17 9 17z"/>\
6746															<circle cx="9" cy="9" r="6"/>\
6747														</svg>\
6748													</div>\
6749													<span>'+v+'</span>\
6750												</label>\
6751											</div>\
6752											';
6753										});		
6754									}
6755
6756									break;	
6757
6758                                case 'check':
6759                                    if(list_jcolval.length > 0) {
6760                                        $.each(list_jcolval, function(i,v) {
6761											var checked = ((cl_val.indexOf('`') > -1) && (cl_val.indexOf(v.trim()) > -1)) ? 'checked' : (v==cl_val ? 'checked' : '');
6762											cl_type_str += '\
6763												<div class="newcheckbox cl-etc-jcoltype">\
6764													<label>\
6765														<div class="newcheckboxSvg">\
6766															<input type="checkbox" class="form-control cl-common-form-radio-hide cl-etc-input-val cl-s-form-control" id="member-'+ k + '-'+i+'" name="member-'+ k + '" value="'+v+'" '+checked+'>\
6767															<svg viewBox="0 0 16 16" width="16" height="16">\
6768																<path class="st6" d="M3 0h10c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3C0 1.34 1.34 0 3 0z"></path>\
6769																<path class="st19" d="M13 1c1.1 0 2 0.9 2 2v10c0 1.1-0.9 2-2 2H3c-1.1 0-2-0.9-2-2V3c0-1.1 0.9-2 2-2H13M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0L13 0z"></path>\
6770															</svg>\
6771															<svg class="active" viewBox="0 0 16 16" width="16" height="16">\
6772																<rect x="2" y="2" class="st6" width="12" height="12"></rect>\
6773																<path class="st19" d="M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0zM13.03 6.03l-5.5 5.5C7.38 11.68 7.19 11.75 7 11.75s-0.38-0.07-0.53-0.22l-3.5-3.5c-0.29-0.29-0.29-0.77 0-1.06s0.77-0.29 1.06 0L7 9.94l4.97-4.97c0.29-0.29 0.77-0.29 1.06 0S13.32 5.74 13.03 6.03z"></path>\
6774															</svg>\
6775														</div>\
6776														<span>'+v+'</span>\
6777													</label>\
6778												</div>\
6779											';
6780                                        });	
6781                                    }
6782                                   
6783                                    break;
6784
6785								case 'fupload':
6786									// 단일 파일 업로드 타입일 경우 다운로드 링크 생성
6787									// view.html과 동일하게 explode 사용
6788
6789									// fileurlcreate 함수를 사용하여 파일 URL 생성
6790									var fileResult = $.umember.fileurlcreate(cl_val);
6791									var download_link = fileResult.download_link;
6792									var file_data = fileResult.file_data;
6793									cl_type_str += $.umember.fileHtmlRender(k, {
6794										//cpage : (check_page =='mypage') ? 'mypage' :'join',
6795										val : file_data || '',
6796										type : "type2",
6797										type2_downlink : download_link,
6798									})	
6799
6800									break; 
6801
6802								default:
6803									cl_type_str += '\
6804									<div class="cl-common-form-wrap nonplace-holder" id="member-'+ k + '">\
6805										<div class="cl-common-form-group '+disabled+'">\
6806											<input class="member-info-input form-control" id="member-'+ k + '" type="text" value="' + cl_val + '" ' + disabled + ' name="member-'+ k + '" required="required" ' + prev_val + '>\
6807										</div>\
6808									</div>';
6809									break;
6810							}
6811
6812							list_str += cl_type_str;
6813
6814						} else {
6815							if((cl_type=='select') || (cl_type=='check') || (cl_type=='radio')) {
6816								cl_val =  (cl_val.indexOf('`') > -1) ? cl_val.replace(/`/gi,',') : cl_val;
6817							}
6818							 
6819							if(cl_type=='fupload' && cl_val) {
6820								var templink = $.umember.fileurlcreate(cl_val|| '');
6821
6822								var tempdownicon = '<svg class="file-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M5 19v-3.5h1V18h12v-2.5h1V19H5Zm2.65-7.15.71-.71 3.15 3.15V5h1v9.29l3.15-3.15.71.71-4.35 4.35-4.35-4.35Z"/></svg>'
6823								cl_val = ''
6824								+ '<div class="fupload-cell">'
6825								+   '<span class="file-name">' + templink.file_info.name + '</span>'
6826								+     templink.download_link  // <a href="... " class="file-download-btn" target="_blank">
6827								+       tempdownicon          // <svg ...>
6828								+     '</a>'
6829								+ '</div>';								
6830							}
6831							
6832							list_str += '\
6833								<span id="member-'+ k + '">'
6834									+ cl_val +
6835								'</span>\
6836							';
6837						}
6838						break;
6839				}
6840				list_str += ($.inArray(k,pass_field) > -1) ? '' : '\
6841				</div>\
6842				</div>\
6843				';
6844			});
6845			
6846			var modal_view = (checkViewMode) ? 'readonly' : '',
6847				modal_content = '\
6848			<div class="mng-modal-body info-modal '+modal_view+'" data-uid="' + uid + '" data-list-type="' + list_type + '">\
6849				<div class="form-horizontal">\
6850					' + list_str + '\
6851				</div>\
6852			</div>\
6853			';
6854			if(list_type == 'member-list') {
6855				var closed_txt = (checkViewMode) ? 'close' : 'cancel';
6856				var info_modal = $(this).showModalFlat($.lang[LANG]['manager.member.details.title'], modal_content, true, !checkViewMode, function() {
6857
6858					var info_data = {},
6859						regExp_arr = ['name','nick','email','tel','birth'],
6860						regexp = {
6861							name: /^[a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣 ]*$/i,
6862							nick: /^[a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣 ]*$/i,
6863							email: /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
6864							tel: /^[0-9-+]*$/,
6865							birth: /^(19[0-9][0-9]|20\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/,
6866						},
6867						check_error = false,
6868						slog_more = '',
6869						slog_more_array = {},
6870						etc_Array = [],
6871						etc_i= 0;
6872						
6873					$('.info-modal').find('.form-control:not([disabled])').each(function(i) {
6874						var type = $(this).attr('id').replace(/(member\-)|(\-\d)/gi,''),
6875							type_str = $(this).closest('.form-group').find('.control-label').text(),
6876							error_str = '',
6877							etc_type_arr = etc_Array[type];
6878							
6879                        if($(this).parents('.newcheckbox').hasClass('cl-etc-jcoltype')) {
6880							
6881							if($(this).is(":checked")) {								
6882								val = $(this).val().trim();
6883								var check_jcol_first = false;
6884								if((typeof $(this).parents('.form-group').attr('data-jcolval')=='undefined') || (!$(this).parents('.form-group').attr('data-jcolval'))) {
6885									check_jcol_first = true;
6886									$(this).parents('.form-group').attr('data-jcolval',val);
6887								}
6888
6889								var jcolVal = $(this).parents('.form-group').attr('data-jcolval');
6890								if($(this).parents('.form-group').find('.cl-etc-input-val:checked').length>1 && val && !check_jcol_first) {
6891									val = jcolVal + '`' + val;
6892									val = val.replace(/\`$/gi, ''); 
6893									$(this).parents('.form-group').attr('data-jcolval',val);
6894								} 
6895							} else {
6896								if($(this).parents('.form-group').find('.cl-etc-input-val:checked').length==0) val = '';
6897							}
6898
6899                        } else val = $(this).val().trim();
6900					
6901						if(typeof $(this).parents('.form-group').attr('data-jcolval') != 'undefined' && $(this).parents('.form-group').attr('data-jcolval')) {
6902							val = $(this).parents('.form-group').attr('data-jcolval');
6903						}					
6904
6905						var emoji_val = (type.indexOf('addr') > -1) ? $('#member-addr1').val().trim() + ' ' + $('#member-addr2').val().trim() : val;
6906						if(checkEmojis(emoji_val)) error_str = $.lang[LANG]['config.unable.emoji'];
6907						else {
6908							// if(type == 'addr1') slog_more += type_str+' : '+val;
6909							// else if(type == 'addr2') slog_more += ' '+val+'<br>';
6910							// else slog_more += type_str+' : '+val+'<br>';
6911							
6912							if((val.length == 0 && type != 'email') || regExp_arr.indexOf(type) == -1) {
6913								
6914								if(type == 'addr1') val = $('#member-postcode').val() + ' || ' + val;																
6915								info_data[type] = val;
6916
6917								if(type=='addr2') {
6918									slog_more_array[type_str] = info_data['addr1'] + ' ' + val;
6919								} else slog_more_array[type_str] = val;
6920								
6921								return true;
6922							}
6923							if(!regexp[type].test(val)) {
6924								error_str = $.lang[LANG]['siteum.regexp.check.'+type];
6925								if(val.length == 0 && type == 'email') error_str = $.lang[LANG]['manager.check.required.message'];
6926							} else if(type == 'nick' && (val.length < 1 || val.length > 20)) {
6927								error_str = $.lang[LANG]['siteum.regexp.check.nick'];
6928							} else {
6929								$(this).closest('.form-group').removeClass('has-error');
6930								$(this).parent().find('.mng-error').remove();
6931								info_data[type] = val;
6932								slog_more_array[type_str] = val;								
6933							}
6934
6935							
6936							
6937						}
6938						var this_group = $(this).closest('.form-group');
6939						if(error_str.length > 0) {
6940							var error_icon = '\
6941									<svg class="error-icon" viewBox="0 0 13 13" width="13" height="13">\
6942										<path d="M6.5 0C2.91 0 0 2.91 0 6.5S2.91 13 6.5 13 13 10.09 13 6.5 10.09 0 6.5 0zM6.5 12C3.47 12 1 9.53 1 6.5S3.47 1 6.5 1 12 3.47 12 6.5 9.53 12 6.5 12z"/>\
6943										<rect x="6" y="3" width="1" height="5"/>\
6944										<rect x="6" y="9" width="1" height="1"/>\
6945									</svg>\
6946							';
6947
6948							this_group.addClass('has-error');
6949							if(this_group.find('.mng-error').length > 0 ) this_group.find('.mng-error').html(error_icon + error_str);
6950							else this_group.append('<span class="mng-error">' + error_icon + error_str + '</span>');
6951
6952							if($(this).closest('.form-horizontal').find('.has-error').length == 0) $(this).focus();
6953						}
6954					}).promise().done(function() {
6955						
6956						check_error = ($('.info-modal').find('.has-error').length == 0) ? true : false;
6957						if(!check_error) {
6958							$('.info-modal').find('.has-error').first().find('input').focus();
6959							return false; 
6960						} else {
6961							// deletes 클래스가 있는 파일들 수집
6962							var deletedFiles = [];
6963							$('.info-modal .valueCheck[data-etcidx]').each(function() {
6964								var $inputElement = $(this);
6965								
6966								deletedFiles.push({
6967									file_name: $inputElement.attr('data-file-name'),
6968									etcIdx: $inputElement.attr('data-etcidx'),
6969									id: $inputElement.attr('data-id')
6970								});
6971							});
6972							$.processON();
6973							
6974							$.ajax({
6975								type: 'POST',
6976								url: '/umember/update/type/member',
6977								data: { sid : SID, val: JSON.stringify(info_data), uid : uid ,addrnoupdate : data.umseq,deleted_files: JSON.stringify(deletedFiles)},
6978								dataType: 'json',
6979								async: true,
6980								success: function(data) {
6981										
6982									if(typeof data.error != 'undefined' && data.error) {
6983										$.each(data.error, function(key,str) {
6984											if(info_modal.find('#member-'+key).length > 0 ) {
6985												info_modal.find('#member-'+key).focus();
6986												if(info_modal.find('#member-'+key).closest('.form-group').find('.mng-error').length > 0) info_modal.find('#member-'+key).closest('.form-group').find('.mng-error').text(str);
6987												else info_modal.find('#member-'+key).closest('.form-group').append('<span class="mng-error">' + str + '</span>');
6988											} else { alert(str); return false; }
6989										});
6990										$.processOFF();
6991
6992										if(info_modal.find('.mng-error').length > 0) return false;
6993									}
6994									$.processOFF(); // 성공 시에도 processOFF 호출
6995
6996									slog_more += '\
6997									<div class="slog-jcol-wrap">\
6998										<ul class="slog-jcol-ul">\
6999										';
7000										$.each(slog_more_array, function(key,v){
7001											v = (v.indexOf('`')>-1) ? v.replace(/`/gi,', ') : v;					
7002											slog_more += '\
7003											<li class="slog-jcol-li">\
7004												<div class="slog-jcol-title">'+key+'</div>\
7005												<div class="slog-jcol-contents">'+v+'</div>\
7006											</li>\
7007											';
7008										});
7009					
7010									slog_more += '\
7011											</ul>\
7012										</div>\
7013									';
7014
7015									//console.log(slog_more);
7016									setSiteLogs('um.edit','info',{'id':uid,'more':slog_more},'um.list');
7017
7018									info_modal.find('.mng-error').remove();									
7019									info_data.addr = info_data.addr1+' '+info_data.addr2;
7020									console.log(info_data);
7021									$.each(info_data, function(k, v) {
7022										if(k == 'gender') {
7023											v = (v == '01')? '남':'여';
7024										}
7025										// fupload 타입 값인지 확인하고 기존 함수 활용
7026										if (typeof v === 'string' && v.indexOf('storage.googleapis.com/cr-resource/flink') > -1) {
7027											var fileResult = $.umember.fileurlcreate(v);
7028											if (fileResult.download_link) {
7029												v = fileResult.download_link + 
7030													fileResult.file_info.name + ' (' + fileResult.file_info.size_display + ')</a>';
7031											}
7032										}
7033										// HTML이 포함된 경우 html() 메서드 사용
7034										if (typeof v === 'string' && v.indexOf('<a') > -1) {
7035											$('.mng-list table tr[data-uid="' + uid + '"]').find('.'+k).html(v);
7036										} else {
7037
7038											$('.mng-list table tr[data-uid="' + uid + '"]').find('.'+k).text(v);
7039										}					
7040
7041									});
7042
7043									info_modal.modal('hide');
7044								},
7045								error: function(xhr, status, error) {
7046									console.error('AJAX 요청 실패:', error);
7047									$.processOFF(); // 에러 시에도 processOFF 호출
7048								}
7049							});
7050						}
7051
7052					});
7053
7054				}, closed_txt, 'save', 'memberinfo-modal cl-cmmodal cl-s-btn cover', true, '', function() {
7055					
7056					var regexp = {
7057							name: /^[a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣 ]*$/i,
7058							nick: /^[a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣 ]*$/i,
7059							email: /^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/i,
7060							tel: /^[0-9-+]*$/,
7061							birth: /^(19[0-9][0-9]|20\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/,
7062						};
7063
7064					var info_recheck_regexp = function(input,event_type) {
7065						var type = $(input).attr('id').replace(/member-/i,''),
7066							val = $(input).val().trim(),
7067							emoji_val = (type.indexOf('addr') > -1) ? $('#member-addr1').val().trim() + ' ' + $('#member-addr2').val().trim() : '',
7068							error_str = '';
7069
7070						if(checkEmojis(emoji_val)) error_str = $.lang[LANG]['config.unable.emoji'];
7071						else if(regexp.hasOwnProperty(type)) {
7072							if(!regexp[type].test(val)) error_str = $.lang[LANG]['siteum.regexp.check.'+type];
7073							else {
7074								var checkDuplicate = (	event_type == 'blur' &&
7075														$.inArray(type, ['email','nick']) > -1 &&
7076														typeof $(input).attr('data-prev') != 'undefined' && 
7077														$(input).attr('data-prev').trim().toLowerCase() != val.toLowerCase()
7078													) ? true : false;
7079								if(type == 'email' && $('input#member-id').val().trim().toLowerCase() == val.toLowerCase()) checkDuplicate = false;
7080								else if(type == 'nick' && ($('input#member-nick').val().trim().length < 1 || $('input#member-nick').val().trim().length > 20)) {
7081									checkDuplicate = false;
7082									error_str = $.lang[LANG]['siteum.regexp.check.nick'];
7083								}
7084								if(checkDuplicate) {
7085									var splan = (typeof VALIDTYPE != 'undefined' && VALIDTYPE) ? VALIDTYPE : '';
7086									$.post('/umember/join/used_check', { sid : SID, field : type, data : val, splan : splan }, function(check_result) {
7087										if(typeof check_result.error != 'undefined' && check_result.error) {
7088											error_str = check_result.error;
7089										}
7090									}, 'json');
7091								}
7092							}
7093						}
7094
7095							
7096						if(error_str.length > 0) {
7097							var error_html = '<span class="mng-error">\
7098									<svg class="error-icon" viewBox="0 0 13 13" width="13" height="13">\
7099										<path d="M6.5 0C2.91 0 0 2.91 0 6.5S2.91 13 6.5 13 13 10.09 13 6.5 10.09 0 6.5 0zM6.5 12C3.47 12 1 9.53 1 6.5S3.47 1 6.5 1 12 3.47 12 6.5 9.53 12 6.5 12z"/>\
7100										<rect x="6" y="3" width="1" height="5"/>\
7101										<rect x="6" y="9" width="1" height="1"/>\
7102									</svg>' + error_str + '</span>\
7103							';
7104
7105							$(input).closest('.form-group').addClass('has-error');
7106							if($(input).closest('.form-group').find('.mng-error').length > 0) $(input).closest('.form-group').find('.mng-error').replaceWith(error_html);
7107							else $(input).closest('.form-group').append(error_html);
7108						} else {
7109							$(input).closest('.form-group').removeClass('has-error').find('.mng-error').remove();
7110						}
7111					}
7112
7113					$('.info-modal .form-control').live({
7114						keyup : function(e) { info_recheck_regexp($(this),'keyup');	},
7115						blur  : function(e) { info_recheck_regexp($(this),'blur');	}
7116					});
7117
7118				});
7119
7120
7121				$('#member-memo').live('keyup', function() {
7122					var str = $(this).val();
7123					if(str.length > 0) $(this).closest('.form-group').find('.mng-error').remove();
7124					$(this).next('label').find('.write-count').text(str.length);
7125					if(str.length > 1000) {
7126						$(this).val($(this).val().substring(0, 1000));
7127					}
7128				});
7129				if(no_active_btn) $('.memberinfo-modal.cl-cmmodal .ok-button-dialog.btn-sm').addClass(no_active_btn);
7130			} else { // only show__
7131				var info_modal = $(this).showModalFlat($.lang[LANG]['manager.member.details.title'], modal_content, true, false, '', 'ok', '', 'member-waitlist cl-cmmodal cl-s-btn cover');
7132				if(no_active_btn) $('.member-waitlist.cl-cmmodal .ok-button-dialog.btn-sm').addClass(no_active_btn);
7133			}
7134
7135
7136		}, 'json');
7137
7138	});
7139
7140	/***************************************************************************************************************************************member-list page END*/
7141
7142
7143
7144
7145
7146	/*********************************************************************************************************************************member-waitlist page START*/
7147	$('.approval-btn, .deny-btn').live('click', function() {
7148		if($(this).hasClass('member_disabled')) {
7149			siteNotice('manager');
7150			return false;
7151		}
7152		var position = $(this).closest('td'),
7153			uno = $(this).closest('tr').attr('data-uno'),
7154			uid = $(this).closest('tr').attr('data-uid'),
7155			result = ($(this).hasClass('approval-btn')) ? 'hand' : 'deny',
7156			wait_cnt = parseInt($(this).closest('.mng-wrap').find('.wait-count').text()),
7157			isDeny = $(this).hasClass('deny-btn') ? true : false,
7158			applyhtml = '';
7159
7160		if(isDeny) $(this).parents('tr[data-uno="'+uno+'"]').find('.member-info').addClass('hide');
7161
7162		$.post('/umember/update/type/approval', { sid : SID, val : result, uid : uid, uno : uno }, function(data) {
7163			if(typeof data.error != 'undefined' && data.error) {
7164				alert(data.error);
7165				return false;
7166			}
7167			
7168			applyhtml += '\
7169						<span>'+$.lang[LANG]['manager.wait-list.approval.'+result]+'</span>\
7170						<span>('+data.result.um_approvaldate+')</span>\
7171						';
7172			$('.mng-settings[data-type="member-waitlist"]').find('.wait-count').text(wait_cnt-1);
7173			position.html(applyhtml).addClass('approval-status');
7174		}, 'json');
7175
7176	});
7177	/***********************************************************************************************************************************member-waitlist page END*/
7178
7179	/********************************************************************************************************************************member-blocklist page START*/
7180	
7181	$('.block-add-btn').live('click', function() {
7182		if($(this).hasClass('member_disabled')) {
7183			siteNotice('manager');
7184			return false;
7185		}
7186		var mng_settings_el = $(this).closest('.mng-settings'),
7187			add_content = '\
7188			<div class="form-row">\
7189				<div class="form-inline clearfix">\
7190					<div class="form-group col-sm-5">\
7191						<select id="block-type" class="form-control" name="block-type" placeholder="Search">\
7192							<option value="id">회원 아이디</option>\
7193							<option value="ip">IP</option>\
7194						</select>\
7195					</div>\
7196					<div class="form-group col-sm-7"><input class="form-control" type="text" id="block-data"/></div>\
7197				</div>\
7198			</div>\
7199		';
7200
7201		var modal = $(this).showModalFlat('Block data add', add_content, true, true, function() {
7202			var key = modal.find('#block-type').val(),
7203				val = modal.find('#block-data').val().trim(),
7204				regExp_ip = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/gi;
7205
7206			if(key === null) {
7207				modal.find('#block-type').click();
7208				return false;
7209			} else if(modal.find('.error').length > 0) {
7210				modal.find('#block-data').focus();
7211				return false;
7212			} else if (modal.find('#block-data').val().trim().length == 0) {
7213				modal.find('#block-data').focus();
7214				modal.find('#block-data').parent().append('<span class="error">내용을 입력하세요</span>');
7215				return false;
7216			} else if (key == 'ip' && !regExp_ip.test(val)) {
7217				modal.find('#block-data').focus();
7218				modal.find('#block-data').parent().append('<span class="error">ip 형식이 올바르지 않습니다.</span>');
7219				return false;
7220			}
7221
7222				$.ajax({
7223					type: 'POST',
7224					url: '/umember/set/type/block',
7225					data: { sid : SID, key : key, val : val },
7226					dataType: 'json',
7227					async: true,
7228					success: function(data) {
7229
7230						if(typeof data.error != 'undefined' && data.error) {
7231							if(modal.find('.error').length == 0) modal.find('#block-data').focus().parent().append('<span class="error">' + data.error + '</span>');
7232							else modal.find('#block-data').focus().next('.error').text(data.error);
7233							return false;
7234						} else {
7235							modal.modal('hide');
7236							window.location.reload();
7237						}
7238
7239					}
7240				});
7241
7242
7243		}, 'cancel','save', 'block-add-modal');
7244
7245		$('#block-data').live({
7246			keyup: function() {
7247				$(this).parent().find('.error').remove();
7248			}
7249		});
7250
7251
7252	});
7253
7254	$('.block-clear-btn').live('click', function() {
7255		if($(this).hasClass('member_disabled')) {
7256			siteNotice('manager');
7257			return false;
7258		}
7259		var block_type = $(this).closest('tr').find('.type').attr('data-type'),
7260			block_val = $(this).closest('tr').find('.val').text().trim(),
7261			block_id = $(this).closest('tr').find('.id').text().trim(),
7262			block_data = $(this).closest('tr').attr('data-id'),
7263			is_uadmin = $(this).parents('.mng-member').attr('data-uadmin');
7264
7265		if(block_data == 0) return false;
7266		else {
7267			var modal_content = '\
7268				<div class="mng-modal-body clear-modal">\
7269					<p class="addressee-wrap">\
7270						'  + $.lang[LANG]['manager.block-list.block.clear.txt.1'] + '\
7271						<span class="addressee-name">' + block_id + '</span> \
7272						' + $.lang[LANG]['manager.block-list.block.clear.txt.2'] + '\
7273					</p>\
7274				</div>\
7275				';	
7276
7277			var modal = $(this).showModalFlat($.lang[LANG]['manager.block-list.block.clear.title'], modal_content, true, true, function() {
7278
7279				$.ajax({
7280					type: 'POST',
7281					url: '/umember/delete/type/block',
7282					data: { sid : SID, val : block_data, block_type : block_type, block_val : block_val },
7283					async: true,
7284					success: function(data) {
7285						if(typeof data.error != 'undefined' && data.error) {
7286							alert(data.error);
7287							return false;
7288						} else {
7289							var cntTr = $(this).parents('table').length;
7290
7291							if(cntTr > 0) window.location.reload();
7292							else location.href = is_uadmin+'/member/blocklist';							
7293						}
7294					}
7295				});
7296
7297			},'cancel','','cl-cmmodal cl-s-btn w560 cl-p130 cl-p0');
7298
7299		}
7300
7301	});
7302
7303	/**********************************************************************************************************************************member-blocklist page END*/
7304
7305
7306	/********************************************************************************************************************************member-leavelist page START*/
7307	$('.leavelist .mng-selectboxlist select.form-control').live('change',function() {
7308		var url_str = ($('header').hasClass('_admin')) ?  '/_admin/member/leavelist' : '/manager/member/leavelist',
7309			sfl_sort = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_sort').val(),
7310			sfl_view = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_view').val(),
7311			stx =  $(this).parents('.mng-list').find('.mng-search-box').find('#stx').val();
7312
7313		location.replace(url_str+'/page/1/sort/'+sfl_sort+'/view/'+sfl_view);
7314	});
7315
7316	$('.leavelist .mng-search-box .search-btn').live('click',function(e) {
7317		var url_str = ($('header').hasClass('_admin')) ?  '/_admin/member/leavelist' : '/manager/member/leavelist',
7318			sfl_sort = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_sort').val(),
7319			sfl_view = $(this).parents('.mng-list').find('.mng-subMenu-list').find('#sfl_view').val(),
7320			stx =  $(this).parents('.mng-search-box').find('#stx').val();
7321
7322		if(checkEmojis(stx)) {
7323			e.preventDefault();
7324			errorEmojisModal();
7325			return false;
7326		}
7327
7328		setSiteLogs('um.leavelist','search',{'stx':stx},'um.leavelist');
7329
7330		if(stx.length > 0) stx = '/stx/'+stx;
7331		location.replace(url_str+'/page/1/sort/'+sfl_sort+'/view/'+sfl_view+stx);
7332	});
7333
7334	function escapeHtml(str) {
7335		return str
7336			.replace(/&/g, '&amp;')
7337			.replace(/"/g, '&quot;')
7338			.replace(/'/g, '&#39;')
7339			.replace(/</g, '&lt;')
7340			.replace(/>/g, '&gt;');
7341	}
7342	/**********************************************************************************************************************************member-leavelist page END*/
7343
7344
7345	/****************************************************************************************************************************************Mypage Modal START*/	
7346	$('.my-cl-edit').live({
7347		click: function() {
7348			var cl = $('.mng-settings[data-type="profile"]').find('.cl-wrap'),
7349				sid = $('#mypage-modal').attr('data-sid'),
7350				uid = $('#mypage-modal').attr('data-uid');
7351
7352			var clInput = function(type, value) {
7353				if(type == 'id') return;
7354				var str = '\
7355						<div class="input-group my-cl-update-wrap">\
7356				';
7357
7358				$.each(value, function(i,v) {
7359
7360					if(type == 'addr') {
7361						var plan_type = (typeof property != 'undefined' && property) ? property.VALIDTYPE : VALIDTYPE,
7362							checkSM = (typeof plan_type != 'undefined' && (plan_type == 'SM' || plan_type == 'SHOPPING')) ? true : false,
7363							usedAddrSearchModal = (checkSM && i==1) ? 'readonly onclick="addrSearchModal(\'my-input\')"' : '';
7364							field_name = (i == 0) ? 'postcode' : type + i,
7365							hide_class = (i == 0) ? 'hide' : '';
7366
7367						str += '\
7368								<input type="text" id="my-input-'+field_name+'" class="my-cl-update form-control ' + hide_class + '" placeholder="' + $.lang[LANG]['manager.join.cl.item.name.enter'] + '" value="' + v + '" data-type="' + type + '"/ ' + usedAddrSearchModal + '>\
7369						';
7370					} else {
7371						str += '\
7372								<input type="text" id="my-input-'+type+'" class="my-cl-update form-control" placeholder="' + $.lang[LANG]['manager.join.cl.item.name.enter'] + '" value="' + v + '" data-type="' + type + '"/>\
7373						';
7374					}
7375
7376				});
7377				str += '\
7378						</div>\
7379				';
7380				return str;
7381			}
7382			$(this).hide();
7383			cl.find('.my-cl-cancel,.my-cl-save').show();
7384			cl.addClass('update-mode');
7385			cl.children().each(function() {
7386				var type = $(this).attr('data-type'),
7387					value = $(this).find('.my-data').map(function() { return $(this).text().trim(); }).get(),
7388					input_text = clInput(type,value);
7389
7390				if(type != 'id') $(input_text).prependTo($(this).find('.mng-panel-body'));
7391				if(cl.children('.focus').length == 0) $(this).addClass('focus').find('input').focus();
7392			});
7393
7394
7395
7396		}
7397	});
7398
7399	$('.my-cl-cancel').live({
7400		click: function() {
7401			var cl = $('.mng-settings[data-type="profile"]').find('.cl-wrap');
7402
7403			cl.find('.mng-error').remove();
7404			cl.find('.my-cl-cancel,.my-cl-save').hide();
7405			cl.find('.my-cl-edit').show();
7406			cl.removeClass('update-mode');
7407			cl.children().each(function() {
7408				$(this).find('.my-cl-update-wrap').remove();
7409			});
7410		}
7411	});
7412
7413	$('.my-cl-save').live({
7414		click: function() {
7415			var cl = $('.mng-settings[data-type="profile"]').find('.cl-wrap'),
7416				sid = $('#mypage-modal').attr('data-sid'),
7417				uid = $('#mypage-modal').attr('data-uid'),
7418				cl_data = {},
7419				check_error = false;
7420
7421			if(cl.find('.has-error').length > 0) cl.find('.has-error').addClass('foucs').find('.my-cl-update').first().focus();
7422
7423			var recheck_regexp = function(input) {
7424				var field = input.attr('data-type'),
7425					val = input.val(),
7426					reg_has = (typeof COLLECTION_REGEX[field] != 'undefined' && COLLECTION_REGEX[field]) ? true : false,
7427					reg_pattern = (reg_has) ? COLLECTION_REGEX[field]['pattern_j'] : '',
7428					reg = new RegExp(reg_pattern),
7429					reg_ex = (reg_has) ? COLLECTION_REGEX[field]['ex'] : '';
7430
7431				if(reg_has && !reg.test(val)) {
7432					input.closest('.mng-panel-body').find('.mng-error').text(reg_ex);
7433				} else {
7434					input.closest('.mng-panel').removeClass('has-error').find('.mng-error').remove();
7435				}
7436			}
7437
7438			$('#mypage-modal .mng-settings[data-type="profile"] .my-cl-update').live({
7439				focus: function(e) { $(this).closest('.mng-panel').addClass('focus').siblings().removeClass('foucs'); },
7440				keyup : function(e) { recheck_regexp($(this)); },
7441				blur  : function(e) { $(this).closest('.mng-panel').removeClass('focus'); }
7442			});
7443
7444			cl.children('.mng-panel:not([data-type="id"])').each(function() {
7445				var field = $(this).attr('data-type'),
7446					optional = $(this).hasClass('optional') ? true : false,
7447					value = $(this).find('.my-cl-update').map(function() { return $(this).val().trim(); }).get(),
7448					this_cl = $(this),
7449					// prev_value = $(this).find('.my-data').map(function() { return $(this).text().trim(); }).get(),
7450					error_str = '',
7451					reg_has = (typeof COLLECTION_REGEX[field] != 'undefined' && COLLECTION_REGEX[field]) ? true : false,
7452					reg_pattern = (reg_has) ? COLLECTION_REGEX[field]['pattern_j'] : '',
7453					reg = new RegExp(reg_pattern),
7454					reg_ex = (reg_has) ? COLLECTION_REGEX[field]['ex'] : '';
7455
7456				$.each(value, function(i,v) {
7457
7458					if(field == 'addr' && i == 0) return true;
7459
7460					var field_name = (field == 'addr') ? field + i : field,
7461						this_wrap = this_cl.find('.mng-panel-body'); 
7462
7463					if(optional && v.length==0 && i==0) error_str = $.lang[LANG]['manager.check.required.message'];
7464					else if(reg_has && !reg.test(v)) {
7465						error_str = (v.length == 0 && !optional) ? '' : COLLECTION_REGEX[field]['error'];
7466					}
7467					
7468					if(error_str.length > 0)  {
7469						this_cl.addClass('has-error');
7470						if(this_wrap.find('.mng-error').length > 0) this_wrap.find('.mng-error').text(error_str);
7471						else this_wrap.append('<span class="mng-error">' + error_str + '</span>');
7472
7473						if(cl.find('.mng-panel.focus').length == 0) this_cl.find('.my-input-'+field_name).focus();
7474					} else {
7475						this_cl.removeClass('has-error');
7476						this_wrap.find('.mng-error').remove();
7477
7478						if(field == 'addr' && i == 1) {
7479							var postcode = $('#my-input-postcode').val();
7480							v = (typeof postcode != 'undefined' && postcode) ? postcode.trim() + '|| ' + v : ' || ' + v;
7481						}
7482
7483						cl_data[field_name] = v;
7484					}
7485				});
7486			}).promise().done(function() {
7487				var check_error = (cl.find('.has-error').length == 0) ? true : false;
7488
7489				if(!check_error) {
7490					cl.find('.has-error').first().first('input').focus();
7491				} else {
7492					$.ajax({
7493						type: 'POST',
7494						url: '/umember/update/type/member',
7495						data: { sid : sid, val: JSON.stringify(cl_data), uid : uid },
7496						dataType: 'json',
7497						async: true,
7498						success: function(data) {
7499							// if(typeof data.error != 'undefined' && data.error) {
7500							// 	alert(data.error);
7501							// 	return false;
7502							// }
7503							if(typeof data.error != 'undefined' && data.error) {
7504								$.each(data.error, function(key,str) {
7505									if(cl.find('#my-input-'+key).length > 0 ) {
7506										cl.find('#my-input-'+key).focus();
7507										cl.find('#my-input-'+key).closest('.mng-panel-body').append('<span class="mng-error">' + str + '</span>');
7508									} else { alert(str); return false; }
7509								});
7510								if(cl.find('.mng-error').length > 0) return false;
7511							}
7512							cl.find('.mng-error').remove();
7513
7514							cl.find('.my-cl-cancel,.my-cl-save').hide();
7515							cl.find('.my-cl-edit').show();
7516							cl.removeClass('update-mode');
7517							$.each(cl_data,function(k,v) {
7518
7519								if(k == 'addr1') {
7520									var addr_arr = v.split('||'),
7521										postcode_str = (addr_arr[0]) ? addr_arr[0].trim() : '';
7522									cl.find('.my-postcode').text(postcode_str);
7523									v = (addr_arr[1]) ? addr_arr[1].trim() : '';
7524								}
7525
7526								cl.find('.my-'+k).text(v);
7527
7528								if(k == 'nick') {
7529									if($('._admin_dashboard .site-info .site-data .site-username').length > 0) {
7530										$('._admin_dashboard .site-info .site-data .site-username').text(v).attr('data-user-name',v);
7531									}
7532									if($('#mobile-nav').length > 0) $('#mobile-nav .login-nick span').text(v);
7533								}
7534							});
7535							cl.find('.my-cl-update-wrap').remove();
7536						}
7537					});
7538				}
7539
7540			});
7541
7542
7543		}
7544	});
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555	$('.mng-siteUM-modal .my-image-edit').live({
7556		click: function() {
7557			var sid = $('#mypage-modal').attr('data-sid'),
7558				uid = $('#mypage-modal').attr('data-uid'),
7559				src = $('.mng-settings[data-type="profile"]').find('.my-image').attr('src');
7560
7561			$.umember.showMyImageUploadModal(sid, uid, src);
7562		}
7563	});
7564
7565
7566	$('.mng-siteUM-modal .my-password-save').live({
7567		click: function() {
7568			var mypageModal = $('#mypage-modal'),
7569				myPasswordWrap = mypageModal.find('.mng-settings[data-type="password-change"]'),
7570				mng_settings_el = $(this).closest('.mng-settings');
7571
7572			myPasswordWrap.find('input.form-control').each(function() {
7573				var field = $(this).attr('id').trim().replace(/input-/,''),
7574					val = $(this).val(),
7575					errorEL = $(this).next('.mng-error'),
7576					error_str = '',
7577					reg_has = (field != 'new-password-checked') ? true : false,
7578					reg_pattern = (reg_has) ? COLLECTION_REGEX['password']['pattern_j'] : '',
7579					reg = new RegExp(reg_pattern),
7580					reg_error = (reg_has) ? COLLECTION_REGEX['password']['error'] : '';
7581
7582				if(val.length == 0) error_str = $.lang[LANG]['siteum.regexp.password.input'];
7583				else {
7584					if(reg_has && !reg.test($(this).val()) ) error_str = reg_error;
7585					else if( field == 'new-password-checked' && ($(this).val() != myPasswordWrap.find('#input-new-password').val())) error_str = $.lang[LANG]['siteum.regexp.pw.invalid'];
7586				}
7587
7588				if(error_str.length > 0) {
7589					if(errorEL.length > 0 ) errorEL.addClass('empty').text(error_str);
7590					else $(this).after('<span class="mng-error empty">'+ $.lang[LANG]['siteum.regexp.password.input'] + '</span>');
7591
7592					if(myPasswordWrap.find('.mng-panel-body.focus').length == 0) $(this).focus();
7593					else { myPasswordWrap.find('.mng-panel-body.focus input').focus(); }
7594				} else {
7595					errorEL.remove();
7596					$(this).closest('.mng-panel-body').removeClass('focus');
7597				} 
7598			});
7599
7600
7601			if(myPasswordWrap.find('.mng-error').length == 0) {
7602				var uid = mypageModal.find('.my-id').text(),
7603					pw = hex_md5(myPasswordWrap.find('#input-password').val()),
7604					new_pw = hex_md5(myPasswordWrap.find('#input-new-password').val());
7605
7606				$.post('/umember/password/change', { uid : uid, pw : pw, new_pw : new_pw }, function(data) {
7607					if(typeof data.error != 'undefined' && data.error) {
7608						$.each(data.error, function(key,str) {
7609							if(mypageModal.find('#input-'+key).length > 0) {
7610								mypageModal.find('#input-'+key).closest('.mng-panel-body').append('<span class="mng-error">' + str + '</span>');
7611								mypageModal.find('#input-'+key).focus();
7612							} else { alert(str,'/manager/member'); return false; }
7613						});
7614						if(mypageModal.find('.mng-error').length > 0) return false;
7615					}
7616					mypageModal.find('input.form-control').val('');
7617					mngShowToast('check', $.lang[LANG]['siteum.forgot.pw.success'], mng_settings_el);
7618
7619				}, 'json');
7620			}
7621
7622
7623
7624
7625		}
7626	});
7627
7628	$('.mng-siteUM-modal .mng-settings[data-type="password-change"] input.form-control').live({
7629		focus: function() {
7630			$(this).closest('.mng-panel-body').addClass('focus').siblings().removeClass('focus');
7631		}, 
7632		blur: function() {
7633			$(this).closest('.mng-panel-body').removeClass('focus');
7634		},
7635		keyup: function() {
7636
7637			var field = $(this).attr('id').trim().replace(/input-/,''),
7638				groupEl = $(this).closest('.mng-panel-body'),
7639				errorEL = $(this).next('.mng-error'),
7640				reg_pw = (field == 'new-password-checked') ? field : 'password',
7641				reg_has = (typeof COLLECTION_REGEX[reg_pw] != 'undefined' && COLLECTION_REGEX[reg_pw]) ? true : false,
7642				reg_pattern = (reg_has) ? COLLECTION_REGEX[reg_pw]['pattern_j'] : '',
7643				reg_ex = (reg_has) ? COLLECTION_REGEX[reg_pw]['ex'] : '';
7644
7645			if(field == 'new-password' || field == 'new-password-checked') {
7646				var pwEl = $('.mng-settings[data-type="password-change"]').find('#input-new-password'),
7647					pw2El = $('.mng-settings[data-type="password-change"]').find('#input-new-password-checked'),
7648					error_str = $.lang[LANG]['siteum.regexp.pw.invalid'];
7649
7650				if(pwEl.val() == pw2El.val()) { 
7651					pw2El.next('.mng-error').remove();
7652				} else {
7653					if(pw2El.val().length > 0) {
7654						if(pw2El.next('.mng-error').length > 0) pw2El.next('.mng-error').removeClass('empty').text(error_str);
7655						else pw2El.closest('.mng-panel-body').append('<span class="mng-error">'+ error_str + '</span>');
7656					}
7657				}
7658
7659			}
7660
7661			if(reg_has && errorEL.length > 0) { 
7662				var reg = new RegExp(reg_pattern);
7663				if(reg.test($(this).val())) errorEL.remove();
7664				else { errorEL.removeClass('empty').text(reg_ex); }
7665			}
7666
7667		}
7668	});
7669
7670	$('.mng-siteUM-modal .my-account-remove').live({
7671		click: function() {
7672			var sid = $('#mypage-modal').attr('data-sid'),
7673				uid = $('#mypage-modal').attr('data-uid');
7674
7675			var content = '\
7676				<div class="mng-in-flat-modal-wrap">\
7677					<div class="my-account-remove-info text-left">\
7678						<strong>' + $.lang[LANG]['manager.mypage.my-remove.txt.1'] + '</strong>\
7679						<ol>\
7680							<li>' + $.lang[LANG]['manager.mypage.my-remove.txt.2'] + '</li>\
7681							<li>' + $.lang[LANG]['manager.mypage.my-remove.txt.3'] + '</li>\
7682							<li>' + $.lang[LANG]['manager.mypage.my-remove.txt.4'] + '</li>\
7683						</ol>\
7684					</div>\
7685					<div class="my-account-remove-check clearfix">\
7686						<div class="checkboxs hand">\
7687							<input type="checkbox" class="my-account-remove-agree" id="my-account-remove-agree">\
7688							<strong>' + $.lang[LANG]['manager.mypage.my-remove.agree.txt'] + '</strong>\
7689						</div>\
7690					</div>\
7691				</div>\
7692			';
7693
7694			$('.my-account-remove-agree').live({
7695				click: function() {
7696					if($(this).prop('checked')) $(this).closest('.my-account-remove-check').find('.mng-error').remove();
7697				}
7698			});
7699
7700			$('.my-account-remove-input-password').live({
7701				keyup: function() {
7702					if($(this).val().length > 0) $(this).closest('.form-group').find('.mng-error').remove();
7703				}
7704			});
7705
7706			var agreeModal = $(this).showModalFlat('DELETE ACCOUNT', content, true, true, function() {
7707				var checked = agreeModal.find('#my-account-remove-agree').prop('checked'),
7708					errorEL = agreeModal.find('.my-account-remove-check').find('.mng-error'),
7709					error_str = (!checked) ? $.lang[LANG]['manager.mypage.my-remove.agree.check'] : '';
7710
7711				if(!checked) {
7712					if(errorEL.length > 0) errorEL.text(error_str);
7713					else $('.my-account-remove-check').append('<span class="mng-error">' + error_str + '</span>');
7714					return false;
7715				}
7716
7717				var udata_content = '\
7718					<div class="mng-in-flat-modal-wrap padding-top-0">\
7719						<p style="margin-bottom: 15px;">' + $.lang[LANG]['manager.mypage.my-remove.description'] + '</p>\
7720						<span class="form-group">\
7721							<input class="form-control" type="password" id="input-password" placeholder="' + $.lang[LANG]['siteum.regexp.password.input'] + '">\
7722						</span>\
7723					</div>\
7724				';
7725
7726				var removeModal = $(this).showModalFlat('DELETE ACCOUNT', udata_content, true, true, function() {
7727					var pw = removeModal.find('#input-password').val();
7728
7729					if(pw.length == 0) {
7730						if(removeModal.find('.mng-error').length > 0) removeModal.find('.mng-error').text($.lang[LANG]["siteum.regexp.password.input"]);
7731						else removeModal.find('.form-group').append('<span class="mng-error">' + $.lang[LANG]["siteum.regexp.password.input"] + '</span>');
7732
7733						removeModal.find('#input-password').focus();
7734						return false;
7735					} else {
7736						$.processON('Deleting....');
7737						var remove_data = {
7738							'id' : uid,
7739							'password' : hex_md5(pw),
7740						};
7741
7742						removeModal.find('.mng-error').remove();
7743						$.post('/umember/login/remove', { data : JSON.stringify(remove_data) }, function(data) {
7744							if(typeof data.error != 'undefined' && data.error) {
7745								$.processOFF();
7746								$.each(data.error, function(key,str) {
7747									if(removeModal.find('#input-'+key).length > 0 ) {
7748										removeModal.find('#input-'+key).closest('.form-group').append('<span class="mng-error">' + str + '</span>');
7749										removeModal.find('#input-'+key).focus();
7750									} else { alert(str); return false; }
7751								});
7752								if(removeModal.find('.mng-error').length > 0) return false;
7753							}
7754
7755							removeModal.modal('hide');
7756							agreeModal.modal('hide');
7757							$('#mypage-modal').modal('hide');
7758							$.umember.init();
7759							setTimeout(function() {
7760								$.processOFF();
7761								var successModal = $(this).showModalFlat('INFORMATION', $.lang[LANG]['manager.mypage.my-remove.success'], true, false, '', 'ok');
7762							}, '1000');
7763
7764						}, 'json');
7765					}
7766
7767					
7768				}, 'cancel', 'manager.mypage.my-remove.last-btn', 'mng-mypage-modal'); /*removeModal:: END*/
7769
7770
7771
7772			}, 'cancel', '', 'w480 mng-mypage-modal'); /*agreeModal:: END*/
7773
7774
7775		}
7776	});
7777
7778
7779	
7780
7781	/******************************************************************************************************************************************Mypage Modal END*/
7782
7783});
7784
7785// psearch 모바일 탭 좌우 그라데이션 추가 ***********************************************************************************************************************
7786document.addEventListener('DOMContentLoaded', () => {
7787	const wrap = document.querySelector('.dsgn-body .psearch-body .psearch-tabs');
7788	const nav  = wrap && wrap.querySelector('.dsgn-body .psearch-body .psearch-tab-nav, .psearch-tab-nav');
7789	if (!wrap || !nav) return;
7790
7791	const MOBILE_MQ = window.matchMedia('(max-width: 767px)');
7792	const isOverflowing = () => nav.scrollWidth > nav.clientWidth + 1;
7793
7794	/* =========================
7795	   1) 모바일 그라데이션(페이드)
7796	========================= */
7797	const updateFade = () => {
7798		const max = nav.scrollWidth - nav.clientWidth;
7799
7800		if (!MOBILE_MQ.matches || max <= 1) {
7801			wrap.classList.remove('has-left', 'has-right');
7802			return;
7803		}
7804
7805		wrap.classList.toggle('has-left', nav.scrollLeft > 1);
7806		wrap.classList.toggle('has-right', nav.scrollLeft < max - 1);
7807	};
7808
7809	nav.addEventListener('scroll', updateFade, { passive: true });
7810	window.addEventListener('resize', updateFade);
7811	MOBILE_MQ.addEventListener?.('change', updateFade);
7812	requestAnimationFrame(() => requestAnimationFrame(updateFade));
7813
7814
7815	/* =========================
7816	   2) PC(마우스) 드래그 스크롤 (클릭 살리는 버전)
7817	   - threshold 이상 움직였을 때만 drag로 전환
7818	   - 그때만 setPointerCapture + preventDefault
7819	========================= */
7820	const DRAG_THRESHOLD = 6;
7821
7822	let pointerId = null;
7823	let down = false;
7824	let dragging = false;
7825	let startX = 0;
7826	let startLeft = 0;
7827	let moved = 0;
7828	let suppressClick = false;
7829
7830	nav.addEventListener('pointerdown', (e) => {
7831		if (e.pointerType !== 'mouse') return;
7832		if (!isOverflowing()) return;
7833		if (e.button !== 0) return;
7834
7835		down = true;
7836		dragging = false;
7837		suppressClick = false;
7838		moved = 0;
7839
7840		pointerId = e.pointerId;
7841		startX = e.clientX;
7842		startLeft = nav.scrollLeft;
7843	});
7844
7845	nav.addEventListener('pointermove', (e) => {
7846		if (!down) return;
7847		if (e.pointerId !== pointerId) return;
7848
7849		const dx = e.clientX - startX;
7850		moved = Math.max(moved, Math.abs(dx));
7851
7852		// threshold 넘어가는 순간 드래그 모드로 전환
7853		if (!dragging && moved >= DRAG_THRESHOLD) {
7854			dragging = true;
7855			suppressClick = true;
7856			nav.classList.add('is-dragging');
7857			nav.setPointerCapture?.(pointerId);
7858		}
7859
7860		if (dragging) {
7861			nav.scrollLeft = startLeft - dx;
7862			e.preventDefault(); // 드래그 중에만 텍스트 선택 방지
7863			updateFade();
7864		}
7865	});
7866
7867	const endPointer = () => {
7868		if (!down) return;
7869		down = false;
7870
7871		if (dragging) {
7872			nav.classList.remove('is-dragging');
7873		}
7874
7875		dragging = false;
7876		pointerId = null;
7877
7878		// 드래그 직후 클릭 1회만 막고 다음 클릭은 정상
7879		if (suppressClick) {
7880			setTimeout(() => { suppressClick = false; }, 0);
7881		}
7882	};
7883
7884	nav.addEventListener('pointerup', endPointer);
7885	nav.addEventListener('pointercancel', endPointer);
7886	window.addEventListener('blur', endPointer);
7887
7888	// 진짜 드래그였던 경우에만 클릭 차단
7889	nav.addEventListener('click', (e) => {
7890		if (suppressClick) {
7891			e.preventDefault();
7892			e.stopPropagation();
7893		}
7894	}, true);
7895
7896
7897	/* =========================
7898	   3) 동적 배경색 → 그라데이션 색 자동 추출
7899	========================= */
7900	const applyDynamicBg = () => {
7901		const bg = getComputedStyle(wrap).backgroundColor;
7902
7903		if (bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') {
7904			let parent = wrap.parentElement;
7905			while (parent) {
7906				const parentBg = getComputedStyle(parent).backgroundColor;
7907				if (parentBg !== 'rgba(0, 0, 0, 0)' && parentBg !== 'transparent') {
7908					wrap.style.setProperty('--tab-bg', parentBg);
7909					return;
7910				}
7911				parent = parent.parentElement;
7912			}
7913		} else {
7914			wrap.style.setProperty('--tab-bg', bg);
7915		}
7916	};
7917
7918	applyDynamicBg();
7919	window.addEventListener('resize', applyDynamicBg);
7920});
7921// psearch 모바일 탭 좌우 그라데이션 추가 end ****************************************************************************************************************
7922
7923/***********************************************************************************************************************************member-config page START*/
7924var collectionSortable = function(cancel) {
7925	cancel = (cancel) ? cancel : '.collection-item.fix[data-type="email"], .collection-item-used, .collection-item-optional, .collection-name-input, button, .collection-edit, .collection-delete, label, .collection-item-type-select';
7926
7927	$('#join-collections,#mjoin-collections').sortable({
7928		items: '.collection-item:not(.fix[data-type="email"])',
7929		handle: '.icon-move',
7930		cancel: cancel,
7931		scroll: true,
7932		placeholder: 'collection-item-placeholder',
7933		update: function(event,ui) {
7934			$.processON();
7935
7936			var update_data = {},
7937				new_data = {},
7938				d_index = 0;
7939			
7940			$('#join-collections').children('.collection-item').each(function(i,v){
7941				var org_idx = $(this).attr('data-idx'),
7942					new_idx = $(this).index(),
7943					item_seq = $(this).attr('data-seq');
7944				
7945				if(org_idx!=new_idx) {
7946					$(this).attr('data-idx',new_idx);
7947					update_data[d_index] = {
7948						seq : item_seq,
7949						idx : new_idx
7950					}
7951					d_index++;
7952				}				
7953			});							
7954		
7955			$.ajax({
7956				type: 'POST',
7957				url: '/umember/setJoinCollections/type/jcol_update',
7958				data: { sid: SID, update_data: update_data },
7959				dataType: 'json',
7960				async: true,
7961				success: function(data) {
7962					if(typeof data.error != 'undefined' && data.error) {
7963						alert(data.error);
7964						return false;
7965					}
7966			
7967					var slog_field = {'field_name':$(ui.item).find('.collection-name').text().trim(),'field':$(ui.item).attr('data-type')};
7968					setSiteLogs('um.config.collection','sort',slog_field,'um.config.collection');
7969				},
7970				complete: function () {
7971					$.processOFF();
7972				}
7973			});
7974		}
7975	}).disableSelection();
7976
7977}
7978
7979var collectionItem = function(name,etc) {
7980	var types = '';
7981
7982	$.each(COLLECTION_TYPES, function(k,v) {
7983		types = types + '<option value="' + k + '" '+((k == 'text') ? 'selected' : '')+'>' + v + '</option>';
7984	});
7985
7986	var jcollection_select_type = ['text','memo','radio','check','select','fupload'],
7987		collectionAdd = (!name) ? 'additem' : '',
7988		str = '\
7989		<div class="collection-item ' + collectionAdd + '" data-type="etc' + etc + '" data-etc="' + etc + '" data-orgjcoltype="text" data-jcoltype="" data-seq="">\
7990			<div class="collection-info">\
7991				<span class="icons icon-move cl-sort-handle hand">\
7992					<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><path d="M9 4c0 .83-.67 1.5-1.5 1.5S6 4.83 6 4s.67-1.5 1.5-1.5S9 3.17 9 4m3.5 1.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5S11 3.17 11 4s.67 1.5 1.5 1.5m-5 3C6.67 8.5 6 9.17 6 10s.67 1.5 1.5 1.5S9 10.83 9 10s-.67-1.5-1.5-1.5m5 0c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5S14 10.83 14 10s-.67-1.5-1.5-1.5m-5 6c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5S9 16.83 9 16s-.67-1.5-1.5-1.5m5 0c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5S14 16.83 14 16s-.67-1.5-1.5-1.5"/></svg>\
7993				</span>\
7994				<span class="collection-name">' + name + '</span>\
7995			</div>\
7996			<input type="text" id="collection-name-text" name="name" class="setting-input collection-name-input hide jcol-text"  value="'+ name +'" placeholder="'+$.lang[LANG]['manager.config.jcollection.item.placeholder.collection-name-input']+'">\
7997			<div class="collection-config">\
7998				<div class="icons hand">\
7999					<svg class="collection-edit memberconfig-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><g data-name="그룹_6421"><g data-name="그룹_6429"><path d="M13.57 3.22 8.27 10l-.46 2.17c-.03.16 0 .33.09.47.13.2.36.31.6.28.07 0 .13-.03.2-.06l1.95-.93 5.27-6.72.08-.1zm-4.16 7.35 4.37-5.59.46.36-4.37 5.59-.58.28.13-.63Zm3.6.95h1.25v3.12c0 1.17-.95 2.12-2.12 2.12h-6c-1.17 0-2.12-.95-2.12-2.12v-7c0-1.17.95-2.13 2.12-2.13h3.12v1.25H6.14c-.48 0-.87.39-.88.88v7c0 .48.39.87.88.88h6c.48 0 .87-.39.88-.87v-3.13Z"/></g></g></svg>\
8000				</div>\
8001				<div class="icons hand">\
8002					<svg class="collection-delete memberconfig-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><g data-name="그룹_6416"><g data-name="그룹_6428"><path d="M13.12 5.88v-2H6.89v2H3.87v1.25h1v6.88c0 1.17.95 2.12 2.12 2.12h6c1.17 0 2.12-.95 2.12-2.12V7.13h1V5.88h-3Zm-1.24 0H8.15v-.75h3.73zm1.12 9H7c-.48 0-.87-.39-.88-.88V7.12h7.75V14c0 .48-.39.87-.88.88m-2.11-7h1.25v6.25h-1.25zm-3 0h1.25v6.25H7.88z"/></g></g></svg>\
8003				</div>\
8004				<div class="use-option-check">\
8005					<div class="checkboxs hand newcheckbox">\
8006						<label>\
8007							<div class="newcheckboxSvg">\
8008								<input type="checkbox" class="collection-item-used" id="collection-item-used-additem"/>\
8009								<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="m4.4 5.6 2.21 2.21A9.03 9.03 0 0 0 3.52 12c1.27 3.59 4.67 6 8.48 6 1.35 0 2.69-.31 3.9-.9l2.5 2.5 1.2-1.2-14-14zM12 16c-2.21 0-4-1.79-4-4 0-.76.24-1.51.66-2.14l1.09 1.09c-.16.33-.24.69-.25 1.05a2.5 2.5 0 0 0 2.5 2.5c.36 0 .72-.09 1.05-.25l1.09 1.09c-.63.42-1.38.65-2.14.66m2.43-4.57-1.86-1.86c.92.22 1.64.94 1.86 1.86m6.05.57a9.05 9.05 0 0 1-2.12 3.36l-2.47-2.46a3.965 3.965 0 0 0-4.78-4.78L9.39 6.4c4.6-1.41 9.49 1.07 11.09 5.61"/></svg>\
8010								<svg class="active" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M12 6c-3.81 0-7.21 2.41-8.48 6 1.65 4.68 6.78 7.14 11.46 5.49A8.95 8.95 0 0 0 20.47 12c-1.27-3.59-4.67-6-8.48-6M12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4m2.5-4a2.5 2.5 0 0 1-5 0 2.5 2.5 0 0 1 5 0"/></svg>\
8011								<!--<label for="collection-item-used-additem"></label>-->\
8012							</div>\
8013						</label>\
8014					</div>\
8015					<div class="checkboxs hand newcheckbox">\
8016						<label>\
8017							<div class="newcheckboxSvg">\
8018								<input type="checkbox" class="collection-item-optional" id="collection-item-optional-additem"/>\
8019								<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><g data-name="그룹_6435"><path class="collection-optional-bg" d="M5 2h10c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H5c-1.66 0-3-1.34-3-3V5c0-1.66 1.34-3 3-3" data-name="패스_4513"/><path class="collection-optional-line" d="M15 3.25c.97 0 1.75.78 1.75 1.75v10c0 .97-.78 1.75-1.75 1.75H5c-.97 0-1.75-.78-1.75-1.75V5c0-.97.78-1.75 1.75-1.75zM15 2H5C3.34 2 2 3.34 2 5v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3"/></g></svg>\
8020								<svg class="active" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><path d="M15 2H5C3.34 2 2 3.34 2 5v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3m.03 6.03-5.5 5.5c-.29.29-.77.29-1.06 0l-3.5-3.5a.754.754 0 0 1 0-1.06c.29-.29.77-.29 1.06 0L9 11.94l4.97-4.97c.3-.29.77-.28 1.06.02.28.29.28.75 0 1.04"/></svg>\
8021								<!--<label for="collection-item-optional-additem"></label>-->\
8022							</div>\
8023						</label>\
8024					</div>\
8025				</div>\
8026			</div>\
8027			<div class="clear"></div>\
8028			<div class="collection-item-content" style="display:none;">\
8029				<div class="collection-item-content-wrap">\
8030					<div class="collection-type-selectbox common-selectbox">\
8031						<select name="jcollection-select-type" class="setting-small-input selectpicker dropdown jcollection-select">\
8032					';
8033					$.each(jcollection_select_type, function(i,v){
8034						var selected = (v=='text') ? 'selected' : '';
8035		str +=			'<option class="jcollection-type-opt" value="'+v+'" '+selected+'>'+$.lang[LANG]['manager.config.siteUM.jcollections.'+v]+'</option>';
8036					});
8037		
8038		str +=		'\
8039						</select>\
8040						<svg viewBox="0 0 8 4" width="8" height="4"><polygon points="0 0 4 4 8 0 "></polygon></svg>\
8041					</div>	\
8042					<span class="collection-type-info hand">\
8043						<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
8043<path d="M5.5 12c0-3.6 2.9-6.5 6.5-6.5s6.5 2.9 6.5 6.5-2.9 6.5-6.5 6.5-6.5-2.9-6.5-6.5Zm1 0c0 3 2.5 5.5 5.5 5.5s5.5-2.5 5.5-5.5S15 6.5 12 6.5 6.5 9 6.5 12Zm5 3.5v-1h1v1h-1Zm0-2c0-.7.3-1.3.9-1.7.4-.3.7-.8.8-1.3 0-.5-.4-.9-.9-1h-.1c-.6 0-1 .1-1.1.8v.2h-1v-.2c0-1.1 1-1.9 2-1.8h.1c1 0 2 .7 2 1.8v.1c0 .7-.4 1.4-1 1.9-.6.6-.7.9-.7 1.2h-1Z"/></svg>\
8044					</span>\
8045				</div>\
8046				<div class="description-wrap hide">\
8047					<div class="description-input hide">\
8048						<div class="cl-common-form-wrap nonplace-holder">\
8049							<div class="cl-common-form-group">\
8050								<input type="text" id="collection-description-text" name="description" class="setting-input description-text jcol-text"  value="" placeholder="'+$.lang[LANG]['manager.config.siteUM.jcollections.description.placeholder']+'">\
8051							</div>\
8052						</div>\
8053					</div>\
8054					<div class="newcheckbox hand">\
8055						<label>\
8056							<div class="newcheckboxSvg">\
8057								<input type="checkbox" class="" id="collection-description" name="description" value="">\
8058								<svg viewBox="0 0 16 16" width="16" height="16">\
8059									<path class="st6" d="M3 0h10c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3C0 1.34 1.34 0 3 0z"></path>\
8060									<path class="st19" d="M13 1c1.1 0 2 0.9 2 2v10c0 1.1-0.9 2-2 2H3c-1.1 0-2-0.9-2-2V3c0-1.1 0.9-2 2-2H13M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0L13 0z"></path>\
8061								</svg>\
8062								<svg class="active" viewBox="0 0 16 16" width="16" height="16">\
8063									<rect x="2" y="2" class="st6" width="12" height="12"></rect>\
8064									<path class="st19" d="M13 0H3C1.34 0 0 1.34 0 3v10c0 1.66 1.34 3 3 3h10c1.66 0 3-1.34 3-3V3C16 1.34 14.66 0 13 0zM13.03 6.03l-5.5 5.5C7.38 11.68 7.19 11.75 7 11.75s-0.38-0.07-0.53-0.22l-3.5-3.5c-0.29-0.29-0.29-0.77 0-1.06s0.77-0.29 1.06 0L7 9.94l4.97-4.97c0.29-0.29 0.77-0.29 1.06 0S13.32 5.74 13.03 6.03z"></path>\
8065								</svg>\
8066							</div>\
8067							'+$.lang[LANG]['manager.config.siteUM.jcollections.description.text']+'\
8068						</label>\
8069					</div>\
8070				</div>\
8071				<div class="jcol-btn-wrap">\
8072					<div class="jcol-btn-cancel jcol-btn hand">\
8073						'+$.lang[LANG]['manager.config.jcollection.item.btn.cancel']+'\
8074					</div>\
8075					<div class="jcol-btn-save jcol-btn hand">\
8076						'+$.lang[LANG]['manager.config.jcollection.item.btn.save']+'\
8077					</div>\
8078				</div>\
8079			</div>\
8080		</div>\
8081	';
8082	return str;
8083}
8084
8085var addCollectionInput = function(cl_name) {
8086	var cl_name = (typeof cl_name == 'undefined' || !cl_name) ? '' : cl_name,
8087		str = '\
8088		<div class="collection-update">\
8089			<div class="input-group">\
8090				<input type="text" class="collection-update-name form-control" placeholder="' + $.lang[LANG]['manager.join.cl.item.name.enter'] + '" value="' + cl_name + '"/>\
8091				<span class="input-group-btn">\
8092					<button class="collection-update-save btn btn-active">\
8093						<svg viewBox="0 0 15 10" width="15" height="10"><path d="M14.29 0L5.5 8.79 0.71 4 0 4.71l5.15 5.15C5.24 9.95 5.37 10 5.5 10s0.26-0.05 0.35-0.15L15 0.71 14.29 0z"/></svg>\
8094					</button>\
8095				</span>\
8096				<div class="collection-update-cancel"><svg viewBox="0 0 12 12" width="12" height="12"><polygon points="12 0.71 11.29 0 6 5.29 0.71 0 0 0.71 5.29 6 0 11.29 0.71 12 6 6.71 11.29 12 12 11.29 6.71 6"/></svg></div>\
8097			</div>\
8098		</div>\
8099	';
8100	return str;
8101}
8102
8103//keyup birth
8104var auto_date_format = function( e, oThis ){        
8105    var num_arr = [ 
8106        97, 98, 99, 100, 101, 102, 103, 104, 105, 96,
8107        48, 49, 50, 51, 52, 53, 54, 55, 56, 57
8108    ]      
8109
8110    var key_code = ( e.which ) ? e.which : e.keyCode;
8111
8112    if((num_arr.indexOf( Number( key_code ) ) != -1) || (key_code != 229) || (key_code != 0)){
8113	    var len = oThis.value.length;
8114	    if( len == 4 && (key_code != 8)) oThis.value += '-';
8115	    if( len == 7 && (key_code != 8)) oThis.value += '-';
8116    }
8117}
8118
8119var myinfoChangeBtn = function(e) {
8120    var sid = (typeof $(e).attr('data-sid')!='undefined') ? $(e).attr('data-sid') : property['SID'];
8121    if(property.UMEMBER.check_sns) {
8122        $(location).attr('href','/_myinfo');
8123        return false;
8124    }
8125
8126    var str = '\
8127        <div>\
8128            <div class="cl-s-form-wrap">\
8129                <div class="cl-s-form-group">\
8130                    <input type="password" class="cl-s-form-control" id="check-password" required="required">\
8131                    <label for="input" class="cl-s-control-label">'+ $.lang[LANG]['manager.mypage.personal.info.pw.input'] +'</label>\
8132                </div>\
8133            </div>\
8134        </div>\
8135    ';
8136
8137    $('.flat-modal .modal').modal('hide');
8138    var checkMyinfoPwMdoal = $(e).showModalFlat($.lang[LANG]['manager.mypage.personal.info.pw.title'],str,true,true,function () {
8139
8140        var pw_val = $('#check-password').val().trim();
8141        if(!pw_val) {
8142            $('#check-password').closest('.cl-s-form-wrap').addClass('empty');
8143            $('#check-password').focus();
8144            return false;
8145        } else if(checkEmojis(pw_val)) {
8146            $('#check-password').focus();
8147            return false;
8148        }
8149        
8150        $.post('/_check_mypw', { sid:sid, pw:hex_md5(pw_val) }, function(data) {
8151            if(typeof data.error != 'undefined' && data.error) {
8152                $('#check-password').closest('.cl-s-form-wrap').removeClass('empty').addClass('error');
8153                if($('#check-password').closest('.cl-s-form-wrap').find('.cl-s-control-label.error').length > 0) {
8154                    $('#check-password').closest('.cl-s-form-wrap').find('.cl-s-control-label.error').html(data.error);
8155                } else {
8156                    $('#check-password').after('<label for="input" class="cl-s-control-label error">' + data.error + '</label>');
8157                }
8158                $('#check-password').val('').focus();
8159                return false;
8160            } else {
8161                checkMyinfoPwMdoal.modal('hide');
8162                $(location).attr('href','/_myinfo');
8163            }
8164        },'json');
8165
8166    },'닫기',$.lang[LANG]['manager.mypage.personal.info.pw.btn'],'cl-s-product-pw cl-modal cl-s-btn w620',false,'', function() {
8167
8168        $('.cl-s-product-pw .cl-s-form-group').on('click',function(e) {
8169            if($(e.target).hasClass('cl-s-form-group')) {
8170                $(e.target).find('.cl-s-form-control:not([type=hidden])').focus();
8171            }
8172        });
8173
8174        $('.cl-s-product-pw .cl-s-form-control').on({
8175            keyup: function(e) {
8176                if($(this).val().trim().length == 0) {
8177                    $(this).closest('.cl-s-form-wrap').removeClass('error');
8178                    $(this).closest('.cl-s-form-wrap').find('.cl-s-control-label.error').remove();
8179                }
8180            },
8181            focus: function(e) {
8182                $(this).closest('.cl-s-form-wrap').addClass('active');
8183            },
8184            blur: function(e) {
8185                $(this).closest('.cl-s-form-wrap').removeClass('active');
8186
8187                var val = $(this).val().trim();
8188                if(val.length == 0) {
8189                    $(this).closest('.cl-s-form-wrap').removeClass('error').addClass('empty');
8190                    $(this).closest('.cl-s-form-wrap').find('.cl-s-control-label.error').remove();
8191                    return false;
8192                } else if(checkEmojis(val)) {
8193                    $('#check-password').closest('.cl-s-form-wrap').removeClass('empty').addClass('error');
8194                    if($('#check-password').closest('.cl-s-form-wrap').find('.cl-s-control-label.error').length > 0) {
8195                        $('#check-password').closest('.cl-s-form-wrap').find('.cl-s-control-label.error').html($.lang[LANG]['config.unable.emoji']);
8196                    } else {
8197                        $('#check-password').after('<label for="input" class="cl-s-control-label error">' + $.lang[LANG]['config.unable.emoji'] + '</label>');
8198                    }
8199                    $('#check-password').val('').focus();
8200                    return false;
8201                }
8202
8203                $(this).closest('.cl-s-form-wrap').removeClass('error').removeClass('empty');
8204                $(this).closest('.cl-s-form-wrap').find('.cl-s-control-label.error').remove();
8205            }
8206        });
8207
8208    });
8209}
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232/*
8233var smsRechargeModal = function(sid) {
8234	var recharge_plan = {
8235		'plan-5000': { name : '5,000원', content: '250건', price: '20원'},
8236		'plan-10000': { name : '10,000원', content: '500건', price: '20원'},
8237		'plan-20000': { name : '20,000원', content: '1100건<span class="additional">(보너스 100건 포함)</span>', price: '18.2원'},
8238		'plan-30000': { name : '30,000원', content: '1800건<span class="additional">(보너스 300건 포함)</span>', price: '16.7원'},
8239		'plan-50000': { name : '50,000원', content: '3100건<span class="additional">(보너스 600건 포함)</span>', price: '16.1원'},
8240	}
8241	var modal_content = '\
8242		<div class="mng-modal-body recharge-modal">\
8243			<div class="row">\
8244				<div class="recharge-head clearfix">\
8245					<div class="col-xs-4 col-sm-4 col-md-4 plan">금액별(VAT별도)</div>\
8246					<div class="col-xs-4 col-sm-4 col-md-6 content">충전 SMS 건수</div>\
8247					<div class="col-xs-4 col-sm-4 col-md-2 price">단가</div>\
8248				</div>\
8249	';
8250	$.each(recharge_plan, function(i,v) {
8251		modal_content = modal_content + '\
8252				<div class="recharge-item clearfix">\
8253					<div class="col-xs-4 col-sm-4 col-md-4 plan">\
8254						<div class="radio-inline">\
8255							<input type="radio" id="recharge-'+ i + '" name="recharge-plan" value="'+ i +'">\
8256							<label for="recharge-' + i + '">' + v['name'] + '</label>\
8257						</div>\
8258					</div>\
8259					<div class="col-xs-4 col-sm-4 col-md-6 content">' + v['content'] + '</div>\
8260					<div class="col-xs-4 col-sm-4 col-md-2 price">' + v['price'] + '</div>\
8261				</div>\
8262		';
8263	});
8264	modal_content = modal_content + '\
8265				<div class="recharge-payment clearfix">\
8266					<div class="col-xs-4 col-sm-4 col-md-3">결제방법</div>\
8267					<div class="col-xs-4 col-sm-4 col-md-9">\
8268						<div class="radio-group">\
8269							<div class="radio-inline">\
8270								<input type="radio" class="payment-method-radio" id="payment-method-card" name="payment-method-radio" value="card">\
8271								<label for="payment-method-card">신용카드</label>\
8272							</div>\
8273							<div class="radio-inline">\
8274								<input type="radio" class="payment-method-radio" id="payment-method-vbank" name="payment-method-radio" value="vbank">\
8275								<label for="payment-method-vbank">가상계좌</label>\
8276							</div>\
8277						</div>\
8278					</div>\
8279				</div>\
8280			</div>\
8281		</div>\
8282	';
8283
8284	var recharge_modal = $(this).showModalFlat('문자메시지(SMS) 충전', modal_content, true, true, function() {
8285		
8286		//문자메시지(SMS) 충전 기능 작업.
8287
8288
8289		recharge_modal.modal('hide');
8290	}, 'cancel', '충전하기', 'w480');
8291
8292}
8293/*sms*/
8294
8295var setJcolError = function(col_item, error_selector, error_text) {	
8296	var error_str = '\
8297		<div class="error_wrap '+error_selector+'-error">\
8298			<span class="error_svg">\
8299				<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 13" width="13" height="13">
8299<path d="M6.5 0C2.9 0 0 2.9 0 6.5S2.9 13 6.5 13 13 10.1 13 6.5 10.1 0 6.5 0Zm0 12C3.5 12 1 9.5 1 6.5S3.5 1 6.5 1 12 3.5 12 6.5 9.5 12 6.5 12ZM6 3h1v5H6V3Zm0 6h1v1H6V9Z"/></svg>\
8300			</span>\
8301			<span class="error_str">\
8302			'+$.lang[LANG]['manager.config.jcollection.item.error.'+error_text]+'\
8303			</span>\
8304		</div>';
8305		
8306	col_item.find('.'+error_selector+'.empty').removeClass('jcol_error').addClass('jcol_error');
8307
8308	return error_str;
8309	
8310}
8311
8312var getJcollectionItemOptionVal = function(t) {
8313	var opt_str = '';
8314	$.each(t.find('.jcollection-item-option'), function(i,v) {
8315		var opt_name = $(this).find('.jcol-option-name').val().trim(),
8316			split_str = (i==(t.find('.jcollection-item-option').length-1)) ? '' : '`',
8317			error_str = '';
8318
8319		// if(!opt_name) {
8320		// 	$(this).find('.jcol-option-name').removeClass('empty').addClass('empty');
8321			
8322		// 	error_str = setJcolError(t, 'jcol-option-name', 'opt_name');
8323		// 	$(this).find('.error_wrap.jcol-option-name-error').remove();			
8324		// 	$(this).find('.jcol-option-name').after(error_str);
8325			
8326		// 	return false;
8327		// } else {
8328		// 	$(this).find('.jcol-option-name').removeClass('empty').removeClass('jcol_error');
8329		// 	$(this).find('.error_wrap.jcol-option-name-error').remove();
8330		// }
8331
8332		// t.removeClass('empty');
8333		opt_str += opt_name + split_str;
8334	});
8335
8336	return opt_str;
8337};
8338
8339var setJoinCollectionData = function(t, sid){
8340	/*
8341		sid : sid
8342		mb_id : mb_id
8343		collection_type : email/addr/...etc1...
8344		used : true / false
8345		require : optional
8346		name : name
8347		type : type 	(text(단문형), memo(장문형), radio(단일선택형), check(다중선택형), select(목록선택형))
8348		idx : idx
8349		val : val      
8350		regdate : regdate
8351	*/
8352
8353	var data = {};
8354
8355	t.each(function(i,v) {
8356		var collection_type = (typeof $(this).attr('data-collectiontype')!='undefined') ? $(this).attr('data-collectiontype') : 'etc1',
8357			seq = (typeof $(this).attr('data-seq') != 'undefined') ? $(this).attr('data-seq') : '',
8358			used = (typeof $(this).attr('data-used') != 'undefined') ? $(this).attr('data-used') : 'false',
8359			require = (typeof $(this).attr('data-require')!='undefined') ? $(this).attr('data-require') : 'false',
8360			name = (typeof $(this).attr('data-name')!='undefined') ? (!$(this).attr('data-name') ? $(this).find('.jcollection_item_input').val() : $(this).attr('data-name')) : '',
8361			type = (typeof $(this).attr('data-type')!='undefined') ? $(this).attr('data-type') : 'text',
8362			idx = (typeof $(this).attr('data-idx')!='undefined') ? $(this).attr('data-idx') : '0',
8363			val = '';
8364
8365		val = getJcollectionItemOptionVal($(this));
8366		
8367		used = (used===false) ? 'false' : 'true';
8368		require = (require===false) ? 'false' : 'true';
8369		
8370		data[collection_type] = {
8371			sid : sid,
8372			seq : seq,
8373			collection_type : collection_type,
8374			used : used,
8375			require : require,
8376			name : name,
8377			type : type,
8378			idx : idx,
8379			val : val
8380		}
8381	});
8382	console.log(data);
8383
8384	return data;	
8385}
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401/*************************************************************************************************************************************member-config page END*/
8402
8403
8404
8405
8406/*************************************************************************************************************************************member-list page START*/
8407	
8408var getMemberListCheckData = function(el) {
8409	var select_count = el.closest('.mng-list').find('tr.active td.no input[type="checkbox"]:checked').length - 1,
8410		select_ids = el.closest('.mng-list').find('tr.active').map(function() {  return $(this).find('td.id').text().trim(); }).get(),
8411		select_name = '',
8412		select_names = '';
8413
8414	if(select_count < 0) return { error: $.lang[LANG]['manager.list.member.selected.empty'] };
8415	el.closest('.mng-list').find('tr.active').map(function(i) { 
8416		if(i==0) select_name = $(this).find('td.id').text().trim();
8417		else select_names = select_names + ((select_names.length > 0) ? ', ' : '') + $(this).find('td.id').text().trim(); 
8418	});
8419
8420	var result = {
8421		count	: select_count,
8422		ids 	: select_ids,
8423		name	: select_name,
8424		names	: select_names
8425	};
8426
8427	return result;
8428}
8429
8430// var dissmissCert = function(el, uid) {
8431// 	var id = $(el).attr('id');
8432// 	var dismiss = '';
8433// 	if(id == 'member-cert_date-button') {
8434// 		dismiss = 'cert';
8435// 	} else if (id == 'member-cert_adult_date-button') {
8436// 		dismiss = 'adult';
8437// 	}
8438
8439// 	$.ajax({
8440// 		type: 'POST',
8441// 		url: '/umember/update/type/dismiss_cert',
8442// 		data: { sid : SID, uid : uid, dismiss : dismiss },
8443// 		dataType: 'json',
8444// 		async: true,
8445// 		success: function(data) {
8446// 			if(data.affected_rows > 0) {
8447// 				var modalTitle = '';
8448// 				if(data.um_cert == 'N') {
8449// 					modalTitle = '본인인증이 해제되었습니다.';
8450// 					$('.member-cert_date-wrap').html('');
8451// 				} else if (data.um_cert_adult == 'N') {
8452// 					modalTitle = '성인인증이 해제되었습니다.';
8453// 					$('.member-cert_adult_date-wrap').html('');
8454// 				}
8455// 				$(this).showModalFlat(modalTitle, '해당 계정의 인증이 해제되어 인증 이전 상태로 복구되었습니다.', true, false, function() {
8456// 					location.reload();
8457// 				}, 'ok', 'cl-cmmodal cl-s-btn w560 cl-p130 cl-t80 cl-modal cl-close-btn');
8458// 			} else {
8459// 				alert('error');
8460// 			}
8461// 		}
8462// 	});
8463// }
8464/*************************************************************************************************************************************member-list page   END*/
8465
8466var mngShowToast = function(icon,message,el,time) {
8467	console.log('mngShowToast')
8468	if($('.mng-toast-wrap').length > 0 ) $('.mng-toast-wrap.remove').remove();
8469	if(typeof time == 'undefined') time = 800;
8470	var icon = "fa fa-"+icon,
8471		toast = '\
8472		<div class="mng-toast-wrap">\
8473			<div class="mng-toast">\
8474				<span class="mng-toast-icon"><i class="' + icon + '"></i></span>\
8475				<span class="mng-toast-message">' + message + ' </span>\
8476			</div>\
8477		</div>\
8478	';
8479
8480	el.find('.mng-title, .mng-wrap').addClass('mng-toast-showing').animate({
8481		'opacity': 0.3,
8482		'pointer-events': 'none'
8483	}, { 
8484		duration: '.5s', 
8485		easing: 'easeInOutCubic'
8486	},50).delay(time).fadeIn(100, function() { 
8487		$(this).animate({
8488			'opacity': 1, 
8489			'pointer-events': 'auto'
8490		}, {
8491			duration: '.5s', 
8492			easing: 'easeInOutCubic'
8493		}, 100).removeClass('mng-toast-showing'); 
8494	});
8495
8496	$(toast).appendTo(el).css({
8497		'opacity': 0,
8498		'margin-top': '-10px'
8499	}).animate({
8500		'opacity': 1,
8501		'margin-top': '0px'
8502	}, {
8503		duration: '.7s',
8504		easing: 'easeInOutCubic'
8505	},50).delay(time).fadeOut(100, function() { $(this).addClass('remove'); });
8506
8507}
8508
8509var howToApplyCert = function() {
8510	var mobile = (window.innerWidth<768) ? 'm.' : '',
8511	str = '\
8512			<div class="guide-top lang-'+LANG+'">\
8513				<h3 class="modal-title guidetitle">'+$.lang[LANG]['manager.cert.guide.title']+'</h3>\
8514				<div class="guide-menu">\
8515					<ul>';
8516					for (var i=0;i<3;i++) {
8517						var menuactive = (i==0) ? 'active' : '';
8518						str = str + '<li class="hand '+menuactive+'">';
8519						if(i==2) str = str + '<div class="line left"></div>';
8520						else if(i==1) {
8521							str = str +'\
8522								<div class="line left"></div>\
8523								<div class="line right"></div>\
8524							';	
8525						}
8526						str = str + '<p>'+$.lang[LANG]['manager.cert.guide.step.'+mobile+i]+'</p>';
8527						if(i==0) str = str + '<div class="line right"></div>';
8528						str = str + '</li>';
8529					};
8530		str +=	'\
8531					</ul>\
8532				</div>\
8533			</div>\
8534			<div class="guide-wrap">\
8535				<div class="step">\
8536					<div id="step1">\
8537						<h3>'+$.lang[LANG]['manager.cert.guide.step.1.title']+'</h3>\
8538						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.1.sub.title.1']+'</h4>\
8539						<p>'+$.lang[LANG]['manager.cert.guide.step.1.sub.1']+'</p>\
8540						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.1.sub.title.2']+'</h4>\
8541						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_01_'+LANG+'.jpg">\
8542			';
8543			if(LANG == 'ko') {
8544				str +=	'\
8545						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.1.sub.title.3']+'</h4>\
8546						<p>'+$.lang[LANG]['manager.cert.guide.step.1.sub.3']+'</p>\
8547						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_02_'+LANG+'.jpg">\
8548				';	
8549			}
8550			str +=	'\
8551					</div>\
8552					<hr class="line">\
8553					<div id="step2">\
8554						<h3>'+$.lang[LANG]['manager.cert.guide.step.2.title']+'</h3>\
8555						<div class="step2-step text-left"><span>STEP 01.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.1']+'</div>\
8556						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_03_'+LANG+'.jpg">\
8557						<div class="step2-step text-left"><span>STEP 02.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.2']+'</div>\
8558						<div class="step2-step text-left"><span>STEP 03.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.3']+'</div>\
8559				';
8560			if(LANG == 'ko') {
8561				str +=	'\
8562					 	<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_04_'+LANG+'.jpg">';
8563			} else {
8564				str +=	'\
8565						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_05_'+LANG+'.jpg">\
8566				';
8567			}
8568			str +=	'\
8569					 	<div class="step2-step text-left">\
8570					 		<span>STEP 04.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.4']+'\
8571					 	';
8572			if(LANG != 'ko') {
8573				str +=	'<p>'+$.lang[LANG]['manager.cert.guide.step.1.sub.3']+'</p>\
8574				';	
8575			}
8576			str += '\
8577					 	</div>';
8578			if(LANG == 'ko') {
8579				str += '\
8580						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_05_'+LANG+'.jpg">';
8581			}
8582			str += '\
8583					 	<div class="step2-step text-left"><span>STEP 05.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.5']+'</div>\
8584					 	<div class="step2-step text-left">\
8585					 		<span>STEP 06.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.6']+'\
8586					 		<p>'+$.lang[LANG]['manager.cert.guide.step.2.txt.6.sub']+'</p>\
8587					 	</div>\
8588					 	<div class="step2-step text-left"><span>STEP 07.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.7']+'</div>\
8589						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_06_'+LANG+'.jpg">\
8590						<div class="step2-step text-left"><span>STEP 08.</span>'+$.lang[LANG]['manager.cert.guide.step.2.txt.8']+'</div>\
8591						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_07_'+LANG+'.jpg">\
8592					</div>\
8593					<hr class="line">\
8594					<div id="step3">\
8595						<h3>'+$.lang[LANG]['manager.cert.guide.step.3.title']+'</h3>\
8596						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.3.sub.title.1']+'</h4>\
8597						<p>'+$.lang[LANG]['manager.cert.guide.step.3.txt.1-1']+'</p>\
8598						<div class="step3-step text-left"><span>STEP 01.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.1-2']+'</div>\
8599						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_08_'+LANG+'.jpg">\
8600						<div class="step3-step text-left"><span>STEP 02.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.1-3']+'</div>\
8601						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_09_'+LANG+'.jpg">\
8602						<div class="step3-step text-left"><span>
8602STEP 03.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.1-4']+'</div>\
8603						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_10_'+LANG+'.jpg">\
8604						<div class="step3-step text-left"><span>STEP 04.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.1-5']+'</div>\
8605						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_11_'+LANG+'.jpg">\
8606						\
8607						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.3.sub.title.2']+'</h4>\
8608						<p>'+$.lang[LANG]['manager.cert.guide.step.3.txt.2-1']+'</p>\
8609						<div class="step3-step text-left"><span>STEP 01.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.2-2']+'</div>\
8610						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_12_'+LANG+'.jpg">\
8611						<div class="step3-step text-left"><span>STEP 02.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.2-3']+'</div>\
8612						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_13_'+LANG+'.jpg">\
8613						<div class="step3-step text-left"><span>STEP 03.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.2-4']+'</div>\
8614						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_14_'+LANG+'.jpg">\
8615						<div class="step3-step text-left"><span>STEP 04.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.2-5']+'</div>\
8616						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_15_'+LANG+'.jpg">\
8617						\
8618						<h4 class="text-left">'+$.lang[LANG]['manager.cert.guide.step.3.sub.title.3']+'</h4>\
8619						<p>'+$.lang[LANG]['manager.cert.guide.step.3.txt.3-1']+'</p>\
8620						<div class="step3-step text-left"><span>STEP 01.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.3-2']+'</div>\
8621						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_16_'+LANG+'.jpg">\
8622						<div class="step3-step text-left"><span>STEP 02.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.3-3']+'</div>\
8623						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_17_'+LANG+'.jpg">\
8624						<div class="step3-step text-left"><span>STEP 03.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.3-4']+'</div>\
8625						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_18_'+LANG+'.jpg">\
8626						<div class="step3-step text-left"><span>STEP 04.</span>'+$.lang[LANG]['manager.cert.guide.step.3.txt.3-5']+'</div>\
8627						<img class="img-responsive" src="//storage.googleapis.com/i.addblock.net/member/cert_guide/'+LANG+'/verification_guide_19_'+LANG+'.jpg">\
8628					</div>\
8629				</div>\
8630				<div class="modal-footer guideClose">\
8631					<button type="button" class="btn btn-default btn-sm close-button-dialog clostbtnfalse" data-dismiss="modal">'+$.lang[LANG]['config.close']+'</button>\
8632				</div>\
8633			</div>\
8634			';
8635
8636	var certApplyGuideModal = $(this).showModalFlat('',str,true,false,'','close','','guidePopup cl-cmmodal cl-s-btn cover w700 cert-guide-modal', false ,'',function() {
8637		$(window).resize(function () {
8638			var mobile = (window.innerWidth<768) ? 'm.' : '';
8639
8640			$('.cert-guide-modal .guide-menu li').each(function(i) {
8641				$(this).find('p').html($.lang[LANG]['manager.cert.guide.step.'+mobile+i]);
8642			});
8643		});
8644		$.guidePopup.scrollevent();
8645	});
8646}
8647

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.