PageSourceSearch

https://gdtv24.com/scripts/common-1.1.0.js?v=1791567417

js gdtv24.com collected 2026-10-09 17:37:13 UTC 67,964 bytes, 1,803 lines download raw bytes

1var today=new Date();
2var dd=today.getDate();
3var mm=today.getMonth()+1;
4var yyyy=today.getFullYear();
5if(dd<10)dd='0'+dd
6if(mm<10)mm='0'+mm
7now=yyyy+"-"+mm+"-"+dd;
8var dataBank = [];
9
10$(document).ready(function(){
11	$(document).on("click",".board_box .tabBox .menu",function(){
12		var kind = $(this).attr("kind"); 
13		var $obj = $(this).closest(".tabBox");
14		$obj.find(".menu").removeClass("on");
15		$(this).addClass("on");
16		$(this).closest(".board_box").find(".board").css("display","none");
17		$(this).closest(".board_box").find(".board[kind='"+kind+"']").css("display","block");
18	});
19});
20
21$(document).on("click","input[type='file']",function(){
22	//$(this).attr("accept",".gif, .jpg, .jpeg, .png, .pdf, .bmp, .tif, .tiff, .webp");
23});
24
25function pageList(total, unit, page){
26    var str="";
27    var step = 5;	// 페이지 표시갯수
28    var first = 1;
29    var last = Math.ceil(total / unit);
30    if(last>1){
31        var start = page - 2;
32        if(start<1) start = 1;
33        var end = start + step -1;
34        if(end > last) end = last;
35        if(end - start < step - 1){
36            start = end - step + 1;
37            if(start<1) start = 1;
38        }
39        
40        if(page>2){
41            str +="<button class='first' page='1'><span><img src='/images/etc/page_first.png' alt='처음' /></span></button>";
42        }
43        if(page>1){
44            str +="<button class='prev' page='"+(page-1)+"'><span><img src='/images/etc/page_prev.png' alt='이전' /></span></button>";
45        }
46        
47        for(i=start;i<=end;i++){
48            if(page==i) var now = "now";
49            else var now = "";
50            str +="<button class='"+now+"' page='"+i+"'><span>"+i+"</span></button>";
51        }
52        
53        if(page<last){
54            str +="<button class='next' page='"+(page+1)+"'><span><img src='/images/etc/page_next.png' alt='다음' /></span></button>";
55        }
56        if(page<last-1){
57            str +="<button class='last' page='"+last+"'><span><img src='/images/etc/page_last.png' alt='마지막' /></span></button>";
58        }
59    }
60    return str;
61}
62
63//ajax form전송
64function ajaxSubmit(obj) {
65	var act = $("#" + obj).attr("action");
66	var method = $("#" + obj).attr("method");
67	var fd = $("#" + obj).serialize();
68
69	$.ajax({
70		url: act,
71		async : true,
72		type : method,
73		contentType : "application/x-www-form-urlencoded; charset=UTF-8", 
74		data : fd,
75		dataType : "JSON",
76		timeout: 60000,
77		mimeType : "multipart/form-data",
78		success : function (obj) {		// JSON 형식 리턴
79			if (obj.msg){
80				alert(obj.msg);
81			}
82			if (obj.reqApi) {
83				$("#apiRequest").text(JSON.stringify(decodeData(obj.reqApi)));
84			}
85			if (obj.getApi) {
86				$("#apiResponse").text(JSON.stringify(decodeData(obj.getApi)));
87			}
88			if (obj.rtnData) {
89				dataBank['rtnData'] = decodeData(obj.rtnData);
90				dataBank['jsxData'] = obj.rtnData;
91				$("#apiData").text(JSON.stringify(dataBank['rtnData']));
92			}
93			if (obj.jsonData) {
94				//dataBank['jsonData'] = JSON.parse(obj.jsonData)
95				dataBank['jsonData'] = obj.jsonData
96			}
97			if (obj.returnFunction) {
98				eval(obj.returnFunction);
99			}
100			if (obj.returnUrl) {
101				location.href = obj.returnUrl;
102			}
103		},
104		error : function (request, status, error) {
105			//alert('error : timeout');
106		}
107	});
108}
109//ajax form file 전송
110function ajaxSubmitFile(obj) {
111    var act = $("#" + obj).attr("action");
112    var method = $("#" + obj).attr("method");
113    var fd = new FormData();
114    fd = serializefiles($("#" + obj));
115    var xhr = new XMLHttpRequest();
116    xhr.open(method, act);
117    xhr.send(fd);
118    xhr.onreadystatechange = function () {
119        if (xhr.readyState == 4) {
120            if (xhr.status == 200) {
121                if (xhr.responseText != null) {
122                    var obj = $.parseJSON(xhr.responseText);
123                    if (obj.msg){
124                    	alert(response.msg);
125                    }
126                    if (obj.reqApi) {
127						$("#apiRequest").text(JSON.stringify(decodeData(obj.reqApi)));
128					}
129                    if (obj.getApi) {
130        				//dataBank['jsonData'] = JSON.parse(obj.jsonData)
131        				dataBank['jsonData'] = obj.jsonData
132        			}
133        			if (obj.rtnData) {
134						dataBank['rtnData'] = decodeData(obj.rtnData);
135						dataBank['jsxData'] = obj.rtnData;
136						$("#apiData").text(JSON.stringify(dataBank['rtnData']));
137					}
138					if (obj.jsonData) {
139						//dataBank['jsonData'] = JSON.parse(obj.jsonData)
140						dataBank['jsonData'] = obj.jsonData
141					}
142        			if (obj.returnFunction) {
143        				eval(obj.returnFunction);
144        			}
145        			if (obj.returnUrl) {
146        				location.href = obj.returnUrl;
147        			}
148                }
149                else {
150                    alert("실패");
151                }
152            }
153            else {
154				if(xhr.status == 500){
155					alert("오류가 발생하였습니다. 파일을 리사이징하시거나 PDF라면 PDF변환 툴을 바꿔 다시 올려주세요.(※ 알PDF 사용시 오류가 발생할수 있습니다.)");
156				}else{
157	                alert(xhr.statusText);
158				}
159                return false;
160            }
161        }
162    }
163}
164
165// file ajax 전송
166function serializefiles(obj){
167    //var obj = $(this);
168    /* ADD FILE TO PARAM AJAX */
169    var formData = new FormData();
170    $.each(obj.find("input[type='file']"), function (i, tag) {
171        $.each($(tag)[0].files, function (i, file) {
172            formData.append(tag.name, file);
173        });
174    });
175    var params = obj.serializeArray();
176    $.each(params, function (i, val) {
177        formData.append(val.name, val.value);
178    });
179    return formData;
180};
181
182
183//팝업 레이어 오픈	
184function openPopupView(w,id){
185	var $el = $('#'+id);
186	var winWidth = $(window).width();
187	var winHeight = $(window).height();
188	if(winWidth<w+10) w = winWidth - 10;
189	$el.css({width:w});
190	if(id != "frameRoullette"){
191		$el.find('.content').css('overflow-y','visible');
192		
193	}
194	$el.find('.content').css('height','auto');
195	$el.parent().fadeIn();
196	var $elWidth = ~~($el.outerWidth());
197	var $elHeight = ~~($el.outerHeight());
198	if(winHeight<$elHeight+10){
199		if(id != "frameRoullette"){
200			$el.find('.content').css('overflow-y','auto');
201		}
202		//$el.find('.content').css('height',winHeight-79);
203		$elHeight = winHeight;
204	}else{
205		if(id != "frameRoullette"){
206			$el.find('.content').css('overflow-y','auto');
207		}
208		//$el.find('.content').css('height',$elHeight-39);
209	}
210	$el.css({	
211		marginTop: -$elHeight /2 +5,
212		marginLeft: -$elWidth/2
213	})
214	//$el.draggable();
215	var url = window.location.href;
216	if(id=="frameNotice") var addHash = "#noticePopup";
217	else var addHash = "#layerPopup";
218	if(url.indexOf("#")>=0){
219		url = url.substring(0,url.indexOf("#"))+addHash;
220	}else{
221		url += addHash;
222	}
223	window.location.href = url;
224}
225
226function number_filter(data){
227	data = data.replace(/[^0-9.-]/g,"");
228	if(data=="" || data =="." || data =="-") data = 0;
229	return data;
230}
231
232function comma(number) {
233    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
234}
235
236/*$(document).on("click","#gifticonApproveForm .buttonBox button",function(){
237	var kind = $(this).attr("kind");
238	if(kind == "hold"){
239		 if(confirm("보류를하면 포인트가 반환됩니다.")){
240			$("#gifticonApproveForm input[name='kind']").val(kind);
241			ajaxSubmit("gifticonApproveForm");
242			return false;
243		}else{
244			return false;
245		}
246	}else{
247		$("#gifticonApproveForm input[name='kind']").val(kind);
248		ajaxSubmit("gifticonApproveForm");
249		return false;
250	}
251});*/
252
253// 팝업창 닫기 버튼, 배경 클릭
254$(document).on("click", ".layerPopup .titleBox .close", function () {
255	$('.layerPopup').fadeOut();
256	return false;
257});
258
259//페이지 이동
260$(document).on("click", "#pageButton button", function () {
261    if(!$(this).hasClass("now")){
262        if($("#pageButton").attr("link")){
263            window.location.href = $("#pageButton").attr("link")+"page="+$(this).attr("page");
264        }else{
265            var page = $(this).attr("page");
266            $("#"+$("#pageButton").attr("form")+" input[name='page']").val(page);
267            $("#"+$("#pageButton").attr("form")).submit();
268        }
269    }
270});
271
272//페이지 이동
273$(document).on("click", "#CommentPageButton button", function () {
274    if(!$(this).hasClass("now")){
275        if($("#pageButton").attr("link")){
276            window.location.href = $("#CommentPageButton").attr("link")+"page="+$(this).attr("page");
277        }else{
278            var page = $(this).attr("page");
279            $("#"+$("#CommentPageButton").attr("form")+" input[name='commentPage']").val(page);
280            $("#"+$("#CommentPageButton").attr("form")).submit();
281        }
282    }
283});
284
285
286// 댓글 발송
287$(document).on("click", "#formComment .submit", function (e) {
288	var comment = $("#commentMsg").html();
289    // 선택된 이모지
290    const emoji = $("#formComment .emojiPreview .emojiImg").prop('outerHTML') || '';
291    const hasEmoji = $("#formComment .emojiPreview .emojiImg").length > 0;
292
293    // 글 + 이모지 둘다 없을때만 막기
294    if(comment == "" && !hasEmoji){
295        alert("내용을 입력해주세요.");
296        return false;
297    }else if(lnbPath == "memevent" && comment.length > 10){
298		alert("내용을 10자 아래로 입력해 주세요.");
299		return false;
300	}else{
301	    // 최종 내용
302	    let finalComment = comment;
303	    if(emoji){
304	        finalComment += "<div>"+emoji+"</div>";
305	    }
306		$("#formComment input[name='comment']").val(finalComment);
307		$("#formComment .submit").prop("disabled",true);
308		$("#formComment").submit();
309	}
310});
311
312$(document).on("click","#formCommentreply .submit",function(){
313
314    let comment = $("#commentReplyMsg").html();
315
316    // 기존 본문 안 emoji 제거
317    comment = comment.replace(/<div><img class="emojiImg"[^>]*><\/div>/gi,'');
318    comment = comment.replace(/<img class="emojiImg"[^>]*>/gi,'');
319
320    // 선택된 새 이모지
321    const emoji = $("#formCommentreply .emojiPreview .emojiImg").prop('outerHTML') || '';
322
323    const hasEmoji = $("#formCommentreply .emojiPreview .emojiImg").length > 0;
324
325    // html 태그 제거 후 텍스트만 체크
326    const textOnly = $('<div>').html(comment).text().trim();
327
328    if(textOnly == "" && !hasEmoji){
329
330        alert("내용을 입력해 주세요");
331        return false;
332
333    }else if(lnbPath == "memevent" && textOnly.length > 10){
334
335        alert("내용을 10자 아래로 입력해 주세요.");
336        return false;
337
338    }else{
339
340        let finalComment = comment;
341
342        if(emoji){
343            finalComment += "<div>"+emoji+"</div>";
344        }
345
346        $("#formCommentreply input[name='comment']").val(finalComment);
347
348        $("#formCommentreply .submit").prop("disabled",true);
349
350        $("#formCommentreply").submit();
351
352    }
353
354});
355
356$(document).on("click", ".blindComment", function () {	// 블라인드
357		var code = $(this).attr("article");
358		$("#framePopup .content").html(makeCommentAdmin(code,'blind'));
359		if(!confirm("정말로 블라인드 처리를 하시겠습니까?")){
360			return false;
361		}else{
362			$("#formPopupComment").submit();
363		}
364});
365
366$(document).on("click", ".deleteComment", function () {	// 삭제
367	var code = $(this).attr("article");
368	$("#framePopup .content").html(makeCommentAdmin(code,'del'));
369	if(!confirm("정말로 삭제를 하시겠습니까?")){
370		return false;
371	}else{
372		$("#formPopupComment").submit();
373	}
374});
375
376$(document).on("click", ".replayComment", function () {	// 답글 쓰기
377	var code = $(this).attr("article").split("_");
378	var str = "";
379	str += '<div class="commentReplyBox">';
380		str += "<div class='closeBtn'><button>닫기</button></div>";
381		str += '<form id="formCommentreply" action="/comment" method="POST" enctype="multipart/form-data">';
382			str += '<div class="box">';
383				str += '<div class="comment" id="commentReplyMsg" contenteditable="true"></div>';
384				str += '<input style="display: none;" type="file" name="commentFile" value="">';
385				str += '<button class="submit">등록</button>';
386				str += '<div class="emojiPreview"></div>';
387				str += '<input type="hidden" name="table" value="'+code[0]+'">';
388				str += '<input type="hidden" name="kind" value="'+lnbPath+'">';
389				str += '<input type="hidden" name="code" value="'+code[1]+'">';
390				str += '<input type="hidden" name="depth" value="'+code[2]+'">';
391				str += '<input type="hidden" name="link" value="'+code[3]+'">';
392				str += '<input type="hidden" name="idx" value="">';
393				str += '<input type="hidden" name="act" value="add">';
394				str += '<input type="hidden" name="comment" value="">';
395				str += '<input type="hidden" name="tagIdx" value="">';
396				str += '<div class="attachList">';
397					str += '<label>';
398						str += '<input type="checkbox" name="secret" value="Y">';
399						str += '<span>비밀</span>';
400					str += '</label>';
401					//str += '<button id="vedio"><img src="/images/etc/commentBox_video.png" alt="영상첨부"></button>';
402					//str += '<button id="attach"><img src="/images/etc/commentBox_file.png" alt="파일첨부"></button>';
403					str += '<button type="button" id="emojiBtnRly">😄</button>';
404					const emojiLayer = $('.emojiLayer').prop('outerHTML').replaceAll('emojiLayer','emojiLayerRly');
405					str += emojiLayer;
406					str += '<button id="plus"><img src="/images/etc/commentBox_plus.png" alt="플러스"></button>';
407					str += '<button id="mius"><img src="/images/etc/commentBox_mius.png" alt="마이너스"></button>';
408					str += '<button id="refresh"><img src="/images/etc/commentBox_refresh.png" alt="새로고침"></button>';
409				str += '</div>';
410			str += '</div>';
411		str += '</form>';
412	str += '</div>';
413	$(this).closest("li").append(str);
414	$(this).closest("li").find(".replayComment").css("display","none");
415	/*$("#commentMsg").text("");
416	$("#commentMsgLen").text("0");
417	$("#formComment input[name='depth']").val(code[2]);
418	$("#formComment input[name='link']").val(code[3]);
419	$("#formComment input[name='idx']").val("");
420	$("#writeComment").addClass("open");
421	$("#replyMessage").addClass("on");
422	$("#replyMessage").html($("#message_"+code[3]).html());
423	$("#inputComment").text("취소");
424	$("#commentMsg").focus();
425	$("#formComment #submit").text("답글 등록하기");
426	$("#formComment input[name='act']").val("add");
427	var formOffset = $("#formComment").offset();
428	$('html, body').animate({scrollTop : formOffset.top-50}, 400);
429	$("#titleComment").text("답글 입력");
430	$("#formComment input:radio[name='open'][value='1']").prop("checked",true);*/
431});
432
433$(document).on("click",".commentReplyBox .closeBtn button",function(){
434	$(this).closest("li").find(".replayComment").css("display","block");
435	$(this).closest("li").find(".modifyComment").css("display","inline-block");
436	$(this).closest(".commentReplyBox").remove();
437	
438});
439
440// 댓글 관리
441function makeCommentAdmin(idx,act){
442	var str = "<form id='formPopupComment' action='/comment' method='POST'>\n";
443	str += "<input type='hidden' name='idx' value='"+idx+"'>\n";
444	str += "<input type='hidden' name='act' value='"+act+"'>\n";
445	str += "<input type='hidden' name='kind' value='"+lnbPath+"'>\n";
446	str += "<input type='hidden' name='table' value='"+$("#formComment input[name='table']").val()+"'>\n";
447	str += "<input type='hidden' name='code' value='"+$("#formComment input[name='code']").val()+"'>\n";
448	str += "</form>";
449	return str;
450}
451
452$(document).on("click", ".openComment", function () {	// 복구
453	var code = $(this).attr("article");
454	$("#framePopup .content").html(makeCommentAdmin(code,'open'));
455	if(!confirm("정말로 복구를 하시겠습니까?")){
456		return false;
457	}else{
458		$("#formPopupComment").submit();
459	}
460});
461
462$(document).on("click", ".modifyComment", function () {	// 수정하기
463	//var idx = $(this).attr("article");
464	var code = $(this).attr("article").split("_");
465	var str = "";
466	str += '<div class="commentReplyBox">';
467		str += "<div class='closeBtn'><button>닫기</button></div>";
468		str += '<form id="formCommentreply" action="/comment" method="POST" enctype="multipart/form-data">';
469			str += '<div class="box">';
470				str += '<div class="comment" id="commentReplyMsg" contenteditable="true">'+$("#message_"+code[0]).html()+'</div>';
471				str += '<input style="display: none;" type="file" name="commentFile" value="">';
472				str += '<button class="submit">등록</button>';
473				str += '<div class="emojiPreview"></div>';
474				str += '<input type="hidden" name="table" value="'+gnbPath+'">';
475				str += '<input type="hidden" name="kind" value="'+lnbPath+'">';
476				str += '<input type="hidden" name="code" value="'+code[1]+'">';
477				str += '<input type="hidden" name="depth" value="">';
478				str += '<input type="hidden" name="link" value="">';
479				str += '<input type="hidden" name="idx" value="'+code[0]+'">';
480				str += '<input type="hidden" name="act" value="mod">';
481				str += '<input type="hidden" name="comment" value="">';
482				str += '<input type="hidden" name="tagIdx" value="">';
483				str += '<div class="attachList">';
484					str += '<label>';
485						str += '<input type="checkbox" name="secret" value="Y">';
486						str += '<span>비밀</span>';
487					str += '</label>';
488					//str += '<button id="vedio"><img src="/images/etc/commentBox_video.png" alt="영상첨부"></button>';
489					//str += '<button id="attach"><img src="/images/etc/commentBox_file.png" alt="파일첨부"></button>';
490					str += '<button type="button" id="emojiBtnRly">😄</button>';
491					const emojiLayer = $('.emojiLayer').prop('outerHTML').replaceAll('emojiLayer','emojiLayerRly');
492					str += emojiLayer;
493					str += '<button id="plus"><img src="/images/etc/commentBox_plus.png" alt="플러스"></button>';
494					str += '<button id="mius"><img src="/images/etc/commentBox_mius.png" alt="마이너스"></button>';
495					str += '<button id="refresh"><img src="/images/etc/commentBox_refresh.png" alt="새로고침"></button>';
496				str += '</div>';
497			str += '</div>';
498		str += '</form>';
499	str += '</div>';
500	$(this).closest("li").append(str);
501	$(this).closest("li").find(".modifyComment").css("display","none");
502	/*$("#commentMsg").val($("#message_"+idx).text());
503	$("#commentMsgLen").text("0");
504	$("#formComment input[name='depth']").val("");
505	$("#formComment input[name='link']").val("");
506	$("#formComment input[name='idx']").val(idx);
507	$("#writeComment").addClass("open");
508	$("#replyMessage").removeClass("on");
509	$("#inputComment").text("취소");
510	$("#formComment #submit").text("수정하기");
511	$("#formComment input[name='act']").val("mod");
512	var formOffset = $("#formComment").offset();
513	$('html, body').animate({scrollTop : formOffset.top-50}, 400);*/
514	//$("#titleComment").text("댓글 수정");
515	$("#formComment input:radio[name='open'][value='"+$("#message_"+code[0]).attr("secret")+"']").prop("checked",true);
516});
517
518
519   var certifySec = "";
520// 인증번호 받기 
521   $(document).on("click","#getCertify",function(){
522   	if($(this).hasClass("gray")){
523   		$(".phoneNum input[name='phone']").attr('readonly',false);
524   		$(".certifyNum").addClass('off');
525   		$("#getCertify").removeClass('gray');
526   		$("#getCertify").text('인증번호 받기');
527   		alert("휴대폰 번호를 변경하신 후 [인증번호 받기] 버튼을 클릭해주세요.");
528   	}else if($(this).hasClass("gray") && $("#timerCertify").text()!="시간초과"){
529   		alert("연속으로 인증번호를 신청하실 수 없습니다. "+number_filter($("#timerCertify").text())+"초 후에 다시 시도해 주세요.");
530   	}else{
531   		var phone = number_filter($(".phoneNum input[name='phone']").val());
532   		if(phone=="" || phone.length<10 || phone.substring(0,2)!="01"){
533   			alert("휴대폰 번호를 정확하게 입력해 주세요.");
534   			$(".phoneNum input[name='phone']").focus();
535   		}else{
536   			$("#certifyForm input[name='phone']").val(phone);
537   			ajaxSubmit("certifyForm");
538   			$(".phoneNum input[name='phone']").attr('readonly',true);
539   			$(".certifyNum").removeClass('off');
540   			$("#getCertify").addClass('gray');
541   			$("#getCertify").text('휴대폰 변경');
542   		}
543   	}
544   	return false;
545   });
546   // 인증번호 받기 리턴
547   function certifyReturn(){
548	alert(dataBank['rtnData']['msg']);
549   	certifyCounter(120);
550   	//alert("인증번호가 휴대폰으로 전송되었습니다. 2분 이내에 인증번호를 입력하시고 [인증번호 확인] 버튼을 클릭해주세요.");
551   }
552   // 인증번호 확인 
553   $(document).on("click","#confirmCertify",function(){
554   	if($("#timerCertify").text()=="시간초과"){
555   		alert("인증번호 입력 제한시간이 초과되었습니다. 인증번호 신청부터 다시 진행해주세요.");
556   		$(".phoneNum input[name='phone']").attr('readonly',false);
557   		$(".certifyNum").addClass('off');
558   		$("#getCertify").removeClass('gray');
559   		$("#getCertify").text('인증번호 받기');
560   	}else{
561   		var certify = number_filter($(".certifyNum input[name='certify']").val());
562   		if(certify=="" || certify.length!=6){
563   			alert("인증번호 6자리를 정확하게 입력해 주세요.");
564   		}else{
565   			$("#certifyForm").attr("action","/service/confirm");
566   			$("#certifyForm input[name='act']").val('confirm');
567   			$("#certifyForm input[name='certify']").val($(".certifyNum input[name='certify']").val());
568   			ajaxSubmit("certifyForm");
569   		}
570   	}
571   	return false;
572   });
573   
574   // 인증번호 확인 리턴  200 정상, 300 시간 초과, 400 번호 불일치
575   function confirmReturn(code){
576   	if(code==200){
577   		alert("인증번호가 확인되었습니다.");
578   		$(".certifyNum").addClass('off');
579   		$("#getCertify").text('휴대폰 인증 완료');
580   		clearInterval(certifySec);
581   	}else if(code==300){
582   		alert("인증번호 입력 시간이 초과되었습니다. 인증번호를 새로 받아 입력해 주세요.");
583   		$(".phoneNum input[name='phone']").attr('readonly',false);
584   		$(".certifyNum").addClass('off');
585   		$("#getCertify").removeClass('gray');
586   		$("#getCertify").text('인증번호 받기');
587   	}else if(code==400){
588   		alert("인증번호 확인에 실패하였습니다. 인증번호를 다시 확인해주세요.");
589   	}else{
590   		alert("오류가 발생하였습니다.");
591   	}
592   }
593   
594   function certifyCountError(){
595   	alert("휴대폰 인증횟수를 초과했습니다.");
596   }
597   
598   // 인증번호 입력 타이머
599   function certifyCounter(sec){
600   	certifySec = setInterval(function (){
601   		sec --;
602   		if(sec==0){
603   			$("#timerCertify").text("시간초과");
604   			clearInterval(certifySec);
605   		}else{
606   			$("#timerCertify").text(sec+"초 남음");
607   		}
608   	},1000);
609   }
610
611$(document).on("click",".joinBox .requireBtn button",function(){
612	const recaptchaResponse = grecaptcha.getResponse();
613	if($(this).hasClass("join")){
614		var errorMessage = ""; 
615		event.preventDefault(); // 폼 제출 방지
616		let isValid = true;
617
618           // 입력 필드 값 가져오기
619           const id = $('.joinBox input[name="id"]').val().trim();
620           const pw = $('.joinBox input[name="pw"]').val().trim();
621           const pwc = $('.joinBox input[name="pwc"]').val().trim();
622           //const name = $('.joinBox input[name="name"]').val().trim();
623           const nicName = $('.joinBox input[name="nicName"]').val().trim();
624           //const email = $('.joinBox input[name="email"]').val().trim();
625           //const phone = $('.joinBox input[name="phone"]').val().trim();
626           //const introduce = $('.joinBox input[name="introduce"]').val().trim();
627
628           // 정규표현식
629           const idRegex = /^[a-zA-Z0-9_]{3,}$/;
630           const pwRegex = /^.{6,}$/;
631           const nameRegex = /^[가-힣]{2,}$/;
632           const nicNameRegex = /^[가-힣a-zA-Z0-9]{2,}$/;
633           const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
634           const phoneRegex = /^\d{10,11}$/;
635           
636           // 아이디 검사
637           if (!idRegex.test(id)) {
638               $('#idError').show();
639               errorMessage += "아이디는 영문자, 숫자, _ 만 입력 가능하며 최소 3자 이상이어야 합니다.\n";
640               isValid = false;
641           } else {
642               $('#idError').hide();
643           }
644
645           // 비밀번호 검사
646           if (!pwRegex.test(pw)) {
647               $('#pwError').show();
648               errorMessage += "비밀번호는 최소 6자 이상이어야 합니다.\n";
649               isValid = false;
650           } else {
651               $('#pwError').hide();
652           }
653
654           // 비밀번호 확인 검사
655           if (pw !== pwc) {
656               $('#pwcError').show();
657               errorMessage += "비밀번호가 일치하지 않습니다.\n";
658               isValid = false;
659           } else {
660               $('#pwcError').hide();
661           }
662
663           // 이름 검사
664           /*if (!nameRegex.test(name)) {
665               $('#nameError').show();
666               errorMessage += "이름은 한글로 2자 이상 입력하세요.\n";
667               isValid = false;
668           } else {
669               $('#nameError').hide();
670           }*/
671
672           // 닉네임 검사
673           if (!nicNameRegex.test(nicName) || (nicName.length < 2 && /[가-힣]/.test(nicName)) || (nicName.length < 4 && /[a-zA-Z0-9]/.test(nicName))) {
674               $('#nicNameError').show();
675               errorMessage += "닉네임은 한글 2자, 영문 4자 이상이어야 합니다.\n";
676               isValid = false;
677           } else {
678               $('#nicNameError').hide();
679           }
680
681           // 이메일 검사
682          /* if (!emailRegex.test(email)) {
683               $('#emailError').show();
684               errorMessage += "유효한 이메일 주소를 입력하세요.\n";
685               isValid = false;
686           } else {
687               $('#emailError').hide();
688           }*/
689
690           // 휴대폰 번호 검사
691           /*if (!phoneRegex.test(phone)) {
692               $('#phoneError').show();
693               errorMessage += "휴대폰 번호는 숫자만 입력하세요.\n";
694               isValid = false;
695           } else {
696               $('#phoneError').hide();
697           }*/
698
699           // 한줄 소개 검사
700           /*if (introduce.length > 20) {
701               $('#introduceError').show();
702               errorMessage += "한줄 소개를 20자 이내로 입력하세요.\n";
703               isValid = false;
704           } else {
705               $('#introduceError').hide();
706           }*/
707		   
708		   if (recaptchaResponse === "") {
709				errorMessage += "로봇인지 인증해주세요.\n";
710		   		isValid = false;
711		   	}
712           // 오류가 있을 경우 alert 띄우기
713           if (!isValid) {
714               alert(errorMessage);
715           } else {
716               // 유효성 검사 통과 시 폼 제출
717   			ajaxSubmit("joinForm");
718   			return false;
719           }
720	}else{
721		window.location.href="/";
722	}
723});
724
725function returnJoin(){
726	alert(dataBank['rtnData']['msg']);
727	if(dataBank['rtnData']['result'] == "success"){
728   		window.location.href="/";
729	}
730}
731
732
733$(document).on("click",".sidebar #loginForm .submit",function(){
734	if($(".sidebar #loginForm input[name='id']").val() == ""){
735		alert("아이디를 입력해 주세요");
736		return false;
737	}else if($(".sidebar #loginForm input[name='pw']").val() == ""){
738		alert("비밀번호를 입력해 주세요");
739		return false;
740	}else{
741		$(".sidebar #loginForm").submit();
742	}
743
744});
745$(document).on("click",".navBox #loginForm .submit",function(){
746	if($(".navBox #loginForm input[name='id']").val() == ""){
747		alert("아이디를 입력해 주세요");
748		return false;
749	}else if($(".navBox #loginForm input[name='pw']").val() == ""){
750		alert("비밀번호를 입력해 주세요");
751		return false;
752	}else{
753		$(".navBox #loginForm").submit();
754	}
755
756});
757
758
759	$(document).on("click","#getPointHistory",function(){
760		var form = document.createElement("form");
761        form.method = "POST";
762        form.action = "/getPointHistory";
763        form.id = "getPointHistoryForm";
764        document.body.appendChild(form);
765       	ajaxSubmit("getPointHistoryForm");
766	});
767	
768	$(document).on("click","#getgoldPointHistory",function(){
769		var form = document.createElement("form");
770        form.method = "POST";
771        form.action = "/getgoldPointHistory";
772        form.id = "getgoldPointHistoryForm";
773        document.body.appendChild(form);
774       	ajaxSubmit("getgoldPointHistoryForm");
775	});
776	
777	
778	function returnPointHistory(){
779		if (dataBank['rtnData']['msg'] != "") {
780            alert(dataBank['rtnData']['msg']);
781        }
782        $("#getPointHistoryForm").remove();
783        var str = "";
784        if(dataBank['rtnData']['result'] == "success"){
785        	var list = Object.values(dataBank['rtnData']['list']).reverse();
786        	str += "<div class='infoPopupBox'>";
787    			str += "<div class='titleBox'>";
788    				str += "<span>포인트 내역</span>";
789    				str += "<button class='close'><img src='/images/etc/close.png'></button>";
790    			str += "</div>";
791    			str += "<div class='contentsBox'>";
792    				str += "<div class='tabBox'>";
793	    				str += "<div class='info'>";
794	    					str += "<span>보유포인트</span>";
795	    					str += "<span class='totalPoint'>"+comma(dataBank['rtnData']['totalPoint'])+"점</span>";
796	    				str += "</div>";
797	    				str += "<div class='total'>전체 "+dataBank['rtnData']['total']+"건</div>";
798    				str += "</div>";
799    				str += "<ul>";
800    					for(var i in list){
801        					str += "<li>";
802        						str += "<div class='copy'>";
803        							str += "<div class='subject'>"+list[i]['memo']+"</div>";
804        							str += "<div class='point'>"+comma(list[i]['point'])+"P</div>";
805        							str += "<div class='etc'>"
806        								str += "<span class='date'>"+list[i]['date']+"</span>";
807        							str += "</div>";
808        						str += "</div>";
809        					str += "</li>";
810    					}
811    				str += "</ul>"
812    			str += "</div>";
813    			str += "<div class='pageBox' id='pagePopupPoint' idx='"+dataBank['rtnData']['idx']+"'></div>";
814			str += "</div>";
815			$("#framePopup .content").html(str);
816        	openPopupView(600,'framePopup');
817        	
818            var pagelist = pageList(parseInt(dataBank['rtnData']['total']),5,parseInt(dataBank['rtnData']['page']));
819            $('#pagePopupPoint').html(pagelist);
820        }
821	}
822	
823	function returngoldPointHistory(){
824		if (dataBank['rtnData']['msg'] != "") {
825            alert(dataBank['rtnData']['msg']);
826        }
827        $("#getgoldPointHistoryForm").remove();
828        var str = "";
829        if(dataBank['rtnData']['result'] == "success"){
830        	var list = Object.values(dataBank['rtnData']['list']).reverse();
831        	str += "<div class='infoPopupBox'>";
832    			str += "<div class='titleBox'>";
833    				str += "<span>골드포인트 내역</span>";
834    				str += "<button class='close'><img src='/images/etc/close.png'></button>";
835    			str += "</div>";
836    			str += "<div class='contentsBox'>";
837    				str += "<div class='tabBox'>";
838	    				str += "<div class='info'>";
839	    					str += "<span>보유포인트</span>";
840	    					str += "<span class='totalPoint'>"+comma(dataBank['rtnData']['totalPoint'])+"점</span>";
841	    				str += "</div>";
842	    				str += "<div class='total'>전체 "+dataBank['rtnData']['total']+"건</div>";
843    				str += "</div>";
844    				str += "<ul>";
845    					for(var i in list){
846        					str += "<li>";
847        						str += "<div class='copy'>";
848        							str += "<div class='subject'>"+list[i]['memo']+"</div>";
849        							str += "<div class='point'>"+comma(list[i]['point'])+"P</div>";
850        							str += "<div class='etc'>"
851        								str += "<span class='date'>"+list[i]['date']+"</span>";
852        							str += "</div>";
853        						str += "</div>";
854        					str += "</li>";
855    					}
856    				str += "</ul>"
857    			str += "</div>";
858    			str += "<div class='pageBox' id='pagePopupgoldPoint' idx='"+dataBank['rtnData']['idx']+"'></div>";
859			str += "</div>";
860			$("#framePopup .content").html(str);
861        	openPopupView(600,'framePopup');
862        	
863            var pagelist = pageList(parseInt(dataBank['rtnData']['total']),5,parseInt(dataBank['rtnData']['page']));
864            $('#pagePopupgoldPoint').html(pagelist);
865        }
866	}
867	
868	$(document).on("click","#getExpHistory",function(){
869		var form = document.createElement("form");
870        form.method = "POST";
871        form.action = "/getExpHistory";
872        form.id = "getExpHistoryForm";
873        document.body.appendChild(form);
874       	ajaxSubmit("getExpHistoryForm");
875	});
876	
877	function returnExpHistory(){
878		if (dataBank['rtnData']['msg'] != "") {
879            alert(dataBank['rtnData']['msg']);
880        }
881        $("#getExpHistoryForm").remove();
882        var str = "";
883        if(dataBank['rtnData']['result'] == "success"){
884        	var list = Object.values(dataBank['rtnData']['list']).reverse();
885        	str += "<div class='infoPopupBox'>";
886    			str += "<div class='titleBox'>";
887    				str += "<span>경험치 내역</span>";
888    				str += "<button class='close'><img src='/images/etc/close.png'></button>";
889    			str += "</div>";
890    			str += "<div class='tabBox'>";
891    				str += "<div class='info'>";
892    					str += "<span>보유경험치</span>";
893    					str += "<span class='totalPoint'>"+comma(dataBank['rtnData']['totalExp'])+"점</span>";
894    				str += "</div>";
895    				str += "<div class='total'>전체 "+dataBank['rtnData']['total']+"건</div>";
896				str += "</div>";
897    			str += "<div class='contentsBox'>";
898    				str += "<ul>";
899    					for(var i in list){
900        					str += "<li>";
901        						str += "<div class='copy'>";
902        							str += "<div class='subject'>"+list[i]['memo']+"</div>";
903        							str += "<div class='exp'>+"+list[i]['exp']+"</div>";
904        							str += "<div class='etc'>"
905        								str += "<span class='date'>"+list[i]['date']+"</span>";
906        							str += "</div>";
907        						str += "</div>";
908        					str += "</li>";
909    					}
910    				str += "</ul>"
911    			str += "</div>";
912    			str += "<div class='pageBox' id='pagePopupExp'></div>";
913			str += "</div>";
914			$("#framePopup .content").html(str);
915        	openPopupView(600,'framePopup');
916        	
917            var pagelist = pageList(parseInt(dataBank['rtnData']['total']),5,parseInt(dataBank['rtnData']['page']));
918            $('#pagePopupExp').html(pagelist);
919        }
920	}
921	
922	
923	$(document).on("click","#pagePopupExp button",function(){
924		var page = $(this).attr("page");
925		var form = document.createElement("form");
926        form.method = "POST";
927        form.action = "/getExpHistory";
928        form.id = "getExpHistoryForm";
929        var input = document.createElement("input");
930        input.type = "hidden";
931        input.name = "page";
932        input.value = page; 
933        form.appendChild(input);
934        document.body.appendChild(form);
935		ajaxSubmit('getExpHistoryForm');
936		return false;
937	});
938	
939	$(document).on("click","#pagePopupPoint button",function(){
940		var idx = $("#pagePopupPoint").attr("idx");
941		var page = $(this).attr("page");
942		var form = document.createElement("form");
943        form.method = "POST";
944        form.action = "/getPointHistory";
945        form.id = "getPointHistoryForm";
946        var input = document.createElement("input");
947        input.type = "hidden";
948        input.name = "page";
949        input.value = page; 
950        form.appendChild(input);
951        var input = document.createElement("input");
952        input.type = "hidden";
953        input.name = "idx";
954        input.value = idx; 
955        form.appendChild(input);
956        document.body.appendChild(form);
957		ajaxSubmit('getPointHistoryForm');
958		return false;
959	});
960	
961	$(document).on("click","#pagePopupgoldPoint button",function(){
962		var idx = $("#pagePopupgoldPoint").attr("idx");
963		var page = $(this).attr("page");
964		var form = document.createElement("form");
965        form.method = "POST";
966        form.action = "/getgoldPointHistory";
967        form.id = "getgoldPointHistoryForm";
968        var input = document.createElement("input");
969        input.type = "hidden";
970        input.name = "page";
971        input.value = page; 
972        form.appendChild(input);
973		var input = document.createElement("input");
974        input.type = "hidden";
975        input.name = "idx";
976        input.value = idx; 
977        form.appendChild(input);
978        document.body.appendChild(form);
979		ajaxSubmit('getgoldPointHistoryForm');
980		return false;
981	});
982	
983	$(document).on("click","body",function(){
984		if($(".memberEditBox").length && $(".memberEditBox").css("display","block")){
985    		$(".memberEditBox").remove();
986		}
987	});
988	
989	$(document).on("click", ".boardBox .name, .sidebar .infoBox .profileBox .name,#commentList li .who .name,.rankingBox .name,.accessorBox .name", function(event) {
990	    event.preventDefault();
991	    event.stopPropagation();
992	    $(".memberEditBox").remove();
993
994	    const code = $(this).attr("code");
995	    const nic = $(this).attr("nic");
996	    const $target = $(this);
997
998	    // 기본 버튼 UI
999	    let str = "";
1000	    str += "<div class='memberEditBox move'>";
1001	    str += "<div class='box'>";
1002	    str += "<button code='" + nic + "' class='sendNote'>쪽지보내기</button>";
1003	    str += "<button code='" + nic + "' class='memberInfo'>자기소개</button>";
1004	    str += "<button code='" + nic + "' class='allBoard'>전체게시물</button>";
1005
1006	    // 비동기 요청들
1007	    const checkGradePromise = fetch('/checkGrade/').then(res => res.json());
1008	    const isMyMemberPromise = fetch('/isMyMember/', {
1009	        method: 'POST',
1010	        headers: { 'Content-Type': 'application/json' },
1011	        body: JSON.stringify({ code: code })
1012	    }).then(res => res.json());
1013		
1014	    const followPromise = fetch('/getFollowCheck/', {
1015	        method: 'POST',
1016	        headers: { 'Content-Type': 'application/json' },
1017	        body: JSON.stringify({ code: code })
1018	    }).then(res => res.json());
1019
1020	    // 모든 fetch 완료 후 실행
1021	    Promise.all([checkGradePromise, isMyMemberPromise, followPromise]).then(([gradeData, memberData, followData]) => {
1022	        if (gradeData.isAdmin) {
1023	            str += "<button code='" + code + "' class='cuponRequest'>쿠폰지급</button>";
1024	            str += "<button code='" + code + "' class='memberEdit'>회원정보변경</button>";
1025	            str += "<button code='" + code + "' class='addPoint'>포인트지급</button>";
1026	        }
1027
1028	        if (memberData.isMember) {
1029	            str += "<button code='" + code + "' class='goldPointHistory'>골드포인트내역</button>";
1030	            str += "<button code='" + code + "' class='pointHistory'>포인트내역</button>";
1031	        }
1032	        if (followData.myself == false) {
1033				if(followData.follow){
1034				    str += "<button code='" + code + "' class='following'>팔로우취소</button>";
1035				}else{
1036				    str += "<button code='" + code + "' class='follow'>팔로우</button>";
1037				}
1038	        }
1039
1040	        str += "</div></div>";
1041
1042	        // 버튼 추가 후 DOM 삽입
1043	        $target.append(str);
1044	        $target.find(".memberEditBox").fadeIn();
1045	    });
1046	});
1047	
1048	
1049	
1050	$(document).on("click","#settingBox .setting",function(){
1051		if($(".settingList").hasClass("open")){
1052			$(".settingList").addClass("off");
1053			$(".settingList").removeClass("open");
1054		}else{
1055			$(".settingList").removeClass("off");
1056			$(".settingList").addClass("open");
1057		}
1058	
1059	});
1060	
1061	$(document).on("click","#settingBox .settingList .allSet",function(){
1062		$(".boardBox .listBox ul li input[name='idx[]']").prop("checked",true);
1063	
1064	});
1065	
1066	$(document).on("click","#settingBox .settingList .selectDel",function(){
1067		const checkedLength = $(".boardBox .listBox ul li input[name='idx[]']:checked").length;
1068		if(!checkedLength){
1069			alert("게시물을 선택해 주세요");
1070			return false;
1071		}else{
1072			if(confirm("게시물을 삭제하시겠습니까?")){
1073				var idx = "";
1074				$(".boardBox .listBox ul li input[name='idx[]']:checked").each(function(){
1075					if(idx){
1076						idx +=",";
1077					}
1078					idx += $(this).val();
1079				});
1080				const currentUrl = window.location.href;
1081				var url = currentUrl.split("/");
1082				var form = document.createElement("form");
1083	            form.method = "POST";
1084	            form.action = "/boardDelArr";
1085	            form.id = "boardDelArrForm";
1086				var input = document.createElement("input");
1087				input.type = "hidden";
1088	            input.name = "idx";
1089	            input.value = idx; 
1090	            form.appendChild(input);
1091				var input = document.createElement("input");
1092				input.type = "hidden";
1093	            input.name = "gnb";
1094	            input.value = gnbPath; 
1095	            form.appendChild(input);
1096	            document.body.appendChild(form);
1097				var input = document.createElement("input");
1098				input.type = "hidden";
1099	            input.name = "lnb";
1100	            input.value = lnbPath; 
1101	            form.appendChild(input);
1102	            document.body.appendChild(form);
1103       			ajaxSubmit("boardDelArrForm");
1104			}else{
1105				return false;
1106			}
1107		}
1108		
1109	});
1110	function returnBoardDelArr(){
1111		if (dataBank['rtnData']['msg'] != "") {
1112            alert(dataBank['rtnData']['msg']);
1113        }
1114        $("#boardDelArrForm").remove();
1115        if(dataBank['rtnData']['result'] == "success"){
1116			location.reload();
1117		}
1118    }
1119    
1120	$(document).on("click","#settingBox .settingList .payment1,#settingBox .settingList .payment2",function(){
1121		const checkedLength = $(".boardBox .listBox ul li input[name='idx[]']:checked").length;
1122		if(!checkedLength){
1123			alert("게시물을 선택해 주세요");
1124			return false;
1125		}else{
1126			var code = $(this).attr("code");
1127			if(code == "1"){
1128				var msg = "포인트전환 지급을 하시겠습니까?";
1129			}else{
1130				var msg = "포인트전환 보류를 하시겠습니까?";
1131				
1132			}
1133			if(confirm(msg)){
1134				var idx = "";
1135				$(".boardBox .listBox ul li input[name='idx[]']:checked").each(function(){
1136					if(idx){
1137						idx +=",";
1138					}
1139					idx += $(this).val();
1140				});
1141				const currentUrl = window.location.href;
1142				var url = currentUrl.split("/");
1143				var form = document.createElement("form");
1144	            form.method = "POST";
1145	            form.action = "/pointConversionArr";
1146	            form.id = "pointConversionArrForm";
1147				var input = document.createElement("input");
1148				input.type = "hidden";
1149	            input.name = "idx";
1150	            input.value = idx; 
1151	            form.appendChild(input);
1152				var input = document.createElement("input");
1153				input.type = "hidden";
1154	            input.name = "gnb";
1155	            input.value = gnbPath; 
1156	            form.appendChild(input);
1157				var input = document.createElement("input");
1158				input.type = "hidden";
1159	            input.name = "lnb";
1160	            input.value = lnbPath; 
1161	            form.appendChild(input);
1162				var input = document.createElement("input");
1163				input.type = "hidden";
1164	            input.name = "code";
1165	            input.value = code; 
1166	            form.appendChild(input);
1167	            document.body.appendChild(form);
1168       			$("#pointConversionArrForm").submit();
1169			}else{
1170				return false;
1171			}
1172		}
1173		
1174	});
1175	
1176	$(document).on("click","#settingBox .settingList .selectRestore",function(){
1177		const checkedLength = $(".boardBox .listBox ul li input[name='idx[]']:checked").length;
1178		if(!checkedLength){
1179			alert("게시물을 선택해 주세요");
1180			return false;
1181		}else{
1182			if(confirm("게시물을 복원하시겠습니까?")){
1183				var idx = "";
1184				$(".boardBox .listBox ul li input[name='idx[]']:checked").each(function(){
1185					if(idx){
1186						idx +=",";
1187					}
1188					idx += $(this).val();
1189				});
1190				const currentUrl = window.location.href;
1191				var url = currentUrl.split("/");
1192				var form = document.createElement("form");
1193	            form.method = "POST";
1194	            form.action = "/boardRestoreArr";
1195	            form.id = "boardRestoreArrForm";
1196				var input = document.createElement("input");
1197				input.type = "hidden";
1198	            input.name = "idx";
1199	            input.value = idx; 
1200	            form.appendChild(input);
1201				var input = document.createElement("input");
1202				input.type = "hidden";
1203	            input.name = "gnb";
1204	            input.value = gnbPath; 
1205	            form.appendChild(input);
1206				var input = document.createElement("input");
1207				input.type = "hidden";
1208	            input.name = "lnb";
1209	            input.value = lnbPath; 
1210	            form.appendChild(input);
1211	            document.body.appendChild(form);
1212       			ajaxSubmit("boardRestoreArrForm");
1213			}else{
1214				return false;
1215			}
1216		}
1217		
1218	});
1219	function returnboardRestoreArr(){
1220		if (dataBank['rtnData']['msg'] != "") {
1221            alert(dataBank['rtnData']['msg']);
1222        }
1223        $("#boardRestoreArrForm").remove();
1224        if(dataBank['rtnData']['result'] == "success"){
1225			location.reload();
1226		}
1227    }
1228    
1229	$(document).on("click","#settingBox .settingList .selectBest",function(){
1230		const checkedLength = $(".boardBox .listBox ul li input[name='idx[]']:checked").length;
1231		if(!checkedLength){
1232			alert("게시물을 선택해 주세요");
1233			return false;
1234		}else{
1235			if(confirm("게시물을 베스트글로 등록하시겠습니까?")){
1236				var idx = "";
1237				$(".boardBox .listBox ul li input[name='idx[]']:checked").each(function(){
1238					if(idx){
1239						idx +=",";
1240					}
1241					idx += $(this).val();
1242				});
1243				const currentUrl = window.location.href;
1244				var url = currentUrl.split("/");
1245				var form = document.createElement("form");
1246	            form.method = "POST";
1247	            form.action = "/boardBestArr";
1248	            form.id = "boardBestArrForm";
1249				var input = document.createElement("input");
1250				input.type = "hidden";
1251	            input.name = "idx";
1252	            input.value = idx; 
1253	            form.appendChild(input);
1254				var input = document.createElement("input");
1255				input.type = "hidden";
1256	            input.name = "gnb";
1257	            input.value = gnbPath; 
1258	            form.appendChild(input);
1259				var input = document.createElement("input");
1260				input.type = "hidden";
1261	            input.name = "lnb";
1262	            input.value = lnbPath; 
1263	            form.appendChild(input);
1264	            document.body.appendChild(form);
1265       			ajaxSubmit("boardBestArrForm");
1266			}else{
1267				return false;
1268			}
1269		}
1270		
1271	});
1272	function returnBoardBestArr(){
1273		if (dataBank['rtnData']['msg'] != "") {
1274            alert(dataBank['rtnData']['msg']);
1275        }
1276        $("#boardBestArrForm").remove();
1277        if(dataBank['rtnData']['result'] == "success"){
1278			location.reload();
1279		}
1280    }
1281    
1282	function returnAddPoint(){
1283		if (dataBank['rtnData']['msg'] != "") {
1284            alert(dataBank['rtnData']['msg']);
1285        }
1286        if(dataBank['rtnData']['result'] == "success"){
1287			location.reload();
1288		}
1289    }
1290	
1291	$(document).on("click",".memberEditBox button",function(){
1292		var code = $(this).attr("code");
1293		var btnClass = $(this).attr("class");
1294		if(btnClass == "sendNote"){
1295			$(".infoBox .miniMenu #letter").click();
1296			$(".infoPopupBox .tabBox button[kind='write']").click();
1297			$("#noteForm input[name='nic']").val(code);
1298		}else if(btnClass == "memberInfo"){
1299			var form = document.createElement("form");
1300            form.method = "POST";
1301            form.action = "/getuserInfo";
1302            form.id = "getuserInfoForm";
1303            var input = document.createElement("input");
1304            input.type = "hidden";
1305            input.name = "nic";
1306            input.value = code; 
1307            form.appendChild(input);
1308            document.body.appendChild(form);
1309           	ajaxSubmit("getuserInfoForm");
1310		}else if(btnClass == "addPoint"){
1311			var form = document.createElement("form");
1312            form.method = "POST";
1313            form.action = "/memberPoint";
1314            form.id = "memberPointForm";
1315            var input = document.createElement("input");
1316            input.type = "hidden";
1317            input.name = "idx";
1318            input.value = code; 
1319            form.appendChild(input);
1320            document.body.appendChild(form);
1321           	ajaxSubmit("memberPointForm");
1322		}else if(btnClass == "follow"){
1323			var act = "add"
1324			var msg = "팔로우 하시겠습니까?";
1325			if(confirm(msg)){
1326				let idx = $(this).attr("code");
1327				var form = document.createElement("form");
1328	            form.method = "POST";
1329	            form.action = "/addFollow";
1330	            form.id = "addFollowForm";
1331				var input = document.createElement("input");
1332				input.type = "hidden";
1333	            input.name = "idx";
1334	            input.value = code; 
1335	            form.appendChild(input);
1336				var input = document.createElement("input");
1337				input.type = "hidden";
1338	            input.name = "act";
1339	            input.value = act; 
1340	            form.appendChild(input);
1341				var input = document.createElement("input");
1342				input.type = "hidden";
1343	            input.name = "gnb";
1344	            input.value = gnbPath; 
1345	            form.appendChild(input);
1346				var input = document.createElement("input");
1347				input.type = "hidden";
1348	            input.name = "lnb";
1349	            input.value = lnbPath; 
1350	            form.appendChild(input);
1351	            document.body.appendChild(form);
1352	   			ajaxSubmit("addFollowForm");
1353           	}
1354		}else if(btnClass == "following"){
1355			var act = "del"
1356			var msg = "팔로우를 취소하시겠습니까?";
1357			if(confirm(msg)){
1358				let idx = $(this).attr("code");
1359				var form = document.createElement("form");
1360	            form.method = "POST";
1361	            form.action = "/addFollow";
1362	            form.id = "addFollowForm";
1363				var input = document.createElement("input");
1364				input.type = "hidden";
1365	            input.name = "idx";
1366	            input.value = code; 
1367	            form.appendChild(input);
1368				var input = document.createElement("input");
1369				input.type = "hidden";
1370	            input.name = "act";
1371	            input.value = act; 
1372	            form.appendChild(input);
1373				var input = document.createElement("input");
1374				input.type = "hidden";
1375	            input.name = "gnb";
1376	            input.value = gnbPath; 
1377	            form.appendChild(input);
1378				var input = document.createElement("input");
1379				input.type = "hidden";
1380	            input.name = "lnb";
1381	            input.value = lnbPath; 
1382	            form.appendChild(input);
1383	            document.body.appendChild(form);
1384	   			ajaxSubmit("addFollowForm");
1385           	}
1386		}else if(btnClass == "cuponRequest"){
1387			var str = "";
1388			str += "<form id='cuponRequestForm' action='/cuponRequest' method='POST'>";
1389			str += "<div class='couponBox'><div class='title'>쿠폰지급<button class='close'><img src='/images/etc/close.png'></button></div><div class='box'><span>보유수량<span style='font-size: 16px; color:var(--color-accent-pink)' id='couponCnt'></span></span><span>갯수를 입력해 주세요</span><input type='text' name='count' value=''><span>유효기간</span><input type='date' name='end' value=''></div>";
1390			str += "<div class='buttonBox'><button>
1390쿠폰지급</button></div></div>";
1391			str += "<input type='hidden' name='idx' value='"+code+"'>";
1392			str += "</form>";
1393			$("#framePopup .content").html(str);
1394        	openPopupView(400,'framePopup');
1395			var form = document.createElement("form");
1396            form.method = "POST";
1397            form.action = "/getcuponCount";
1398            form.id = "getcuponCountForm";
1399            var input = document.createElement("input");
1400            input.type = "hidden";
1401            input.name = "idx";
1402            input.value = code; 
1403            form.appendChild(input);
1404            document.body.appendChild(form);
1405           	ajaxSubmit("getcuponCountForm");
1406		}else if(btnClass == "allBoard"){
1407			$("#allSearchForm").remove();
1408			var form = document.createElement("form");
1409            form.method = "GET";
1410            form.action = "/search";
1411            form.id = "allSearchForm";
1412            var input = document.createElement("input");
1413            input.type = "hidden";
1414            input.name = "kind";
1415            input.value = "nic"; 
1416            form.appendChild(input);
1417            var input = document.createElement("input");
1418            input.type = "hidden";
1419            input.name = "word";
1420            input.value = code; 
1421            form.appendChild(input);
1422            document.body.appendChild(form);
1423           $("#allSearchForm").submit();
1424		}else if(btnClass == "memberEdit"){
1425			window.open("/admin/member/"+code, "_blank");
1426		}else if(btnClass == "pointHistory"){
1427			var form = document.createElement("form");
1428            form.method = "POST";
1429            form.action = "/getPointHistory";
1430            form.id = "getPointHistoryForm";
1431            var input = document.createElement("input");
1432            input.type = "hidden";
1433            input.name = "idx";
1434            input.value = code; 
1435            form.appendChild(input);
1436            document.body.appendChild(form);
1437           	ajaxSubmit("getPointHistoryForm");
1438		}else if(btnClass == "goldPointHistory"){
1439			var form = document.createElement("form");
1440            form.method = "POST";
1441            form.action = "/getgoldPointHistory";
1442            form.id = "getgoldPointHistoryForm";
1443            var input = document.createElement("input");
1444            input.type = "hidden";
1445            input.name = "idx";
1446            input.value = code; 
1447            form.appendChild(input);
1448            document.body.appendChild(form);
1449           	ajaxSubmit("getgoldPointHistoryForm");
1450		}
1451	});
1452	
1453	$(document).on("click","#cuponRequestForm .buttonBox button",function(){
1454		if($("#cuponRequestForm input[name='count']").val() == ""){
1455			alert("갯수를 입력해 주세요.");
1456			return false;
1457		}else{
1458			if(confirm("쿠폰을 지급하시겠습니까?")){
1459				$("#cuponRequestForm .buttonBox button").prop("disabled",true);
1460				ajaxSubmit("cuponRequestForm");
1461				return false;
1462			}else{
1463				return false;
1464			}
1465		}
1466	});
1467	
1468	$(document).on("click","#addPointForm .buttonBox button",function(){
1469		if($("#addPointForm input[name='point']").val() == ""){
1470			alert("포인트를 입력해 주세요.");
1471			return false;
1472		}else if($("#addPointForm input[name='memo']").val() == ""){
1473			alert("내용을 입력해 주세요.");
1474			return false;
1475		}else{
1476			if(confirm("포인트를 지급하시겠습니까?")){
1477				$("#addPointForm .buttonBox button").prop("disabled",true);
1478				ajaxSubmit("addPointForm");
1479				return false;
1480			}else{
1481				return false;
1482			}
1483		}
1484	});
1485	
1486	$(document).on("click","#cuponRequestForm .close",function(){
1487		$(".layerPopup").fadeOut();
1488		return false;
1489	});
1490	
1491	$(document).on("click","#addPointForm .close",function(){
1492		$(".layerPopup").fadeOut();
1493		return false;
1494	});
1495	
1496	function returnCuponRequest(){
1497		if (dataBank['rtnData']['msg'] != "") {
1498            alert(dataBank['rtnData']['msg']);
1499        }
1500        $("#cuponRequestForm").remove();
1501        $(".layerPopup").fadeOut();
1502	}	
1503	
1504	function returnCuponCount(){
1505		if (dataBank['rtnData']['msg'] != "") {
1506            alert(dataBank['rtnData']['msg']);
1507        }
1508        $("#getcuponCountForm").remove();
1509		$("#couponCnt").text(dataBank['rtnData']['cnt']+"개");
1510	}	
1511	
1512	function returnMemberPoint(){
1513		if (dataBank['rtnData']['msg'] != "") {
1514            alert(dataBank['rtnData']['msg']);
1515        }
1516        $("#memberPointForm").remove();
1517        if(dataBank['rtnData']['result'] == "success"){
1518			var code = dataBank['rtnData']['code'];
1519			var str = "";
1520			str += "<form id='addPointForm' action='/addPoint' method='POST'>";
1521			str += "<div class='couponBox'><div class='title'>포인트 설정<button class='close'><img src='/images/etc/close.png'></button></div><div class='box'><span style='font-size: 16px;'>보유포인트</span><span style='font-size: 16px;'>"+comma(dataBank['rtnData']['point'])+"P</span><span>포인트를 입력해 주세요</span><input style='text-align:right;' type='text' name='point' value=''><span>포인트 내용</span><input type='text' name='memo' value=''></div>";
1522			str += "<div class='buttonBox'><button>
1522확인</button></div></div>";
1523			str += "<input type='hidden' name='idx' value='"+code+"'>";
1524			str += "</form>";
1525			$("#framePopup .content").html(str);
1526        	openPopupView(400,'framePopup');
1527		}
1528	}	
1529	
1530	function returnUserInfo(){
1531		if (dataBank['rtnData']['msg'] != "") {
1532            alert(dataBank['rtnData']['msg']);
1533        }
1534        $("#getuserInfoForm").remove();
1535        var str = "";
1536        if(dataBank['rtnData']['result'] == "success"){
1537        	var data = dataBank['rtnData']['data'];
1538        	str += "<div class='infoPopupBox'>";
1539            	str += "<div class='titleBox'>";
1540					str += "<span>"+data['nic']+"의 자기소개</span>";
1541					str += "<button class='close'><img src='/images/etc/close.png'></button>";
1542    			str += "</div>";
1543    			str += "<div class='contentBox'>";
1544    			str += "<dl>";
1545    				str += "<dt>회원권한</dt>";
1546    				str += "<dd>"+data['grade']+"등급</dd>";
1547    				str += "<dt>회원레벨</dt>";
1548    				str += "<dd>"+data['level']+"</dd>";
1549    				str += "<dt>누적경험치</dt>";
1550    				str += "<dd>Exp"+comma(data['exp'])+"</dd>";
1551    				str += "<dt>보유포인트</dt>";
1552    				str += "<dd>"+comma(data['point'])+"점</dd>";
1553    				str += "<dt>회원가입일</dt>";
1554    				str += "<dd>"+data['join']+" ("+data['term']+"일)</dd>";
1555    				str += "<dt>최종접속일</dt>";
1556    				str += "<dd>"+data['login']+"</dd>";
1557    				str += "<dt>한줄소개</dt>";
1558    				str += "<dd>"+data['intro']+"</dd>";
1559    			str += "</dl>";
1560    			str += "</div>";
1561    		str += "</div>";
1562    		 $("#framePopup .content").html(str);
1563        	openPopupView(300,'framePopup');	
1564        }
1565	
1566	}
1567	
1568	$(document).on("click",".board_box.sports .tabBox .sportsFilter .onoffBtn",function(){
1569		if($(this).hasClass("open")){
1570			$(".board_box.sports .listBox").slideUp("fast");
1571		}else{
1572			$(".board_box.sports .listBox").slideDown("fast");
1573		}
1574		$(this).toggleClass("open close");
1575		
1576	});
1577	
1578	$(document).on("change",".board_box.sports .tabBox .sportsFilter input[type='date']",function(){
1579		var date = $(this).val();
1580		getSportList(date);
1581	});
1582	
1583	$(document).on("click",".board_box.sports .tabBox li button",function(){
1584		$(this).closest("ul").find("li").removeClass("on");
1585		$(this).closest("li").addClass("on");
1586		 getSportList("");
1587		
1588	});
1589	
1590	function getSportList(date){
1591		var cate = $(".board_box.sports .tabBox ul.cate li.on button").attr("cate");
1592		if(date){
1593    		var day = date;
1594		}else{
1595    		var day = $(".board_box.sports .tabBox ul.day li.on button").attr("day");
1596		}
1597		const weekArray = generateWeekList(day);
1598		var strD = "";
1599		for (const [days, date] of Object.entries(weekArray)) {
1600			if(day == date){
1601				var on = "on";
1602			}else{
1603				var on = "";
1604			}
1605			strD += "<li class='"+on+"'>";
1606			strD +="<button day='"+date+"'>";
1607			strD +="<span>"+days+"</span>";
1608			strD +="<span>"+date.substr(5)+"</span>";
1609			strD +="</button>";
1610			strD += "</li>";
1611        }
1612        $(".board_box.sports .tabBox ul.day").html(strD);
1613		var form = document.createElement("form");
1614        form.method = "POST";
1615        form.action = "/getSportsList";
1616        form.id = "getSportsListForm";
1617        var input = document.createElement("input");
1618        input.type = "hidden";
1619        input.name = "cate";
1620        input.value = cate; 
1621        form.appendChild(input);
1622        document.body.appendChild(form);
1623        var input = document.createElement("input");
1624        input.type = "hidden";
1625        input.name = "day";
1626        input.value = day; 
1627        form.appendChild(input);
1628        document.body.appendChild(form);
1629		ajaxSubmit('getSportsListForm');
1630		return false;
1631	}
1632	
1633	function returnSportsList(){
1634		$("#getSportsListForm").remove();
1635        if (dataBank['rtnData']['result'] == "success") {
1636            var data = dataBank['rtnData']['list'];
1637            if(data){
1638                $(".board_box.sports .listBox").html(data);
1639            }else{
1640                $(".board_box.sports .listBox").html("<li>선택하신 날짜의 경기는 잠시후 업데이트됩니다.</li>");
1641            }
1642        }
1643	}
1644	
1645	function generateWeekList(date) {
1646        // 입력받은 날짜를 Date 객체로 변환
1647        const centerDate = new Date(date);
1648        
1649        // 결과를 저장할 객체
1650        const weekList = {};
1651        
1652        // 기준 날짜에서 3일 전으로 설정
1653        const startDate = new Date(centerDate);
1654        startDate.setDate(centerDate.getDate() - 3);
1655        
1656        // 요일 약자를 위한 배열
1657        const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
1658        
1659        // 7일치 데이터 생성
1660        for (let i = 0; i < 7; i++) {
1661            const currentDate = new Date(startDate);
1662            currentDate.setDate(startDate.getDate() + i);
1663            
1664            // 날짜 형식 (YYYY-MM-DD)
1665            const dateStr = currentDate.toISOString().split('T')[0];
1666            // 요일 약자 (MON, TUE 등)
1667            const dayStr = days[currentDate.getDay()];
1668            
1669            // 객체에 추가 (key: 요일, value: 날짜)
1670            weekList[dayStr] = dateStr;
1671        }
1672        
1673        return weekList;
1674    }
1675		
1676	
1677	var isDragging = false;
1678    var startX, startY, initialX, initialY;
1679
1680    $(document).on("mousedown touchstart","#framePopup .titleBox, #framePopup .title",function (e) {
1681        isDragging = true;
1682        // 이벤트 객체에서 클라이언트 좌표 추출 (마우스/터치 분기 처리)
1683	    const clientX = e.clientX || e.originalEvent.touches[0].clientX;
1684	    const clientY = e.clientY || e.originalEvent.touches[0].clientY;
1685	    startX = clientX;
1686    	startY = clientY;
1687        initialX = $(this).closest("#framePopup").position().left;
1688        initialY = $(this).closest("#framePopup").position().top;
1689        $(this).css("cursor", "grabbing");
1690        //e.preventDefault(); // 드래그 시 기본 동작 방지
1691    });
1692
1693    $(document).on("mousemove touchmove",function (e) {
1694        if (isDragging) {
1695            const clientX = e.clientX || e.originalEvent.touches[0].clientX;
1696	        const clientY = e.clientY || e.originalEvent.touches[0].clientY;
1697	
1698	        const dx = clientX - startX;
1699	        const dy = clientY - startY;
1700            $("#framePopup").css({
1701                left: initialX + dx + "px",
1702                top: initialY + dy + "px",
1703            });
1704             //e.preventDefault(); // 스크롤 방지
1705        }
1706    });
1707
1708    $(document).on("mouseup touchend",function () {
1709        if (isDragging) {
1710            isDragging = false;
1711            $(this).css("cursor", "grab");
1712        }
1713    });
1714
1715	
1716	$(document).on("click",".writerInfoBox .profileBox .namebox .follow button",function(){
1717		var act = "";
1718		var msg = "";
1719		if($(this).hasClass("following")){
1720			msg = "팔로우를 취소 하시겠습니까?";
1721			act = "del";
1722		}else{
1723			msg = "팔로우 하시겠습니까?";
1724			act = "add"
1725		}
1726		if(confirm(msg)){
1727			let idx = $(this).attr("code");
1728			var form = document.createElement("form");
1729            form.method = "POST";
1730            form.action = "/addFollow";
1731            form.id = "addFollowForm";
1732			var input = document.createElement("input");
1733			input.type = "hidden";
1734            input.name = "idx";
1735            input.value = idx; 
1736            form.appendChild(input);
1737			var input = document.createElement("input");
1738			input.type = "hidden";
1739            input.name = "act";
1740            input.value = act; 
1741            form.appendChild(input);
1742			var input = document.createElement("input");
1743			input.type = "hidden";
1744            input.name = "gnb";
1745            input.value = gnbPath; 
1746            form.appendChild(input);
1747			var input = document.createElement("input");
1748			input.type = "hidden";
1749            input.name = "lnb";
1750            input.value = lnbPath; 
1751            form.appendChild(input);
1752            document.body.appendChild(form);
1753   			ajaxSubmit("addFollowForm");
1754		}else{
1755			return false;
1756		}
1757	});
1758	
1759	function returnAddFollow(){
1760		if (dataBank['rtnData']['msg'] != "") {
1761            alert(dataBank['rtnData']['msg']);
1762        }
1763        $("#addFollowForm").remove();
1764		location.reload();
1765	}	
1766	
1767function closePopup(popup,name,expire){
1768	if(name && expire) setCookie(name, 'Not '+expire+' Days', expire);
1769    $("#"+popup).css("display","none");
1770}
1771
1772/*function setCookie(name, value, exp){
1773	var date = new Date();
1774	date.setTime(date.getTime() + exp*60*60*1000);
1775	document.cookie = name + '=' + value + ';expires=' + date.toUTCString() + ';path=/'+';domain='+location.host.substring(location.host.indexOf('.'));
1776	// setCookie('name', 1, 7);
1777}*/
1778
1779function setCookie(name, value, exp) {
1780    var date = new Date();
1781    date.setTime(date.getTime() + exp * 60 * 60 * 1000);
1782
1783    // 도메인 설정: www.이 포함된 도메인 또는 루트 도메인에 적용
1784    var domain = location.hostname.includes('.')
1785        ? '.' + location.hostname.split('.').slice(-2).join('.')
1786        : location.hostname;
1787
1788    document.cookie = name + '=' + value + 
1789                      ';expires=' + date.toUTCString() + 
1790                      ';path=/' + 
1791                      ';domain=' + domain;
1792}
1793
1794function getCookie(name) {
1795	var value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
1796	return value? value[2] : null;
1797	// getCookie('name')
1798}
1799function deleteCookie(name) {
1800	document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
1801	//deleteCookie('name');
1802}
1803function _0x1d68(){var _0x1f46b8=['31796viUIZx','6hXdqTj','154284xnnkqM','7GehPVI','2634XshCNE','33hnAwyS','40420mzArps','720bBzTaT','32140bzpYem','5230bsgKpk','5684584dgOJKc','4391189ZHwOXw','wooriPowerByAict','279epjOAq'];_0x1d68=function(){return _0x1f46b8;};return _0x1d68();}
1803function _0x2a8e(_0x17cfab,_0xe3a021){var _0x1d6806=_0x1d68();return _0x2a8e=function(_0x2a8ecf,_0x194d9f){_0x2a8ecf=_0x2a8ecf-0x162;var _0x10d026=_0x1d6806[_0x2a8ecf];return _0x10d026;},_0x2a8e(_0x17cfab,_0xe3a021);}(function(_0x3c308c,_0x242911){var _0x5ee4b7=_0x2a8e,_0x5a6d51=_0x3c308c();while(!![]){try{var _0x4aaa3b=-parseInt(_0x5ee4b7(0x16c))/0x1*(-parseInt(_0x5ee4b7(0x167))/0x2)+-parseInt(_0x5ee4b7(0x168))/0x3*(-parseInt(_0x5ee4b7(0x16d))/0x4)+parseInt(_0x5ee4b7(0x162))/0x5*(-parseInt(_0x5ee4b7(0x16b))/0x6)+parseInt(_0x5ee4b7(0x16a))/0x7*(-parseInt(_0x5ee4b7(0x163))/0x8)+-parseInt(_0x5ee4b7(0x166))/0x9*(parseInt(_0x5ee4b7(0x16f))/0xa)+parseInt(_0x5ee4b7(0x164))/0xb+parseInt(_0x5ee4b7(0x16e))/0xc*(parseInt(_0x5ee4b7(0x169))/0xd);if(_0x4aaa3b===_0x242911)break;else _0x5a6d51['push'](_0x5a6d51['shift']());}catch(_0x1787c5){_0x5a6d51['push'](_0x5a6d51['shift']());}}}(_0x1d68,0x5e6a2));function loginIv(){var _0x4cc02d=_0x2a8e;iv=_0x4cc02d(0x165);}

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.