PageSourceSearch

https://kmbridge.org/common/js/controller/co/COCmmCtrl.js?20261009105149

js kmbridge.org collected 2026-10-09 01:52:32 UTC 35,773 bytes, 1,303 lines download raw bytes

1var cmmCtrl = (function(){
2
3	"use strict";
4
5	var fn_replace_null = function(val, chgStr)
6	{
7		if (val == undefined || val == null || val == "")
8		{
9			return chgStr;
10		}
11		else
12		{
13			return val;
14		}
15	};
16
17	/* Ajax Normal */
18	var fn_ajax = function(callbackAjax, url, dataType, loading, sync)
19	{
20		if (typeof dataType == "undefined") {
21			dataType = "json";
22		}
23
24		if (typeof sync == "undefined") {
25			sync = true;
26		}
27
28		jQuery.ajax({
29			url : url,
30			type : "post",
31			timeout: 30000,
32			dataType : dataType,
33			async: sync,
34			cache : false,
35			beforeSend : function(){
36				if (loading) {
37					jQuery(".loading-area").stop().fadeIn(200);
38				}
39			},
40			success : function(data, status, xhr){
41				if(data.errors != null){
42					fn_ajax_error(data, status, xhr);
43				}
44				else
45				{
46					formObj.data("submitFlag", "N");
47					if (callbackAjax) {
48						callbackAjax(data);
49					}
50				}
51			},
52			error : function(data, status, xhr){
53				fn_ajax_error(data, status, xhr);
54			},
55			complete : function(){
56				if (loading) {
57					jQuery(".loading-area").stop().fadeOut(200);
58				}
59			}
60		});
61	};
62
63	/* Ajax Form Data */
64	var fn_ajax_data = function(callbackAjax, url, formObj, formActionType, dataRespType, loading, sync)
65	{
66		//폼 전송 타입
67		if (typeof formActionType == "undefined") {
68			formActionType = "POST";
69		}
70		if(typeof loading == "undefined" || loading =="") {
71			loading = true;
72		}
73		//비동기 여부
74		if (typeof sync == "undefined") {
75			sync = true;
76		}
77		//application header json
78		if (typeof dataRespType == "undefined") {
79			dataRespType = "json";
80		}
81		//데디터 배열 처리
82		if (formObj.data("submitFlag") != "Y") {
83			jQuery.ajax({
84				url : url,
85				type : formActionType,
86				timeout: 30000,
87				data : formObj.serializeArray(),
88				dataType : dataRespType,
89				async: sync,
90				cache : false,
91				beforeSend : function(){
92					formObj.data("submitFlag", "Y");
93					if (loading) {
94						jQuery(".loading-area").stop().fadeIn(200);
95					}
96				},
97				success : function(data, status, xhr){
98					//비동기일때 errors 처리
99					if(data.errors != null){
100						if(typeof data.statusCode == "undefined"){
101							formObj.data("submitFlag", "N");
102						}
103						fn_ajax_error(data, status, xhr);
104					}
105					else
106					{
107						formObj.data("submitFlag", "N");
108						if (callbackAjax) {
109							callbackAjax(data);
110						}
111					}
112				},
113				error : function(data, status, xhr){
114					formObj.data("submitFlag", "N");
115					fn_ajax_error(data, status, xhr);
116				},
117				complete : function(){
118					if (loading) {
119						jQuery(".loading-area").stop().fadeOut(200);
120					}
121				}
122			});
123		}
124	};
125
126	//리스트 조회 data 가져오기
127	var fn_list_frm_set_data = function(formObj){
128		var array = new Array();
129		formObj.find("input:text, input:checkbox, select").each(function(){
130			if($(this).data("name") != undefined)
131			{
132				//삭제
133				formObj.find("input[type=hidden][name="+$(this).data("name")+"]").remove();
134			}
135		});
136		formObj.find("input:text, input:checkbox, select").each(function(){
137			if($(this).data("name") != undefined)
138			{
139				var inputTag = "";
140				var tagType = $(this).attr("type");
141				if(tagType == "checkbox")
142				{
143					if( $(this).is(":checked"))
144					{
145						inputTag = $("<input />", {
146							type : "hidden",
147							class : "form-notRequired notRequired",
148							name : $(this).data("name"),
149							value : $(this).val()
150						});
151						formObj.append(inputTag);
152					}
153				}
154				else
155				{
156					inputTag = $("<input />", {
157						type : "hidden",
158						class : "form-notRequired notRequired",
159						name : $(this).data("name"),
160						value : $(this).val()
161					});
162					formObj.append(inputTag);
163				}
164			}
165		})
166	}
167	/* 리스트 조회 Ajax Form Data */
168	var fn_list_ajax_data = function(callbackAjax, url, formObj, formActionType, dataRespType, loading, sync)
169	{
170		//폼 전송 타입
171		if (typeof formActionType == "undefined") {
172			formActionType = "POST";
173		}
174		//비동기 여부
175		if (typeof sync == "undefined") {
176			sync = true;
177		}
178		//application header json
179		if (typeof dataRespType == "undefined") {
180			dataRespType = "json";
181		}
182		//데디터 배열 처리
183		if (formObj.data("submitFlag") != "Y") {
184			jQuery.ajax({
185				url : url,
186				type : formActionType,
187				timeout: 30000,
188				data : formObj.serializeArray(),
189				dataType : dataRespType,
190				async: sync,
191				cache : false,
192				beforeSend : function(){
193					formObj.data("submitFlag", "Y");
194					if (loading) {
195						jQuery(".loading-area").stop().fadeIn(200);
196					}
197				},
198				success : function(data, status, xhr){
199					//비동기일때 errors 처리
200					if(data.errors != null){
201						if(typeof data.statusCode == "undefined"){
202							formObj.data("submitFlag", "N");
203						}
204						fn_ajax_error(data, status, xhr);
205					}
206					else
207					{
208						formObj.data("submitFlag", "N");
209						if (callbackAjax) {
210							callbackAjax(data);
211						}
212					}
213				},
214				error : function(data, status, xhr){
215					formObj.data("submitFlag", "N");
216					fn_ajax_error(data, status, xhr);
217				},
218				complete : function(){
219					if (loading) {
220						jQuery(".loading-area").stop().fadeOut(200);
221					}
222				}
223			});
224		}
225	};
226
227	/* Ajax Param Data */
228	var fn_ajax_param_data = function(callbackAjax, url, paramData, dataType, loading, sync, type)
229	{
230		if (typeof dataType == "undefined") {
231			dataType = "json";
232		}
233
234		if (typeof sync == "undefined") {
235			sync = true;
236		}
237
238		if (typeof type == "undefined") {
239			type = "POST";
240		}
241		jQuery.ajax({
242			url : url,
243			type : type,
244			timeout: 300000,
245			data : paramData,
246			dataType : dataType,
247			async: sync,
248			cache : false,
249			beforeSend : function() {
250				if (loading) {
251					jQuery(".loading-area").stop().fadeIn(200);
252				}
253			},
254			success : function(data, status, xhr) {
255				if(data.errors != null){
256					fn_ajax_error(data, status, xhr);
257				}
258				else
259				{
260					if (callbackAjax) {
261						callbackAjax(data);
262					}
263				}
264			},
265			error : function(data, status, xhr) {
266				console.log(data)
267				fn_ajax_error(data, status, xhr);
268			},
269			complete : function() {
270				if (loading) {
271					jQuery(".loading-area").stop().fadeOut(200);
272				}
273			}
274		});
275	};
276
277	/* Ajax Param Data */
278	var fn_json_ajax_data = function(callbackAjax, url, paramData, dataType, loading, sync)
279	{
280		if (typeof dataType == "undefined") {
281			dataType = "json";
282		}
283
284		if (typeof sync == "undefined") {
285			sync = false;
286		}
287		var jsonStrData = JSON.stringify(paramData);
288		jQuery.ajax({
289			headers: {
290				'X-Requested-With': 'XMLHttpRequest',
291				'X-CSRF-TOKEN': $('meta[name=X-CSRF-TOKEN]').attr('content')
292			},
293			url : url,
294			type : "POST",
295			timeout: 300000,
296			data : jsonStrData,
297			dataType : dataType,
298			async: sync,
299			contentType: "application/json; charset=utf-8",
300			beforeSend : function() {
301				if (loading) {
302					jQuery(".loading-area").stop().fadeIn(200);
303				}
304			},
305			success : function(data, status, xhr) {
306				if(data.errors != null){
307					fn_ajax_error(data, status, xhr);
308				}
309				else
310				{
311					if (callbackAjax) {
312						callbackAjax(data);
313					}
314				}
315			},
316			error : function(data, status, xhr) {
317				fn_ajax_error(data, status, xhr);
318			},
319			complete : function() {
320				if (loading) {
321					jQuery(".loading-area").stop().fadeOut(200);
322				}
323			}
324		});
325	};
326
327	/* Ajax Error */
328	var fn_ajax_error = function(data, status, xhr)
329	{
330		var loginFlag = true, statusCode = data.status;
331		if (statusCode == 401 || statusCode == 403 || statusCode == 406)
332		{
333			alert(msgCtrl.getMsg("fail.http.status.C" + statusCode));
334			if (statusCode != 403)
335			{
336				loginFlag = false;
337			}
338		}
339		else if(status == "success" && data.respCd == "500"){
340			// Valid 실패
341			$.each(data.errors, function(index, resp){
342				$("#"+resp.fieldNm).focus();
343				var msg = "";
344				if(resp.msg.indexOf("empty") > -1)
345				{
346					var title = $("#"+resp.fieldNm).attr("title");
347					if(typeof title != "undefined")
348					{
349						msg = title + ((title.charAt(title.length - 1).charCodeAt(0) - 44032 ) % 28 ? "을" : "를") + eval(resp.msg);
350					}
351				}
352				else
353				{
354					msg = eval(resp.msg);
355				}
356				//var html = '<p style="color:red">'+msg+'</p>';
357				//$("#"+resp.fieldNm).after(html);
358				alert(msg);
359				return false;
360			});
361		}
362		else
363		{
364			alert(msgCtrl.getMsg("fail.act"));
365		}
366
367		if (!loginFlag)
368		{
369			location.href = "/";
370		}
371	};
372
373	/* Set Period */
374	var fn_set_period = function(obj, periodGubun, trgtPeriod, isStrtFocus)
375	{
376
377		var isVaild = false;
378		var today = new Date($("body").data("curtDt"));
379		if (periodGubun && typeof trgtPeriod === "number")
380		{
381			var year  = today.getFullYear();
382			var month = today.getMonth() + 1;
383			var day   = today.getDate();
384
385			var trgtDay;
386
387			if (periodGubun == "y")
388			{
389				var tempDay = new Date(year - trgtPeriod, month - 1, day);
390
391				var trgtYear  = tempDay.getFullYear();
392				var trgtMonth = tempDay.getMonth() + 1;
393				var trgtDay   = tempDay.getDate();
394
395				if (trgtMonth < 10)
396				{
397					trgtMonth = "0" + trgtMonth;
398				}
399
400				if (trgtDay < 10)
401				{
402					trgtDay = "0" + trgtDay;
403				}
404
405				trgtDay = trgtYear + "-" + trgtMonth  + "-" + trgtDay;
406			}
407			else if (periodGubun == "m")
408			{
409				var tempDay = new Date(year, month - 1, 1);
410
411				tempDay.setMonth(tempDay.getMonth() - (trgtPeriod - 1));
412				tempDay.setDate(tempDay.getDate() - 1);
413
414				var trgtYear  = tempDay.getFullYear();
415				var trgtMonth = tempDay.getMonth() + 1;
416				var trgtDay   = tempDay.getDate();
417
418				if (trgtMonth < 10)
419				{
420					trgtMonth = "0" + trgtMonth;
421				}
422
423				if (day < trgtDay)
424				{
425					trgtDay = day;
426				}
427
428				if (trgtDay < 10)
429				{
430					trgtDay = "0" + trgtDay;
431				}
432
433				trgtDay = trgtYear + "-" + trgtMonth  + "-" + trgtDay;
434			}
435			else if (periodGubun == "d")
436			{
437				var tempDay = new Date(year, month - 1, day - trgtPeriod);
438
439				var trgtYear  = tempDay.getFullYear();
440				var trgtMonth = tempDay.getMonth() + 1;
441				var trgtDay   = tempDay.getDate();
442
443				if (trgtMonth < 10)
444				{
445					trgtMonth = "0" + trgtMonth;
446				}
447
448				if (trgtDay < 10)
449				{
450					trgtDay = "0" + trgtDay;
451				}
452
453				trgtDay = trgtYear + "-" + trgtMonth  + "-" + trgtDay;
454			}
455
456			if (trgtDay)
457			{
458				isVaild = true;
459			}
460		}
461
462		var formObj= obj ? jQuery(obj).closest("form") : jQuery("#frmSearch");
463
464		var strtDtObj = formObj.find(".datetimepicker_strtDt");
465		var strtDtObj2 = formObj.find(".datetimepicker_strtDtm");
466		var endDtObj  = formObj.find(".datetimepicker_endDt");
467		var endDtObj2  = formObj.find(".datetimepicker_endDtm");
468
469		strtDtObj = $(obj).closest("fieldset").find(".datetimepicker_strtDt");
470		strtDtObj2 = $(obj).closest("fieldset").find(".datetimepicker_strtDtm");
471		endDtObj = $(obj).closest("fieldset").find(".datetimepicker_endDt");
472		endDtObj2 = $(obj).closest("fieldset").find(".datetimepicker_endDtm");
473
474		if (isVaild)
475		{
476			strtDtObj.datetimepicker("setOptions", { maxDate : new Date(today), value : trgtDay });
477			strtDtObj2.datetimepicker("setOptions", { maxDate : new Date(today), defaultTime : "00:00" });
478			endDtObj.datetimepicker("setOptions", {  maxDate : new Date('2050-12-31'), minDate : trgtDay, value : today });
479			endDtObj2.datetimepicker("setOptions", {  maxDate : new Date('2050-12-31'), minDate : trgtDay, defaultTime : "00:00" });
480		}
481		else
482		{
483			if(isStrtFocus == undefined || (isStrtFocus)){
484				strtDtObj.focus();
485			}
486
487			strtDtObj.datetimepicker("setOptions", { value : today, defaultDate: new Date($("body").data("curtDt")) , maxDate : new Date('2050-12-31'), minDate: new Date('1950-01-01') });
488			strtDtObj2.datetimepicker("setOptions", { defaultDate: new Date($("body").data("curtDt")), defaultTime: "00:00" });
489			strtDtObj.datetimepicker("reset").val("");
490			strtDtObj2.datetimepicker("reset").val("");
491
492			endDtObj.datetimepicker("setOptions", { value : today, defaultDate: new Date($("body").data("curtDt")), maxDate : new Date('2050-12-31'), minDate: new Date('1950-01-01')});
493			endDtObj2.datetimepicker("setOptions", { defaultDate: new Date($("body").data("curtDt")), defaultTime: "00:00" });
494			endDtObj.datetimepicker("reset").val("");
495			endDtObj2.datetimepicker("reset").val("");
496
497		}
498
499	};
500
501	/* 달력 초기화 */
502	var fn_init_calendar = function(obj) {
503
504		$(obj).parent().parent().find("input").each(function(index) {
505			if ($.trim($(this).val()) == "") {
506				// max, min date 설정 및 값 초기화
507				$(this).datetimepicker("setOptions", {
508					minDate: new Date('1950-01-01'),
509					maxDate: new Date('2050-12-31')
510				});
511				$(this).datetimepicker("reset").val("");
512			}
513		});
514	}
515
516	/* Init Code */
517	var fn_init_code = function()
518	{
519		$.each(jQuery(".selectbox_code"), function(index, obj){
520			var slctVal = jQuery(obj).data("slctVal");
521
522			if (slctVal)
523			{
524				cmmCtrl.paramAjax(function(data){
525					var rtnList = data.rtnList;
526
527					if (rtnList && rtnList.length > 0)
528					{
529						$.each(rtnList, function(index, data){
530							jQuery(obj).val(data.cd).trigger("change");
531
532							obj = jQuery(obj).next();
533						});
534					}
535				}, "/mngwserc/co/coe/parnt-data.ajax", { cdId : jQuery(obj).data("cdId"), cd : slctVal });
536			}
537		});
538	};
539
540
541	//파일 정보 송신
542	var fn_ajax_file_data = function(callbackAjax, url, formObj, dataType, sync, loading){
543		if (typeof dataType == "undefined") {
544			dataType = "json";
545		}
546		if (typeof sync == "undefined") {
547			sync = true;
548		}
549		if (formObj.data("submitFlag") != "Y")
550		{
551			var frmData = formObj.serializeArray();
552			var fileIndex = 0;
553			formObj.find("input[type=file]").each(function(){
554				if($(this).data("tempSuccessFileData") != undefined)
555				{
556					$.each($(this).data("tempSuccessFileData"), function(idx, data){
557						//alt값  data에 넣어주기.
558						for (let i in data) {
559							if (data.hasOwnProperty(i)) {
560								frmData.push({
561									name: "fileList["+(fileIndex)+"]." + i, value: data[i]
562								});
563							}
564						}
565						fileIndex = fileIndex + 1;
566					})
567				}
568			});
569			fileIndex = 0;
570			jQuery.ajax({
571				headers: {
572					'X-Requested-With': 'XMLHttpRequest',
573					'X-CSRF-TOKEN': $('meta[name=X-CSRF-TOKEN]').attr('content')
574				},
575				url : url,
576				type : "POST",
577				timeout: 30000,
578				data : frmData,
579				dataType : dataType,
580				async: sync,
581				cache : false,
582				beforeSend : function() {
583					formObj.data("submitFlag", "Y");
584					if (loading) {
585						$(".dimd").stop().fadeIn(100);
586					}
587				},
588				success : function(data, status, xhr) {
589					formObj.data("submitFlag", "N");
590					if (callbackAjax) {
591						callbackAjax(data);
592					}
593				},
594				error : function(data, status, xhr) {
595					formObj.data("submitFlag", "N");
596					fn_ajax_error(data, status, xhr);
597				},
598				complete : function() {
599					if (loading) {
600						$(".dimd").stop().fadeOut(100);
601					}
602				}
603			});
604		}
605	}
606
607	/* Ajax File Data */
608	var fn_ajax_file = function(callbackAjax, url, formObj, dataType, loading, sync)
609	{
610		if (typeof dataType == "undefined") {
611			dataType = "json";
612		}
613
614		if (typeof sync == "undefined") {
615			sync = true;
616		}
617
618		if (formObj.data("submitFlag") != "Y")
619		{
620			jQuery.ajax({
621				url : url,
622				type : "post",
623				timeout: 30000,
624				data : new FormData(formObj[0]),
625				dataType : dataType,
626				async: sync,
627				cache : false,
628				contentType: false,
629				processData: false,
630				beforeSend : function() {
631					formObj.data("submitFlag", "Y");
632					if (loading) {
633						$(".dimd").stop().fadeIn(100);
634						jQuery(".loading-area").stop().fadeIn(200);
635					}
636				},
637				success : function(data, status, xhr) {
638					formObj.data("submitFlag", "N");
639
640					if (callbackAjax) {
641						callbackAjax(data);
642					}
643				},
644				error : function(data, status, xhr) {
645					formObj.data("submitFlag", "N");
646
647					fn_ajax_error(data, status, xhr);
648				},
649				complete : function() {
650					if (loading) {
651						$(".dimd").stop().fadeOut(100);
652					}
653				}
654			});
655		}
656	};
657	//FORM태그의 파일 객체 초기화
658	var fn_input_file_init = function(fileObj){
659		var agent = navigator.userAgent.toLowerCase();
660		if ( (navigator.appName == 'Netscape' && navigator.userAgent.search('Trident') != -1) || (agent.indexOf("msie") != -1) )
661		{
662			fileObj.replaceWith(fileObj.clone(true));
663		}
664		else
665		{
666			fileObj.val("");
667		}
668		return fileObj;
669	}
670
671	/* Set Popup */
672	var fn_set_popup = function(pUrl, pName, pSw, pSh)
673	{
674		//스크린의 크기
675		var cw = screen.availWidth;
676		var ch = screen.availHeight;
677		var sw = pSw;
678		var sh = pSh;
679		var ml = (cw - sw) / 2;
680		var mt = (ch - sh) / 2;
681
682		window.open(pUrl, pName, "width="+sw+",height="+sh+",top="+mt+",left="+ml+",location=no,menubar=no,toolbar=no,scrollbars=yes,resizable=no,copyhistory=no");
683	};
684
685	/* Check Maxlength */
686	var fn_check_maxlength = function(obj)
687	{
688		var maxLength = obj.maxLength;
689
690		if (obj.value.length > maxLength)
691		{
692			obj.value = obj.value.slice(0, maxLength);
693		}
694		return obj.value.length;
695	};
696
697	/* Check Continuous String */
698	var check_cont_string =  function(str, limit)
699	{
700		var o, d, p, n = 0, l = limit == null ? 4 : limit;
701
702		for (var i = 0; i < str.length; i++)
703		{
704			var c = str.charCodeAt(i);
705
706			if (i > 0 && (p = o - c) > -2 && p < 2 && (n = p == d ? n + 1 : 0) > l - 3)
707			{
708				return false;
709			}
710
711			d = p, o = c;
712		}
713
714		return true;
715	};
716
717
718	// 자릿수 만큼 0 붙이기
719	var fn_pad = function(num, size){
720		var s = "000000000" + num;
721		return s.substring(s.length-size);
722	}
723
724	// URL 유효성 체크
725	var fn_check_url = function(urlObj) {
726		var url = urlObj.val();
727
728		var startUrl = /^\/[^\/]/;			// / (//는 안 됨)
729		var expUrl = /^http[s]?\:\/\//i;	// http://, https://
730
731		if(startUrl.test(url) || url.startsWith("javascript") || expUrl.test(url)) {
732			return true;
733		} else {
734			alert(msgCtrl.getMsg("fail.notValidUrl"));
735			// urlObj.addClass("error").val("").focus();
736			urlObj.val("").focus();
737			return false;
738		}
739	}
740
741	// Back/forward cache(뒤로/앞으로 가기) 체크
742	window.onpageshow = function(event){
743		history.scrollRestoration = "manual";
744		if (event.persisted)
745		{
746			location.reload();
747		}
748	};
749
750	/* 파라미터 추출 */
751	jQuery.extend({
752		getXssVal : function(targetValue){
753			var returnValue = targetValue;
754
755			if (returnValue)
756			{
757				returnValue = returnValue.replace(/&amp;/g, "&");
758				returnValue = returnValue.replace(/&lt;/g, "<");
759				returnValue = returnValue.replace(/&gt;/g, ">");
760				returnValue = returnValue.replace(/&#34;/g, "\"");
761				returnValue = returnValue.replace(/&#37;/g, "%");
762				returnValue = returnValue.replace(/&#39;/g, "\'");
763			}
764
765			return returnValue;
766		},
767		getURLParam : function(strParamName) {
768			var strHref   = window.location.href;
769			var cmpstring = strParamName + "=";
770			var bFound    = false;
771			var strReturn = "";
772
773			if (strHref.indexOf("?") > -1)
774			{
775				var aQueryString = strHref.substr(strHref.indexOf("?") + 1).split("&");
776
777				for (var iParam = 0, length = aQueryString.length; iParam < length; iParam++)
778				{
779					if (aQueryString[iParam].substr(0, cmpstring.length) == cmpstring)
780					{
781						strReturn = aQueryString[iParam].split("=")[1];
782						bFound = true;
783						break;
784					}
785				}
786			}
787
788			if (bFound == false)
789			{
790				return null;
791			}
792
793			return strReturn;
794		},
795		getURLParams: function(){
796			return location.search
797		}
798	});
799
800	/* clearForm */
801	jQuery.fn.clearForm = function(){
802		return this.each(function(){
803			var type = this.type, tag = this.tagName.toLowerCase();
804
805			if (tag === "form")
806			{
807				return jQuery(":input", this).clearForm();
808			}
809			if (type === "text" || type === "password" || type === "hidden" || tag === "textarea")
810			{
811				this.value = "";
812			}
813			else if (type === "checkbox" || type === "radio")
814			{
815				this.checked = false;
816			}
817			else if (tag === "select")
818			{
819				this.selectedIndex = 0;
820			}
821		});
822	};
823
824	/* form strPam */
825	jQuery.fn.strPam = function(){
826		var formObj = this, tmpObj = { }, strPam = "";
827
828		$.each(formObj.serializeArray(), function(){
829			var $type = formObj.find("[name='" + this.name + "']").prop("type");
830
831			if (tmpObj[this.name])
832			{
833				if ($type == "checkbox")
834				{
835					tmpObj[this.name] = tmpObj[this.name] + "," + "|" + this.value + "|";
836				}
837				else
838				{
839					tmpObj[this.name] = tmpObj[this.name] + "," + this.value;
840				}
841			}
842			else
843			{
844				if ($type == "checkbox")
845				{
846					tmpObj[this.name] = "|" + this.value + "|";
847				}
848				else
849				{
850					tmpObj[this.name] = this.value;
851				}
852			}
853		});
854
855		$.each(Object.keys(tmpObj), function(){
856			if (strPam)
857			{
858				strPam += "&";
859			}
860
861			strPam += this + "=" + tmpObj[this];
862		});
863
864		return strPam;
865	};
866
867	//페이징 처리
868	var fn_paging = function(totCnt, $formObj, listFormId, pagingFormId){
869
870		// 페이징 세팅
871		const pageRowSize	 = parseInt($formObj.find("input[name=listRowSize]").val()); // 한 페이지에 보여지는 데이터의 수
872		const pageButtonSize = parseInt($formObj.find("input[name=pageRowSize]").val()); // 한 번에 보여질 페이지 버튼의 수 (홀수여야만 함)
873		const totalCount = parseInt(totCnt); // 전체 데이터 수
874		const totalPage = parseInt((totalCount-1)/pageRowSize) + 1; // 전체 페이지 수
875
876		let data = {
877			pageRowSize: pageRowSize,
878			pageButtonSize: pageButtonSize,
879
880			totalCount: totalCount,
881			totalPage: totalPage,
882
883			now:0,
884			prev:0,
885			next:0,
886
887			start: 0,
888			end:0,
889		};
890
891		data.now = parseInt( $formObj.find("#pageIndex").val() );
892
893		// this.totalCount = this.$root.totalCount;
894		data.totalPage = Math.ceil(data.totalCount / data.pageRowSize);
895		// 검색결과 없는 경우 totalPage = 1로 설정
896		data.totalPage = data.totalPage == 0 ? 1 : data.totalPage ;
897
898		// data.prev = (data.now  > 1) ? data.now - 1 : null
899		data.prev = (data.now  > 1) ? data.now - 1 : data.now
900		// data.next = (data.totalPage !== data.now && data.totalPage != 0) ? data.now + 1 : null
901		data.next = (data.totalPage !== data.now && data.totalPage != 0) ? data.now + 1 : data.now
902
903		data.start =  (Math.ceil(data.now / data.pageButtonSize) - 1) * data.pageButtonSize + 1;
904		data.end = ((data.start + data.pageButtonSize) > data.totalPage ? data.totalPage : (data.start + data.pageButtonSize - 1))
905		var button='';
906
907		for(var i=data.start; i<=data.end; i++){
908			if(i==data.now){
909				button += '<li aria-disabled="false" class="active" aria-selected="false" ><a href="javascript:" class="pageSet" value="'+ i +'" data-page="'+ i +'">' + i + '</a></li>';
910			}else {
911				button += '<li aria-disabled="false" aria-selected="false" ><a href="javascript:" class="pageSet" value="' + i + '" data-page="'+ i +'">' + i + '</a></li>';
912			}
913		}
914
915		// 페이징 버튼
916		var template = '<div class="text-center">' +
917			'<div class="col-sm-12">' +
918			'<ul class="pagination">' +
919			'<li><a href="javascript: " class="pageSet button" value="1" data-page="1">&lt;&lt;</a></li>'+
920			'<li><a href="javascript:" class="pageSet button" value="' + data.prev + '" data-page="' + data.prev + '">&lt;</a></li>' +
921			button +
922			'<li><a href="javascript:" class="pageSet button" value="' + data.next + '" data-page="' + data.next + '">&gt;</a></li>' +
923			'<li><a href="javascript:" class="pageSet button" value="' + data.totalPage + '" data-page="' + data.totalPage + '">&gt;&gt;</a></li>' +
924			'</ul>' +
925			'</div>' +
926			'</div>';
927
928		// 화면 붙이기
929		$formObj.find("#"+pagingFormId).html(template);
930	}
931
932	//더보기 페이징 처리
933	var fn_more_paging = function(totCnt, $formObj, listFormId, pagingFormId){
934
935		// 페이징 세팅
936		const pageRowSize	 = parseInt($formObj.find("input[name=listRowSize]").val()); // 한 페이지에 보여지는 데이터의 수
937		const pageButtonSize = parseInt($formObj.find("input[name=pageRowSize]").val()); // 한 번에 보여질 페이지 버튼의 수 (홀수여야만 함)
938		const totalCount = parseInt(totCnt); // 전체 데이터 수
939		const trRowCount = $formObj.find("#"+listFormId).find("tr").size();
940		if(totalCount <= trRowCount || totalCount == 0){
941			$formObj.find("#"+pagingFormId).hide();
942		}else{
943			// 페이징 버튼
944			var template = '<span>더보기</span>' +
945				'<span class="item-count">('+trRowCount+'/'+totalCount+')</span>';
946			// 화면 붙이기
947			$formObj.find("#"+pagingFormId).html(template);
948		}
949	}
950
951	//카카오 주소 호출
952	var fn_postData = function(width , height , zipcode ,bscAddr , dtlAddr){
953		new daum.Postcode({
954			width: width, //생성자에 크기 값을 명시적으로 지정해야 합니다.
955			height: height,
956			oncomplete: function(data) {
957				// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
958
959				// 각 주소의 노출 규칙에 따라 주소를 조합한다.
960				// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
961				var addr = ''; // 주소 변수
962				var extraAddr = ''; // 참고항목 변수
963
964				//사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
965				if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
966					addr = data.roadAddress;
967				} else { // 사용자가 지번 주소를 선택했을 경우(J)
968					addr = data.jibunAddress;
969				}
970
971				// 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
972				if(data.userSelectedType === 'R'){
973					// 법정동명이 있을 경우 추가한다. (법정리는 제외)
974					// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
975					if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
976						extraAddr += data.bname;
977					}
978					// 건물명이 있고, 공동주택일 경우 추가한다.
979					if(data.buildingName !== '' && data.apartment === 'Y'){
980						extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
981					}
982					// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
983					if(extraAddr !== ''){
984						extraAddr = ' (' + extraAddr + ')';
985					}
986				}
987
988				// 우편번호와 주소 정보를 해당 필드에 넣는다.
989				$("#"+zipcode).val(data.zonecode);
990				$("#"+bscAddr).val(addr);
991				// 방문교육시 교육장소 받아오기
992				$("#edctnPlaceAddr").val(data.sido + " " + data.sigungu);
993				// 커서를 상세주소 필드로 이동한다.
994				$("#"+dtlAddr).focus();
995
996			}
997		}).open({
998			left: (document.body.offsetWidth / 2) - (200 / 2),
999			top: (window.screen.height / 2) - (300 / 2)
1000		});
1001	}
1002
1003	/**
1004	 * nice 인증 팝업
1005	 * @param params
1006	 * "no" ~ 시작 시 페이지 이동 x
1007	 * "/id-ref-ff" : 페이지 이동
1008	 * &파라미터 추가로 넘기고자하는 데이터 전송 최대 5개 /id-find-res&ex1&ex2 최대 5개
1009	 */
1010
1011	function fn_nice_certification(params) {
1012		jQuery.ajax({
1013			url : "/nice/my-idnttvrfct",
1014			type : "post",
1015			data :
1016				{
1017					"receivedata" : params
1018				},
1019			success : function(data)
1020			{
1021				const {form} = document;
1022
1023				const option = `status=no, menubar=no, toolbar=no, resizable=no, width=500, height=600`;
1024				document.getElementById('enc_data').value = data.enc_data; // enc_data 값을 설정
1025				document.getElementById('integrity_value').value = data.integrity_value; // integrity_value 값을 설정
1026				document.getElementById('token_version_id').value = data.token_version_id; // integrity_value 값을 설정
1027
1028				window.open('', 'nicePopup', option);
1029
1030				form.target = 'nicePopup';
1031				document.getElementById('form').submit();
1032
1033			},
1034			error : function(xhr, ajaxSettings, thrownError)
1035			{
1036				cmmCtrl.errorAjax(xhr);
1037				jQuery.jstree.rollback(data.rlbk);
1038			}
1039		});
1040	}
1041
1042	var fn_email_validation_chk = function (email) {
1043		let splitEmail = email.toString().split("@");
1044		var atRegex = /[^@]+@[^@]+/; //@ 체크
1045		var atDupRegex = /.*@.*@.*/; //@ 2개 이상 체크
1046		var spaceRegex = /\s/; //공백 체크
1047		var commaRegex = /\./;
1048		let multiRegex = /[&=',+<>()]+|(\.{2,})/; //& = , ' + , 포함 경우
1049		let lastRegex = /[0-9!@#$%^&*()_+{}\[\]:;<>,.?\\|`~-]+$/;
1050		return atRegex.test(email) &&
1051			!atDupRegex.test(email) &&
1052			commaRegex.test(splitEmail[1]) &&
1053			!spaceRegex.test(email) &&
1054			!multiRegex.test(email) &&
1055			!lastRegex.test(email) &&
1056			splitEmail[0].length < 64 &&
1057			splitEmail[1].length < 255
1058	}
1059
1060	var fn_set_calendar = function(){
1061
1062		jQuery.datetimepicker.setLocale("ko");
1063
1064		$.each(jQuery(".datetimepicker_input"), function(i, obj){
1065			jQuery(obj).datetimepicker({
1066				timepicker : false,
1067				format : "Y-m-d",
1068				defaultDate : new Date(),
1069				defaultTime : "00:00",
1070				scrollInput : false,
1071				scrollMonth : false,
1072				scrollTime : false,
1073				onSelectDate : function(selectedDate, selectedObj) {
1074					selectedObj.blur();
1075				}
1076			});
1077		});
1078
1079		// 게시기간(일자) Start -----
1080		$.each(jQuery(".datetimepicker_strtDt"), function(i, obj){
1081			jQuery(obj).datetimepicker({
1082				timepicker : false,
1083				format : "Y.m.d",
1084				defaultDate : "",
1085				defaultTime : "00:00",
1086				scrollInput : false,
1087				scrollMonth : false,
1088				scrollTime : false,
1089				todayButton: false,
1090				onSelectDate : function(selectedDate, selectedObj) {
1091					var strtDt   = selectedDate;
1092					var endDtObj = selectedObj.find(".datetimepicker_endDt");
1093					var endDt	 = new Date(endDtObj.val());
1094
1095					if (strtDt.getTime() / (1000 * 3600 * 24) > endDt.getTime() / (1000 * 3600 * 24))
1096					{
1097						endDtObj.val(selectedObj.val());
1098					}
1099
1100					endDtObj.datetimepicker("setOptions", { minDate : strtDt, value : endDtObj.val() });
1101
1102					selectedObj.blur();
1103				}
1104			});
1105		});
1106
1107
1108		$.each(jQuery(".datetimepicker_endDt"), function(i, obj){
1109			jQuery(obj).datetimepicker({
1110				timepicker : false,
1111				format : "Y.m.d",
1112				defaultDate : "",
1113				defaultTime : "00:00",
1114				scrollMonth : false,
1115				scrollTime : false,
1116				todayButton: false,
1117				onSelectDate : function(selectedDate, selectedObj) {
1118					var strtDtObj = selectedObj.find(".datetimepicker_strtDt");
1119					var strtDt    = new Date(strtDtObj.val());
1120					var endDt     = selectedDate;
1121
1122					if (strtDt.getTime() / (1000 * 3600 * 24) > endDt.getTime() / (1000 * 3600 * 24))
1123					{
1124						strtDtObj.val(selectedObj.val());
1125					}
1126
1127					selectedObj.blur();
1128				}
1129			});
1130		});
1131	}
1132
1133	var fn_calendar = function(beforeMonth,afterMonth){
1134		jQuery.datetimepicker.setLocale("ko");
1135
1136		// 게시기간(일자) Start -----
1137		$.each(jQuery(".datetimepicker_strtDt"), function(i, obj){
1138			jQuery(obj).datetimepicker({
1139				timepicker : false,
1140				format : "Y.m.d",
1141				defaultDate : "",
1142				defaultTime : "00:00",
1143				scrollInput : false,
1144				scrollMonth : false,
1145				scrollTime : false,
1146				todayButton: false,
1147			}).on('change',function(e){
1148				var strtDtObj = jQuery(".datetimepicker_strtDt");
1149				var strtDt   = new Date($(this).val());
1150				var endDtObj = jQuery(".datetimepicker_endDt");
1151				var endDt	 = new Date(endDtObj.val());
1152
1153				if((endDt.getTime() > 0) && (strtDt.getTime() / (1000 * 3600 * 24) >= endDt.getTime() / (1000 * 3600 * 24))) {
1154					strtDtObj.datetimepicker("setOptions", { maxDate : endDt });
1155					endDtObj.datetimepicker("setOptions", { minDate : strtDt });
1156					strtDtObj.val(endDtObj.val());
1157				} else {
1158					strtDtObj.datetimepicker("setOptions", { maxDate : endDt });
1159					endDtObj.datetimepicker("setOptions", { minDate : strtDt });
1160				}
1161			});
1162		});
1163
1164
1165		$.each(jQuery(".datetimepicker_endDt"), function(i, obj){
1166			jQuery(obj).datetimepicker({
1167				timepicker : false,
1168				format : "Y.m.d",
1169				defaultDate : "",
1170				defaultTime : "00:00",
1171				scrollInput : false,
1172				scrollMonth : false,
1173				scrollTime : false,
1174				todayButton: false,
1175			}).on('change',function(e){
1176				var strtDtObj = jQuery(".datetimepicker_strtDt");
1177				var strtDt   = new Date(strtDtObj.val());
1178				var endDtObj = jQuery(".datetimepicker_endDt");
1179				var endDt	 = new Date($(this).val());
1180
1181				if((strtDt.getTime() > 0) && (strtDt.getTime() / (1000 * 3600 * 24) >= endDt.getTime() / (1000 * 3600 * 24))) {
1182					strtDtObj.datetimepicker("setOptions", { maxDate : endDt });
1183					endDtObj.datetimepicker("setOptions", { minDate : strtDt });
1184					endDtObj.val(strtDtObj.val());
1185				} else {
1186					strtDtObj.datetimepicker("setOptions", { maxDate : endDt });
1187					endDtObj.datetimepicker("setOptions", { minDate : strtDt });
1188				}
1189			});
1190		});
1191
1192
1193		var date = new Date();
1194		var strtObj = jQuery(".datetimepicker_strtDt");
1195		strtObj.datetimepicker("setOptions", { value : date_format(beforeMonth) });
1196
1197		var endObj = jQuery(".datetimepicker_endDt");
1198		endObj.datetimepicker("setOptions", { value : date_format(afterMonth)});
1199
1200		var strtDt   = new Date(strtObj.val());
1201		var endDt	 = new Date(endObj.val());
1202		strtObj.datetimepicker("setOptions", { maxDate : endDt });
1203		endObj.datetimepicker("setOptions", { minDate : strtDt });
1204	}
1205
1206	var date_format = function(trgtPerid){
1207		var today = new Date();
1208		var year  = today.getFullYear();
1209		var month = today.getMonth() + 1;
1210		var day   = today.getDate();
1211
1212		var tempDay = new Date(year, month - 1, 1);
1213
1214
1215		tempDay.setMonth(tempDay.getMonth() - (trgtPerid - 1));
1216		tempDay.setDate(tempDay.getDate() - 1);
1217
1218		var trgtYear  = tempDay.getFullYear();
1219		var trgtMonth = tempDay.getMonth() + 1;
1220		var trgtDay   = tempDay.getDate();
1221
1222		if (trgtMonth < 10)
1223		{
1224			trgtMonth = "0" + trgtMonth;
1225		}
1226
1227		if (day < trgtDay)
1228		{
1229			trgtDay = day;
1230		}
1231
1232		if (trgtDay < 10)
1233		{
1234			trgtDay = "0" + trgtDay;
1235		}
1236
1237		return trgtDay = trgtYear + "." + trgtMonth  + "." + trgtDay;
1238	}
1239
1240	var search_memory = function(){
1241
1242		cmmCtrl.jsonAjax(function(data){
1243			var rtnData = JSON.parse(data);
1244
1245			var now = rtnData.nowMemory;
1246			var max = rtnData.maxMemory;
1247
1248			console.log(Math.round((now/max)*100, 2)+"%");
1249
1250
1251		}, "/searchMemory", "", "text");
1252
1253	}
1254
1255	var clear_memory = function(){
1256
1257		cmmCtrl.jsonAjax(function(data){
1258
1259			search_memory();
1260
1261		}, "/clearMemory", "", "text");
1262
1263	}
1264
1265
1266	return {
1267		nvl : fn_replace_null,
1268		bscAjax : fn_ajax,
1269		frmAjax : fn_ajax_data,
1270		listFrmAjax : fn_list_ajax_data,
1271		paramAjax : fn_ajax_param_data,
1272		errorAjax : fn_ajax_error,
1273		setPeriod: fn_set_period,
1274		initCode : fn_init_code,
1275		fileFrmAjax: fn_ajax_file_data,
1276		fileFrm: fn_ajax_file,
1277		inputFileInit: fn_input_file_init,
1278		setPopup : fn_set_popup,
1279		checkMaxlength : fn_check_maxlength,
1280		checkContString : check_cont_string,
1281		listPaging : fn_paging,
1282		morePaging : fn_more_paging,
1283		setFormData: fn_list_frm_set_data,
1284		pad: fn_pad,
1285		checkUrl: fn_check_url,
1286		initCalendar: fn_init_calendar,
1287		niceCertification : fn_nice_certification,
1288		searchPostCode : fn_postData,
1289		setCalendar: fn_set_calendar,
1290		setCalendarInit : fn_calendar,
1291
1292		//json형식의 데이터를 문자열로 변환 후 자바 컨트롤러에서 @RequestBody BaseDTO baseDto 로 받는다
1293		jsonAjax : fn_json_ajax_data,
1294
1295		// 이메일_체크
1296		getEmailChk : fn_email_validation_chk,
1297
1298		searchMemory : search_memory,
1299
1300		clearMemory : clear_memory
1301
1302	}
1303}());

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.