PageSourceSearch

https://swmaestro.ai/static/sw/js/util.js?v=1791204170017

js swmaestro.ai collected 2026-10-05 12:43:51 UTC 75,182 bytes, 2,789 lines download raw bytes

1
2Date.prototype.yyyymmdd = function(delimeter) {
3	var yyyy = this.getFullYear().toString();
4	var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
5	var dd = this.getDate().toString();
6
7	return yyyy + isUndefined(delimeter, '') + (mm[1] ? mm : "0" + mm[0])
8			+ isUndefined(delimeter, '') + (dd[1] ? dd : "0" + dd[0]);
9};
10
11Date.prototype.yyyymm = function(delimeter) {
12	var yyyy = this.getFullYear().toString();
13	var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
14
15	return yyyy + isUndefined(delimeter, '') + (mm[1] ? mm : "0" + mm[0]);
16};
17
18Date.prototype.getYYYYMMDDHHMISS = function( delimeter ) {
19	var yyyy = this.getFullYear().toString();
20	var mm = ( this.getMonth() + 1 ).toString(); // getMonth() is zero-based
21	var dd = this.getDate().toString();
22	var hh = this.getHours().toString();
23	var mi = this.getMinutes().toString();
24	var ss = this.getSeconds().toString();
25
26	return yyyy + isUndefined(delimeter, '') + (mm[1] ? mm : "0" + mm[0])
27			+ isUndefined(delimeter, '') + (dd[1] ? dd : "0" + dd[0]) + " " + (hh[1] ? hh : "0" + hh[0]) + ":" + (mi[1] ? mi : "0" + mi[0]) + ":" + (ss[1] ? ss : "0" + ss[0]) ;
28};
29
30/**
31 * ******************************************************************************************************
32 */
33
34/**
35 * HashMap()
36 */
37var HashMap = function() {
38	var mapVal = {}; // private
39	var pos = new Array();
40
41	this.get = function(key) {
42		return mapVal[key];
43	};
44
45	this.getPos = function(n) {
46		return mapVal[pos[n]];
47	};
48
49	this.getKey = function(n) {
50		return pos[n];
51	};
52
53	this.getAllKey = function() {
54		return pos;
55	};
56
57	this.remove = function(n) {
58		var ary = new Array();
59		for (var i = 0; i < pos.length; i++) {
60			if (pos[i] != n) {
61				ary.push(pos[i]);
62			}
63		}
64		pos = ary;
65	};
66
67	this.put = function(key, val) {
68		mapVal[key] = val;
69		var flg = true;
70		for (var i = 0; i < pos.length; i++) {
71			if (key == pos[i])
72				flg = false;
73		}
74		if (flg)
75			pos.push(key);
76	};
77
78	this.size = function() {
79		return pos.length;
80	};
81};
82
83Map = function(){
84	 this.map = new Object();
85	};   
86	Map.prototype = {   
87	    put : function(key, value){   
88	        this.map[key] = value;
89	    },   
90	    get : function(key){   
91	        return this.map[key];
92	    },
93	    containsKey : function(key){    
94	     return key in this.map;
95	    },
96	    containsValue : function(value){    
97	     for(var prop in this.map){
98	      if(this.map[prop] == value) return true;
99	     }
100	     return false;
101	    },
102	    isEmpty : function(key){    
103	     return (this.size() == 0);
104	    },
105	    clear : function(){   
106	     for(var prop in this.map){
107	      delete this.map[prop];
108	     }
109	    },
110	    remove : function(key){    
111	     delete this.map[key];
112	    },
113	    keys : function(){   
114	        var keys = new Array();   
115	        for(var prop in this.map){   
116	            keys.push(prop);
117	        }   
118	        return keys;
119	    },
120	    values : function(){   
121	     var values = new Array();   
122	        for(var prop in this.map){   
123	         values.push(this.map[prop]);
124	        }   
125	        return values;
126	    },
127	    size : function(){
128	      var count = 0;
129	      for (var prop in this.map) {
130	        count++;
131	      }
132	      return count;
133	    }
134	};
135/**
136 * ******************************************************************************************************
137 */
138
139/**
140 * 
141 */
142$.fn.serializeObject = function() {
143	var o = {};
144	var a = this.serializeArray();
145	$.each(a, function() {
146		if (o[this.name]) {
147			if (!o[this.name].push) {
148				o[this.name] = [ o[this.name] ];
149			}
150			o[this.name].push(this.value || '');
151		} else {
152			o[this.name] = this.value || '';
153		}
154	});
155	return o;
156};
157/**
158 * 해당 요소(Element)의 자식 Elements(nodeType이 1)만 배열로 리턴
159 * @param parent
160 * @returns {Array}
161 */
162function fun_getChildElements(parent) {
163	var childs = new Array(), cnt = 0;
164
165	if (parent.childNodes != null) {
166		for (var i = 0; i < parent.childNodes.length; i += 1) {
167			if (parent.childNodes[i].nodeType == 1) {
168				childs[cnt] = parent.childNodes[i];
169				cnt += 1;
170			}
171		}
172	}
173
174	return childs;
175}
176/**
177 * 해당엘리먼트의 자식엘리먼트모두삭제.
178 * @param el 엘리먼트
179 */
180function fun_clearElement(el) {
181	while (el.hasChildNodes()) {
182		el.removeChild(el.firstChild);
183	}
184}
185
186/**
187 * 해당객체가 undefined이면 defstr로 리턴.
188 */
189function isUndefined(obj, defstr) {
190	var result;
191	if (obj == null || typeof obj == "undefined") {
192		result = defstr;
193	} else {
194		result = obj;
195	}
196
197	return result;
198}
199
200function isEmpty(obj, defstr) {
201	var result;
202	if (obj == null || typeof obj == "undefined" || obj == '') {
203		result = defstr;
204	} else {
205		result = obj;
206	}
207
208	return result;
209}
210
211/* function : 숫자처리
212 * param : String strVal
213 */
214function isNumber(strVal) {
215	var v_str = new String(strVal);
216	var j = 0;
217	if (strVal == '')
218		return true;
219
220	for (var i = 0; i < v_str.length; i++) {
221		if ((v_str.substring(i, i + 1) >= '0') && (v_str.substring(i, i + 1) <= '9'))
222			j++;
223	}
224
225	if (j == v_str.length)
226		return true;
227	else
228		return false;
229}
230
231function fun_roundXL(n, digits) {
232	if (digits >= 0) return parseFloat(n.toFixed(digits)); // 소수부 반올림
233
234	digits = Math.pow(10, digits); // 정수부 반올림
235	var t = Math.round(n * digits) / digits;
236	return parseFloat(t.toFixed(0));
237}
238
239/**
240 * hhmmss -> hh?mm?ss 형식으로 변환.
241 * @param strTime
242 * @param strFormat
243 * @returns {String}
244 */
245function fun_getHHMMSS(strTime, strFormat) {
246	var result = '';
247	if (strTime != null && strTime != '') {
248		result += strTime.substring(0, 2);
249		result += isUndefined(strFormat, '');
250		result += strTime.substring(2, 4);
251		result += isUndefined(strFormat, '');
252		result += strTime.substring(4, 6);
253	}
254
255	return result;
256}
257/**
258 * yyyymmdd -> yyyy?mm?dd 형식으로 변환.
259 * @param strTime
260 * @param strFormat
261 * @returns {String}
262 */
263function fun_getYYYYMMDD(strTime, strFormat) {
264	var result = '';
265	if (strTime != null && strTime != '') {
266		result += strTime.substring(0, 4);
267		result += isUndefined(strFormat, '');
268		result += strTime.substring(4, 6);
269		result += isUndefined(strFormat, '');
270		result += strTime.substring(6, 8);
271	}
272
273	return result;
274}
275/**
276 * yyyymm -> yyyy?mm 형식으로 변환.
277 * @param strTime
278 * @param strFormat
279 * @returns {String}
280 */
281function fun_getYYYYMM(strTime, strFormat) {
282	var result = '';
283	if (strTime != null && strTime != '') {
284		result += strTime.substring(0, 4);
285		result += isUndefined(strFormat, '');
286		result += strTime.substring(4, 6);
287	}
288
289	return result;
290}
291
292/**
293 * 날짜 포맷 변경(시간)
294 * @param {} strDate
295 * @param {} strFormat
296 * @return {}
297 */
298function fun_getFormatTime(strDate, strFormat) {
299	var result = '';
300	var delimeter = isUndefined(strFormat, '');
301
302	if (typeof strDate != "string") {
303		var date = new Date(strDate), hours = date.getHours(), minutes = date.getMinutes(), second = date.getSeconds();
304
305		result = fun_chNumerToStr(hours) + delimeter
306				+ fun_chNumerToStr(minutes) + delimeter
307				+ fun_chNumerToStr(second);
308
309	} else {
310		if (strDate == null || strDate == undefined || !strDate.length == 6) {
311			return strDate;
312		}
313
314		strDate = strDate.replace('\:', '');
315
316		// 날짜를 가져온다.
317		result += strDate.substring(0, 2);
318
319		if (strDate.length > 4) {
320			result += delimeter;
321			result += strDate.substring(2, 4);
322
323			if (strDate.length > 6) {
324				result += delimeter;
325				result += strDate.substring(2, 4);
326			}
327		}
328	}
329	return result;
330}
331
332/**
333 * 날짜 포맷 변경
334 * @param {} strDate
335 * @param {} strFormat
336 * @return {}
337 */
338function fun_getFormatDate(strDate, strFormat) {
339	var result = '';
340	var delimeter = isUndefined(strFormat, '');
341
342	if (typeof strDate != "string") {
343		var date = new Date(strDate), year = date.getFullYear(), month 
343= date.getMonth() + 1, day = date.getDate();
344
345		result = fun_chNumerToStr(year) + delimeter + fun_chNumerToStr(month) + delimeter + fun_chNumerToStr(day);
346
347	} else {
348		if (strDate == null || !(strDate.length == 6 || strDate.length == 8 || strDate.length == 14)) {
349			return strDate;
350		}
351
352		// 날짜를 가져온다.
353		result += strDate.substring(0, 4);
354
355		if (strDate.length > 4) {
356			result += delimeter;
357			result += strDate.substring(4, 6);
358
359			if (strDate.length > 6) {
360				result += delimeter;
361				result += strDate.substring(6, 8);
362			}
363		}
364	}
365	return result;
366}
367
368/**
369 * 숫자형 2자리 문자형으로 변경
370 * @param {} val
371 * @return {}
372 */
373function fun_chNumerToStr(val) {
374	val = (val == null) ? 0 : Number(val);
375
376	var result = val;
377	if (val < 10 && val > -1) {
378		result = '0' + val;
379	} else {
380		result = '' + val;
381	}
382
383	return result;
384}
385
386/**
387 * 텍스트 입력시 bytes 자동 설정.
388 * @param text
389 * @param target
390 */
391function fun_length(text, target) {
392	var msgtext = document.getElementById(text);
393	document.getElementById(target).value = fun_getLength(msgtext.value);
394}
395
396/**
397 * 문자를 바이트 크기로 가져오기
398 * @param {} str
399 * @return {}
400 */
401
402function fun_getLength(str) {
403	var length = 0;
404	str = replaceAll(str, '\r', ' ');
405
406	if (str != null && str != '') {
407		length = (str.length + (escape(str) + '%u').match(/%u/g).length - 1);
408	}
409	return length;
410}
411
412function fun_loadScript(url, callback) {
413	var script = document.createElement("script");
414	script.type = "text/javascript";
415
416	if (script.readyState) { // 인터넷 익스플로어
417		script.onreadystatechange = function() {
418			if (script.readyState == "loaded" || script.readySate == "complete") {
419				script.onreadystatechange = null;
420				callback();
421			}
422		}
423	} else {
424		script.onload = function() {
425			callback();
426		}
427	}
428	script.src = url;
429	document.getElementsByTagName("head")[0].appendChild(script);
430}
431
432/*
433 * 셀렉트 박스의 모든 option을 삭제해준다.
434 */
435function selectbox_deletelist(targetid) {
436	var targetObj = document.getElementById(targetid);
437	for (i = targetObj.length; i > 0; i--) {
438		targetObj.remove(i);
439	}
440}
441
442function selectbox_deletealllist(targetid) {
443	var targetObj = document.getElementById(targetid);
444	for (i = targetObj.length; i >= 0; i--) {
445		targetObj.remove(i);
446	}
447}
448
449function selectbox_insert(obj, s_text, s_val, isSel) {
450	obj.options[obj.length] = new Option(s_text, s_val, false, isSel);
451}
452
453function selectbox_insert_sel(obj, s_text, s_val, isSel) {
454	obj.options[obj.length] = new Option(s_text, s_val, false, isSel);
455}
456
457/**
458 * 셀렉트 박스 리스트를 생성해준다. 
459 */
460function selectbox_insertlist(targetid, list, selected, firstCode, firstName, delallyn) {
461	var targetObj = document.getElementById(targetid);
462	var info;
463	// target의 모든 데이터를 삭제해준다.
464	if(delallyn == undefined)
465		selectbox_deletelist(targetid);
466	else 
467		selectbox_deletealllist(targetid);
468
469	if (firstCode != undefined && firstName != undefined && firstName != '')
470		selectbox_insert(targetObj, firstName, firstCode, false);
471
472	// 가져온 데이터를 넣어준다.
473	if (list != null && list.length > 0) {
474		lstIndex = list.length;
475		for (var i = 0; i < list.length; i++) {
476			info = list[i];
477			if (selected != undefined && selected != '' && info["code"] == selected)
478				selectbox_insert(targetObj, info["codenm"], info["code"], true);
479			else
480				selectbox_insert(targetObj, info["codenm"], info["code"], false);
481		}
482	}
483}
484
485/**
486 * 셀렉트 박스 리스트를 생성해준다. 
487 */
488function selectbox_direct_insertlist(targetid, list, selected, firstCode,
489		firstName) {
490	var targetObj = document.getElementById(targetid);
491	var info;
492
493	if (firstCode != undefined && firstName != undefined && firstName != '')
494		selectbox_insert(targetObj, firstName, firstCode, false);
495
496	// 가져온 데이터를 넣어준다.
497	if (list != null && list.length > 0) {
498		lstIndex = list.length;
499		for (var i = 0; i < list.length; i++) {
500			info = list[i];
501			if (selected != undefined && selected != '' && info["code"] == selected)
502				selectbox_insert(targetObj, info["codenm"], info["code"], true);
503			else
504				selectbox_insert(targetObj, info["codenm"], info["code"], false);
505		}
506	}
507}
508
509function selectbox_insertlist_sel(targetid, list, key) {
510
511	var targetObj = document.getElementById(targetid);
512	var info;
513	// target의 모든 데이터를 삭제해준다.
514	selectbox_deletelist(targetid);
515
516	// 가져온 데이터를 넣어준다.
517	if (list != null && list.length > 0) {
518		lstIndex = list.length;
519		for (var i = 0; i < list.length; i++) {
520			info = list[i];
521			if (info["code"] == key)
522				selectbox_insert_sel(targetObj, info["codenm"], info["code"],
523						true);
524			else
525				selectbox_insert_sel(targetObj, info["codenm"], info["code"],
526						false);
527		}
528
529	}
530
531}
532
533getCommonCodeList = function(gubuncode, objid, selected, firstCode, firstName, asyncyn) {
534
535	$.ajax({
536		type : "POST",
537		url : "/code/commonCodeList.do",
538		async : asyncyn != undefined && asyncyn != null
539				&& asyncyn == "N" ? false : true,
540		dataType : 'json',
541		data : {
542			gubun : gubuncode
543		},
544		success : function(data, dataType) {
545			if (data != null && data.list != null) {
546				selectbox_insertlist(objid, data.list, selected,
547						firstCode, firstName);
548			}
549
550		}
551	});
552}
553
554getCodeList = function(purl, pdata, objid, selected, firstCode, firstName, asyncyn, delallyn) {
555
556	$.ajax({
557		type : "POST",
558		url : purl,
559		async : asyncyn != undefined && asyncyn != null
560				&& asyncyn == "N" ? false : true,
561		data : pdata,
562		success : function(data, dataType) {
563			if (data != null && data.list != null) {
564				selectbox_insertlist(objid, data.list, selected, firstCode, firstName, delallyn);
565			}
566		}
567	});
568}
569
570getCodeListStr = function(purl, pdata, selected, firstName) {
571
572	var str = "";
573	$.ajax({
574		type : "POST",
575		url : purl,
576		async : false,
577		data : pdata,
578		success : function(data, dataType) {
579			if(firstName != "" && firstName != "undefined")
580			str += "<option value=''>- "+firstName+" -</option>"
581			if (data != null && data.list != null) {
582				var item = null;
583				for(var i =0; i < data.list.length;i++){
584			         item = data.list[i];
585					str += "<option value='"+item.code +"' "+(item.code==selected?"selected":"")+">"+item.codenm+"</option>"
586				}
587			}			
588		}
589	});
590	return str;
591}
592
593getJqgridCommonCodeList = function(gubuncode, firstCode, firstName) {
594	var map = {};
595	$.ajax({
596		type : "POST",
597		url : "/system/getCommonCodeList.do",
598		async : false,
599		global : false,
600		dataType : 'json',
601		data : {
602			gubunCode : gubuncode
603		},
604		success : function(data, dataType) {
605			if (data != null && data.list != null) {
606				var list = data.list;
607				if (list.length > 0 && firstName != null && firstName != "") {
608					map[firstCode] = firstName;
609				}
610
611				for (var i = 0; i < list.length; i++) {
612					map[list[i].code] = list[i].codeNm;
613				}
614
615				if (list.length > 0)
616					return map;
617				else
618					null;
619			}
620
621		}
622	});
623}
624
625getJqgridCodeList = function(purl, pdata, firstCode, firstName) {
626	var map = {};
627	$.ajax({
628		type : "POST",
629		url : purl,
630		async : false,
631		global : false,
632		data : pdata,
633		success : function(data, dataType) {
634			if (data != null && data.list != null) {
635				var list = data.list;
636				if (list.length > 0 && firstName != null && firstName != "") {
637					map[firstCode] = firstName;
638				}
639
640				for (var i = 0; i < list.length; i++) {
641					map[list[i].code] = list[i].codeNm;
642				}
643
644				if (list.length > 0)
645					return map;
646				else
647					null;
648			}
649		}
650	});
651}
652
653setIdDisp = function(objnm, dispyn) {
654	if (dispyn == 'H')
655		$("[id=" + objnm + "]").hide();
656	else
657		$("[id=" + objnm + "]").show();
658}
659
660setClassDisp = function(objnm, dispyn) {
661	if (dispyn == 'H')
662		$("." + objnm).hide();
663	else
664		$("." + objnm).show();
665}
666
667valueValidator = function(object, j, objid, objnm) {
668	var cms;
669	var columnNames;
670	if (objid != null) {
671		cms = jQuery("#" + objid).jqGrid("getGridParam", "colModel");
672		columnNames = $("#" + objid).jqGrid('getGridParam', 'colNames');
673	} else {
674		cms = jQuery("#list").jqGrid("getGridParam", "colModel");
675		columnNames = $("#list").jqGrid('getGridParam', 'colNames');
676	}
677	var j = j + 1;
678	var val;
679	var edtrul;
680	for ( var key in object) {
681		for (var i = 0; i < cms.length; i++) {
682			if (cms[i].name == key && cms[i].editrules != undefined) {
683				val = object[key];
684				edtrul = cms[i].editrules;
685				if (edtrul.required === true) {
686					if ($.jgrid.isEmpty(val)) {
687						if (objnm != null) {
688							$.jgrid.info_dialog($.jgrid.errors.errcap, objnm
689									+ j + "번째" + columnNames[i]
690									+ "는(은) 필수항목입니다", $.jgrid.edit.bClose, "",
691									j, i, objid);
692						} else {
693							$.jgrid.info_dialog($.jgrid.errors.errcap, j
694									+ "번째 " + columnNames[i] + "는(은) 필수항목입니다",
695									$.jgrid.edit.bClose, "", j, i, objid);
696						}
697						return false;
698					}
699				}
700			}
701		}
702	}
703	return true;
704}
705
706/**
707 * 특정 문자열을 일괄적으로 바꿔준다.
708 * @param str
709 * @param orgStr
710 * @param repStr
711 * @returns
712 */
713function replaceAll(str, orgStr, repStr) {
714	return str.split(orgStr).join(repStr);
715}
716
717/**
718 * 이메일 체크
719 * 
720 * @param email
721 * @return boolean
722 */
723function isEmail(email) {
724	re = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z]+/;
725
726	if (re.test(email)) {
727		return true;
728	}
729
730	return false;
731}
732
733function convertDateType(selector) {
734
735	var date = $("#" + selector).datepicker({
736		dateFormat : "yy-mm-dd"
737	}).val();
738	var o_date = dateToObject(date);
739
740	if (!isValidDate(o_date.toString1("-"))) {
741		alert('유효한 날짜가 아닙니다');
742		$("#" + selector).focus();
743		return false;
744	}
745
746	$("#" + selector).val(o_date.toString1("-"));
747	$("#" + selector + "_month").val(o_date.year);
748	$("#" + selector + "_day").val(o_date.month);
749	$("#" + selector + "_year").val(o_date.day);
750	return true;
751}
752
753/**
754 * 문자열을 date 타입 객체로 변환 한다 
755 * @param p_date
756 * @returns {___anonymous64408_65436}
757 */
758function dateToObject(p_date) {
759	var today = new Date();
760	var cuyear = today.getFullYear();
761	var curmonth = today.getMonth() + 1;
762	if (p_date.length == 4) {
763		p_date = cuyear + "" + p_date;
764	} else if (p_date.length == 2) {
765		p_date = cuyear + "" + curmonth + "" + p_date;
766	}
767	// if p_date is date value of string type
768	var part_str_arr = [ "-", "/", ":", "." ];
769	var v_date = p_date ? trim(p_date) : "";
770	var v_result = {
771		"year" : "",
772		"month" : "",
773		"day" : "",
774		"hour" : "",
775		"minute" : "",
776		"second" : "",
777		"toString1" : function(p_date_div) {
778			var v_result = "";
779			if (trim(this.year) != "")
780				v_result += this.year;
781			if (trim(this.month) != "")
782				v_result += p_date_div + this.month;
783			if (trim(this.day) != "")
784				v_result += p_date_div + this.day;
785			if (trim(this.hour) != "")
786				v_result += " " + this.hour;
787			if (trim(this.minute) != "")
788				v_result += ":" + this.minute;
789			if (trim(this.second) != "")
790				v_result += ":" + this.second;
791			return v_result;
792		},
793		"toString2" : function() {
794			var v_result = "";
795			if (trim(this.year) != "")
796				v_result += "" + this.year;
797			if (trim(this.month) != "")
798				v_result += "" + this.month;
799			if (trim(this.day) != "")
800				v_result += "" + this.day;
801			if (trim(this.hour) != "")
802				v_result += "" + this.hour;
803			if (trim(this.minute) != "")
804				v_result += "" + this.minute;
805			if (trim(this.second) != "")
806				v_result += "" + this.second;
807			return v_result;
808		}
809	};
810
811	if (v_date == "")
812		return v_result;
813
814	for (var i = 0; i < part_str_arr.length; i++) {
815		v_date = replaceAll(v_date, part_str_arr[i], " ");
816	}
817
818	for (var i = 0; i < 10; i++) {
819		if (v_date.indexOf("  ") == -1)
820			break;
821		v_date = replaceAll(v_date, "  ", " ");
822	}
823
824	if (v_date) {
825		if (v_date.indexOf(" ") != -1) {
826			var v_date_arr = v_date.split(" ");
827			v_result.year = v_date_arr[0] ? v_date_arr[0] : "";
828			v_result.month = v_date_arr[1] ? v_date_arr[1] : "";
829			v_result.day = v_date_arr[2] ? v_date_arr[2] : "";
830			v_result.hour = v_date_arr[3] ? v_date_arr[3] : "";
831			v_result.minute = v_date_arr[4] ? v_date_arr[4] : "";
832			v_result.second = v_date_arr[5] ? v_date_arr[5] : "";
833		} else {
834			v_result.year = v_date.length >= 4 ? v_date.substring(0, 4) : "";
835			v_result.month = v_date.length >= 6 ? v_date.substring(4, 6) : "";
836			v_result.day = v_date.length >= 8 ? v_date.substring(6, 8) : "";
837			v_result.hour = v_date.length >= 10 ? v_date.substring(8, 10) : "";
838			v_result.minute = v_date.length >= 12 ? v_date.substring(10, 12)
839					: "";
840			v_result.second = v_date.length >= 14 ? v_date.substring(12, 14)
841					: "";
842		}
843	}
844	return v_result;
845}
846
847/**
848 * trim
849 * 
850 * @param text
851 * @return string
852 */
853function trim(text) {
854	if (text == "") {
855		return text;
856	}
857
858	var len = text.length;
859	var st = 0;
860
861	while ((st < len) && (text.charAt(st) <= ' ')) {
862		st++;
863	}
864
865	while ((st < len) && (text.charAt(len - 1) <= ' ')) {
866		len--;
867	}
868
869	return ((st > 0) || (len < text.length)) ? text.substring(st, len) : text;
870}
871
872function isValidDate(param) {
873	try {
874		if (param == '')
875			return true;
876
877		param = param.replace(/-/g, '');
878		// 자리수가 맞지않을때
879		if (isNaN(param) || param.length != 8) {
880			return false;
881		}
882
883		var year = Number(param.substring(0, 4));
884		var month = Number(param.substring(4, 6));
885		var day = Number(param.substring(6, 8));
886		var dd = day / 0;
887
888		if (month < 1 || month > 12) {
889			return false;
890		}
891
892		var maxDaysInMonth = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
893		var maxDay = maxDaysInMonth[month - 1];
894
895		// 윤년 체크
896		if (month == 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
897			maxDay = 29;
898		}
899
900		if (day <= 0 || day > maxDay) {
901			return false;
902		}
903		return true;
904
905	} catch (err) {
906		return true;
907	}
908}
909
910/*
911 * @param string grid_id 사이즈를 변경할 그리드의 아이디
912 * @param string div_id 그리드의 사이즈의 기준을 제시할 div 의 아이디
913 * @param string width 그리드의 초기화 width 사이즈
914 */
915function resizeJqGridWidth(grid_id, div_id, width) {
916	// window에 resize 이벤트를 바인딩 한다.
917	$(window).bind('resize', function() {
918		// 그리드의 width 초기화
919		$('#' + grid_id).setGridWidth(width, false);
920		// 그리드의 width를 div 에 맞춰서 적용
921		$('#' + grid_id).setGridWidth($('#' + div_id).width(), false); //Resized to new width as per window
922		$(".ui-jqgrid-htable").css("width", $('#' + div_id).width());
923		$(".ui-jqgrid-btable").css("width", $('#' + div_id).width());
924	}).trigger('resize');
925}
926
927Map = function() {
928	this.map = new Object();
929};
930Map.prototype = {
931	put : function(key, value) {
932		this.map[key] = value;
933	},
934	get : function(key) {
935		return this.map[key];
936	},
937	containsKey : function(key) {
938		return key in this.map;
939	},
940	containsValue : function(value) {
941		for ( var prop in this.map) {
942			if (this.map[prop] == value)
943				return true;
944		}
945		return false;
946	},
947	isEmpty : function(key) {
948		return (this.size() == 0);
949	},
950	clear : function() {
951		for ( var prop in this.map) {
952			delete this.map[prop];
953		}
954	},
955	remove : function(key) {
956		delete this.map[key];
957	},
958	keys : function() {
959		var keys = new Array();
960		for ( var prop in this.map) {
961			keys.push(prop);
962		}
963		return keys;
964	},
965	values : function() {
966		var values = new Array();
967		for ( var prop in this.map) {
968			values.push(this.map[prop]);
969		}
970		return values;
971	},
972	size : function() {
973		var count = 0;
974		for ( var prop in this.map) {
975			count++;
976		}
977		return count;
978	}
979};
980
981/* ----------------------------------------------------------------------------
982 * 특정 날짜에 대해 지정한 값만큼 가감(+-)한 날짜를 반환
983
984 * 
985
986 * 입력 파라미터 -----
987 * pInterval : "yyyy" 는 연도 가감, "m" 은 월 가감, "d" 는 일 가감
988 * pAddVal  : 가감 하고자 하는 값 (정수형)
989 * pYyyymmdd : 가감의 기준이 되는 날짜
990 * pDelimiter : pYyyymmdd 값에 사용된 구분자를 설정 (없으면 "" 입력)
991
992 * 
993
994 * 반환값 ----
995
996 * yyyymmdd 또는 함수 입력시 지정된 구분자를 가지는 yyyy?mm?dd 값
997 *
998
999 * 사용예 ---
1000
1001 * 2008-01-01 에 3 일 더하기 ==> addDate("d", 3, "2008-08-01", "-");
1002
1003 * 20080301 에 8 개월 더하기 ==> addDate("m", 8, "20080301", "");
1004 --------------------------------------------------------------------------- */
1005function addDate(pInterval, pAddVal, pYyyymmdd, pDelimiter) {
1006	var yyyy;
1007	var mm;
1008	var dd;
1009	var cDate;
1010	var oDate;
1011	var cYear, cMonth, cDay;
1012
1013	if (pDelimiter != "") {
1014		pYyyymmdd = pYyyymmdd.replace(eval("/\\" + pDelimiter + "/g"), "");
1015	}
1016
1017	yyyy = pYyyymmdd.substr(0, 4);
1018	mm = pYyyymmdd.substr(4, 2);
1019	dd = pYyyymmdd.substr(6, 2);
1020
1021	if (pInterval == "yyyy") {
1022		yyyy = (yyyy * 1) + (pAddVal * 1);
1023	} else if (pInterval == "m") {
1024		mm = (mm * 1) + (pAddVal * 1);
1025	} else if (pInterval == "d") {
1026		dd = (dd * 1) + (pAddVal * 1);
1027	}
1028
1029	cDate = new Date(yyyy, mm - 1, dd) // 12월, 31일을 초과하는 입력값에 대해 자동으로 계산된 날짜가 만들어짐.
1030	cYear = cDate.getFullYear();
1031	cMonth = cDate.getMonth() + 1;
1032	cDay = cDate.getDate();
1033
1034	cMonth = cMonth < 10 ? "0" + cMonth : cMonth;
1035	cDay = cDay < 10 ? "0" + cDay : cDay;
1036
1037	if (pDelimiter != "") {
1038		return cYear + pDelimiter + cMonth + pDelimiter + cDay;
1039	} else {
1040		return cYear + cMonth + cDay;
1041	}
1042
1043}
1044
1045/**
1046 * 현재날짜를 리턴한다.
1047 * 
1048 */
1049function getCurDate() {
1050	var date = new Date();
1051	var year = date.getFullYear();
1052	var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
1053	var day = date.getDate();
1054	var hour = date.getHours();
1055	var min = date.getMinutes();
1056
1057	if (("" + month).length == 1) {
1058		month = "0" + month;
1059	}
1060	if (("" + day).length == 1) {
1061		day = "0" + day;
1062	}
1063	if (("" + hour).length == 1) {
1064		hour = "0" + hour;
1065	}
1066	if (("" + min).length == 1) {
1067		min = "0" + min;
1068	}
1069
1070	return ("" + year + month + day);
1071}
1072
1073	function getAge(yyyymmdd) {
1074	//REQUIRED: yyyymmdd 태어난 생년월일이에요. 예) 19800205
1075	var age; //리턴할 만 나이
1076
1077	var yyyy = parseInt(String(yyyymmdd).substring(0,4),10);
1078	var mmdd = String(yyyymmdd).substring(4,6) + String(yyyymmdd).substring(6,8);
1079
1080	var d = new Date();
1081	var tmonth = d.getMonth() + 1; //getMonth는 0(1월)~11(12월)을 반환합니다.
1082	var tdate = d.getDate();
1083
1084	//자리수를 맞춰주기 위한 처리. 한 자리일 떄 앞에 0을 붙여줍니다.
1085	var today = ((tmonth < 10)? '0' + tmonth : tmonth) + ((tdate < 10)? '0' + tdate : tdate);
1086	age = d.getFullYear() - yyyy + 1;
1087	
1088	//생일이 지났는지 체크하여 계산
1089	if (today < mmdd) {
1090		age = age - 2;
1091	} else {
1092		age = age - 1;
1093	}
1094
1095	return age;
1096};
1097
1098function jsNvl(str) {
1099	var result = "";
1100	if (str == undefined || str == null || str == "null" || str == "NULL") {
1101		result = "";
1102	} else {
1103		result = str;
1104	}
1105
1106	return result;
1107}
1108
1109function jsNvlTrim(str) {
1110	var result = "";
1111	if (str == undefined || str == null || str == "null" || str == "NULL") {
1112		result = "";
1113	} else {
1114		result = trim(str);
1115	}
1116
1117	return result;
1118}
1119
1120
1121function jsNumnvl(str) {
1122	if (str == null || str == "") {
1123		return "0";
1124	}
1125	return str;
1126}
1127/**
1128 * 숫자에 comma를 붙인다.
1129 * 
1130 * @param str
1131 */
1132function addCommaStr(str) {
1133	if (str == "NaN")
1134		return "0";
1135	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
1136	var arrNumber = str.split('.');
1137	arrNumber[0] += '.';
1138	do {
1139		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
1140	} while (rxSplit.test(arrNumber[0]));
1141
1142	if (arrNumber.length > 1) {
1143		replaceStr = arrNumber.join("");
1144	} else {
1145		replaceStr = arrNumber[0].split(".")[0];
1146	}
1147	return replaceStr;
1148}
1149
1150function intcuttig(str1, unit) {
1151	var retuval = "";
1152	var temp = "";
1153
1154	temp = str1 == "" ? "0" : str1;
1155
1156	retuval = parseInt(parseInt(temp) / unit) * unit;
1157
1158	return retuval;
1159}
1160
1161function median(values) {
1162	values.sort(function(a, b) {
1163		return a - b;
1164	});
1165	var half = Math.floor(values.length / 2);
1166	if (values.length % 2) {
1167		return values[half];
1168	} else {
1169		return (values[half - 1] + values[half]) / 2.0;
1170	}
1171}
1172
1173/**
1174 * 콤마찍기
1175 * @param str
1176 * @returns
1177 */
1178function commaNum(str) {
1179	str = String(str);
1180	return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,');
1181}
1182
1183function addCommas(input) {
1184	if (input == undefined)
1185		return "";
1186	else
1187		// If the regex doesn't match, `replace` returns the string unmodified
1188		return (input.toString()).replace(
1189		// Each parentheses group (or 'capture') in this regex becomes an argument 
1190		// to the function; in this case, every argument after 'match'
1191		/^([-+]?)(0?)(\d+)(.?)(\d+)$/g, function(match, sign, zeros, before,
1192				decimal, after) {
1193
1194			// If a digit has 3 digits after it, replace it with itself plus a comma
1195			var insertCommas = function(string) {
1196				return string.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
1197			};
1198
1199			// If there was no decimal, the last capture grabs the final digit, so
1200			// we have to put it back together with the 'before' substring
1201			return sign
1202					+ (decimal ? insertCommas(before) + decimal + after
1203							: insertCommas(before + after));
1204		});
1205}
1206
1207// sortByKey 함수는 자바스크립트에서 제공하는 sort를 이용하여 구현
1208function sortByKey(array, key, order, isnumber) {
1209	return array.sort(function(a, b) {
1210		var x = isnumber ? parseFloat(a[key]) : a[key];
1211		var y = isnumber ? parseFloat(b[key]) : b[key];
1212		if (order == "desc")
1213			return ((x > y) ? -1 : ((x < y) ? 1 : 0));
1214		else
1215			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
1216	});
1217}
1218
1219/*
1220 * gridid : jqgrid 표시 객체 id, colcnt : jqgrid에 보여지는 컬럼갯수(hidden제외) 
1221 */
1222function showJqgridDataNon(data, jqgridid, colcnt) {
1223	if (data.rows.length == 0) {
1224		$("#" + jqgridid + " >tbody").append(
1225				"<tr><td align='center' colspan='" + colcnt
1226						+ "'>
1226검색 결과가 없습니다.</td></tr>");
1227	}
1228}
1229
1230/**
1231 * 도움말 팝업
1232 */
1233function linkHelpManage(programCode) {
1234
1235	if($('#content_rti').length > 0) 
1236		$('#content_rti').append('<div class="modal fade" id="modal-preview"></div>');
1237	else
1238		$('#content').append('<div class="modal fade" id="modal-preview"></div>');
1239	
1240	$.ajax({
1241		type : "POST",
1242		url : "/getPopupHelpManage.do",
1243		data : {
1244			programCode : programCode
1245		},
1246		dataType : 'json',
1247		success : function(data) {
1248			console.log(data);
1249			var helpPageList = data.helpPageList;
1250			if (helpPageList.length > 0) {
1251				var row_id = helpPageList[0].fileId;
1252				$.ajax({
1253					type : "POST",
1254					url : "/getPreviewContents.do",
1255					data : {
1256						row_id : row_id
1257					},
1258					dataType : 'html',
1259					success : function(data) {
1260						$('#modal-preview').html(data);
1261						$('#modal-preview').css("z-index", 9999);
1262						$('.modal-title')[0].innerHTML = '도움말';
1263						$('#modal-preview').modal();
1264					},
1265					error : function(jqXHR, textStatus, errorThrown) {
1266						alert("미리보기를 가져오는데 실패하였습니다.");
1267					}
1268				});
1269			} else {
1270				alert("등록된 도움말파일이 없습니다.");
1271			}
1272		},
1273		error : function(jqXHR, textStatus, errorThrown) {
1274			alert("도움말 미리보기를 가져오는데 실패하였습니다.");
1275		}
1276	});
1277}
1278
1279/**
1280 * 도움말 툴팁
1281 */
1282function helpTooltip(toolTipId, programCode, tooltipCode) {
1283	var selector = $('#' + toolTipId);
1284	$.ajax({
1285		url : "/getHelpControlInfo.do",
1286		type : "POST",
1287		dataType : 'json',
1288		data : {
1289			menuProgramCd : programCode,
1290			componentCd : tooltipCode
1291		},
1292		success : function(data) {
1293			if (data != null) {
1294				var helpControlInfo = data.helpControlInfo;
1295				if (helpControlInfo != null) {
1296					var returnVal = helpControlInfo.tooltipText;
1297					selector.attr({
1298						"title" : returnVal
1299					});
1300				}
1301			} else {
1302				return " ";
1303			}
1304		},
1305		error : function(jqXHR, textStatus, errorThrown) {
1306			alert("툴팁 정보를 가져오는데 실패 하였습니다.");
1307		}
1308	});
1309}
1310
1311
1312/**
1313 * <pre>
1314 * 날짜 비교 함수
1315 * </pre>
1316 * 
1317 * <code>
1318 * type: d, sDateStr: 2015-01-01, eDateStr: 2015-01-30 ==> ê²°ê³¼ : 29<br />
1319 * type: d, sDateStr: 2015-02-01, eDateStr: 2015-01-30 ==> ê²°ê³¼ : -2<br />
1320 * 
1321 * type: m, sDateStr: 2015-01-01, eDateStr: 2015-04-01 ==> ê²°ê³¼ : 3<br />
1322 * type: m, sDateStr: 2015-01-21, eDateStr: 2015-05-01 ==> ê²°ê³¼ : 4<br />
1323 * 
1324 * type: y, sDateStr: 2015-01-01, eDateStr: 2015-01-30 ==> ê²°ê³¼ : 0<br />
1325 * type: y, sDateStr: 2015-02-01, eDateStr: 2017-01-30 ==> ê²°ê³¼ : -2<br />
1326 * </code>
1327 * <br />
1328 * 
1329 * @author P081305
1330 * @param type: 계산 타입, D - 일, M - 월, Y - 년
1331 * @param sDate: 시작 일자
1332 * @param eDate: 종료 일자
1333 * @return Number: 계산 결과, 음수 - 시작 > 종료, 0 - 같음, 양수 - 시작 < 종료
1334 * 
1335 * */
1336var getDifferenceDate = function( type, sDateStr, eDateStr ) {
1337	var sDate = new Date( sDateStr );
1338	var eDate = new Date( eDateStr );
1339	
1340	if ( isEmpty(type, "") !== "" ) {
1341		if ( type.toUpperCase() === "Y" ) { // 년 비교
1342			return parseInt( (( eDate.getFullYear() - sDate.getFullYear() ) * 12 + ( eDate.getMonth() - sDate.getMonth() )) / 12 );
1343		} else if ( type.toUpperCase() === "M" ) { // 월 비교
1344			return ( eDate.getFullYear() - sDate.getFullYear() ) * 12 + ( eDate.getMonth() - sDate.getMonth() );
1345		} else { // 일 비교
1346			return ( eDate.getTime() - sDate.getTime() ) / 1000 / 60 / 60 / 24;
1347		}
1348	}
1349};
1350
1351/**
1352 * <pre>
1353 * JqGrid 내에 Select Box 생성
1354 * Load Complete 시 서버에 공통 코드를 요청 한 후에 설정
1355 * </pre>
1356 * 
1357 * @author P081305
1358 * @param gridID: JQGrid ID
1359 * @param colName: Select Box를 넣을 컬럼명
1360 * @param codeGroup: 설정할 코드 그룹
1361 * @param URL: 공통코드 외에 코드를 가져올 때 사용하는 URL
1362 * */
1363var getCodeListToJqGrid = function( gridID, colName, codeGroup, URL, startText ) {
1364	var thisUrl = URL || "/system/getCommonCodeList.do";
1365	
1366	$.ajax({
1367		url: thisUrl
1368		, type: "POST"
1369		, async: false
1370		, global: false
1371		, dataType: "json"
1372		, data: {
1373			gubunCode: codeGroup
1374		}
1375		, success: function( data ) {
1376			var codeList = data.list;
1377			setCodeListToJqGrid( gridID, colName, codeList, null, null, startText );
1378		}
1379	});
1380}
1381
1382
1383var getListToJqGrid = function( gridID, colName, postdata, URL, startText ) {
1384	//debugger;
1385	var thisUrl = URL;
1386	$.ajax({
1387		url: thisUrl
1388		, type: "POST"
1389		, async: false
1390		, global: false
1391		, dataType: "json"
1392		, data: {
1393			data : postdata
1394		}
1395		, success: function( data ) {
1396			//debugger;
1397			var codeList = data.list;
1398			setCodeListToJqGrid( gridID, colName, codeList, null, null, startText );
1399		}
1400	});
1401}
1402
1403// 특정 로우....그리드 박스...
1404
1405var getListToJqGridRow = function( gridID, colName, postdata, URL, startText ) {
1406	//debugger;
1407	var thisUrl = URL;
1408	$.ajax({
1409		url: thisUrl
1410		, type: "POST"
1411		, async: false
1412		, global: false
1413		, dataType: "json"
1414		, data: {
1415			data : postdata
1416		}
1417		, success: function( data ) {
1418			//debugger;
1419			var codeList = data;
1420			setCodeListToJqGridRow( gridID, colName, codeList, null, null, startText );
1421			
1422		}
1423	});
1424}
1425
1426
1427var setCodeListToJqGridRow = function( gridID, colName, codeList, key, value, startText ) {
1428	//debugger;
1429	var thisCode = key || "code";
1430	var thisCodeNm = value || "codeNm";
1431	var thisStartText = startText || "";
1432
1433	var codeListLen = codeList.length;
1434	var codeStr = ":" + thisStartText + ";";
1435	
1436	for( var idx = 0; idx < codeListLen; idx++ ) {
1437		var code = codeList[ idx ];
1438		codeStr += code[thisCode] + ":" + code[thisCodeNm];
1439		
1440		if( (idx + 1) !== codeListLen ) {
1441			codeStr += ";";
1442		}
1443	}
1444	
1445	convertColList(codeStr);
1446	
1447	/*var setCol = $( "#" + gridID ).getColProp( colName );
1448	setCol.editoptions = {
1449		value: codeStr
1450	}
1451    
1452	$("#jqgrid-filter-field").jqGrid('setCell', rowid, 'dim_list', "<select><option>aaa</option></select>")
1453	
1454	$( "#" + gridID ).setColProp( colName, setCol );*/
1455}
1456
1457/**
1458 * <pre>
1459 * JqGrid 내에 Select Box 생성
1460 * Load Complete 시 Data 내에 설정된 List로 설정
1461 * </pre>
1462 * 
1463 * @author P081305
1464 * @param gridID: JQGrid ID 
1465 * @param colName: Select Box를 넣을 컬럼명
1466 * @param codeList: 설정할 코드 리스트
1467 * @param key: 공통코드 외에 코드를 가져올 때 사용되는 코드 ID값
1468 * @param vaule: 공통코드 외에 코드를 가져올 때 사용되는 코드 Name 값
1469 * */
1470var setCodeListToJqGrid = function( gridID, colName, codeList, key, value, startText ) {
1471	//debugger;
1472	var thisCode = key || "code";
1473	var thisCodeNm = value || "codeNm";
1474	var thisStartText = startText || "";
1475
1476	var codeListLen = codeList.length;
1477	var codeStr = ":" + thisStartText + ";";
1478	
1479	for( var idx = 0; idx < codeListLen; idx++ ) {
1480		var code = codeList[ idx ];
1481		codeStr += code[thisCode] + ":" + code[thisCodeNm];
1482		
1483		if( (idx + 1) !== codeListLen ) {
1484			codeStr += ";";
1485		}
1486	}
1487	
1488	var setCol = $( "#" + gridID ).getColProp( colName );
1489	
1490	if( isEmpty( setCol.editoptions, "" ) != "" ) {
1491		setCol.editoptions["value"] = codeStr;
1492	} else {
1493		setCol.editoptions = {
1494			value: codeStr
1495		}		
1496	}
1497
1498	$( "#" + gridID ).setColProp( colName, setCol );
1499}
1500
1501/**
1502 * <pre>
1503 * Popup 호출 시 사용하는 함수
1504 * </pre>
1505 * 
1506 * @author P081305
1507 * @param URL: 팝업 주소
1508 * @param targetDivID: 대상 DIV
1509 * @param dataObj: parameter 데이터
1510 * */
1511var showTargetPopup = function( URL, targetDivID, dataObj ) {
1512	var targetDiv = $("<div>");
1513	$( targetDiv ).attr( "id", targetDivID );
1514
1515	$("body").append( targetDiv );
1516
1517	$.ajax({
1518		url: URL
1519		, type: "POST"
1520		, target: "#" + targetDivID
1521		, dataType: "html"
1522		, data: dataObj
1523		, success: function( data ) {
1524			$("#" + targetDivID).html( data );
1525
1526			$("#" + targetDivID + " > .modal.fade").on(
1527				"hidden.bs.modal"
1528				, function( evt ) {
1529					var thisDivID = evt.target.id;
1530					var thisParentDivID = thisDivID + "Div";
1531					
1532					if( targetDivID === thisParentDivID ) {
1533						$("#" + targetDivID).remove();	
1534					}
1535				}
1536			);
1537		}
1538	});
1539};
1540
1541/**
1542 * <pre>
1543 * JqGrid Width 값 리사이즈
1544 * </pre>
1545 * 
1546 * @author P081305
1547 * @param targetGridID: 리사이즈 할 대상 JqGrid ID
1548 * @param targetGridParentID: 리사이즈 할 대상 JqGrid를 감싸고 있는 Div 태그의 ID
1549 * */
1550var setResizeJqGridWidth = function( targetGridID, targetGridParentID ) {
1551	$(window).resize(function( evt ) {
1552		var parentDivWidth = $("#" + targetGridParentID).parent().width();
1553		$("#" + targetGridID).setGridWidth( parentDivWidth - 2 );
1554	}).trigger( "resize" );
1555};
1556
1557/**
1558 * <pre>
1559 * JqGrid Cell Save
1560 * </pre>
1561 * 
1562 * @author P081305
1563 * @param targetGridID: Cell 값을 저장할 JqGrid ID
1564 * */
1565var setSaveJqGridCell = function( targetGridID ) {
1566	var targetGrid = $("#" + targetGridID);
1567	var targetGridParameter = targetGrid.getGridParam();
1568	var targetRow = targetGridParameter.iRow || "";
1569	var targetCol = targetGridParameter.iCol || "";
1570
1571	if( targetRow !== "" && targetCol !== "" ) {
1572		targetGrid.saveCell( targetRow, targetCol );
1573	}};
1574
1575/**
1576 * <pre>
1577 * String Replace All Function
1578 * </pre>
1579 * 
1580 * @author P081305
1581 * @param sourceStr: 변환할 대상 문자열
1582 * @param targetStr: 변환할 문자열
1583 * */
1584String.prototype.replaceAll = function( sourceStr, targetStr ){
1585    var temp_str = "";
1586    var temp_trim = this.replace(/(^\s*)|(\s*$)/g, "");
1587
1588    if ( temp_trim && sourceStr != targetStr ) {
1589        temp_str = temp_trim;
1590        while ( temp_str.indexOf( sourceStr ) > -1 ) temp_str = temp_str.replace( sourceStr, targetStr );
1591    }
1592
1593    return temp_str;
1594};
1595
1596/**
1597 * <pre>
1598 * 문자열 길이 체크 함수
1599 * </pre>
1600 * 
1601 * @author P081305
1602 * @param sourceID: 문자 길이를 체크할 Text Area ID
1603 * @param sourceStr: 현재 문자열
1604 * @param maxByte: 최대 Byte
1605 * @param resultLengthID: 입력한 문자열의 길이를 보여줄 Input Box ID
1606 * */
1607var getByteLength = function ( sourceID, sourceStr, maxByte, resultLengthID ) {
1608	var byteLen = 0;
1609	var ch;
1610	var resultStr = "";
1611	
1612	if ( sourceStr === "" ) {
1613		if ( isEmpty( resultLengthID, "" ) != "" ) {
1614			$("#" + resultLengthID).val( 0 );
1615		}
1616	}
1617
1618	for ( var i = 0; i < sourceStr.length; i++ ) {
1619		ch = sourceStr.charCodeAt(i);
1620		len = ch >> 11 ? 3 : ch >> 7 ? 2 : 1;
1621
1622		if ( ( len + byteLen ) > maxByte ) {
1623			$( "#" + sourceID ).val( resultStr );
1624			return false;
1625		} else {
1626			byteLen += len;
1627		}
1628
1629		if ( isEmpty( resultLengthID, "" ) != "" ) {
1630			$("#" + resultLengthID).val( byteLen );
1631		}
1632
1633		resultStr += sourceStr[i];
1634	}
1635};
1636
1637/**
1638 * <pre>
1639 * 문자열 길이 체크 함수
1640 * </pre>
1641 * 
1642 * @author P081305
1643 * @param sourceStr: 길이 체크할 문자열
1644 * @param maxLength: 최대 길이
1645 * @return rstFlag: 길이 체크 결과, 최대 길이보다 짧다면 true, 길면 false
1646 * */
1647var checkByteLength = function ( sourceStr, maxLength ) {
1648	var byteLen = 0;
1649	var ch;
1650	var rstFlag = true;
1651	
1652	if( maxLength < 0 ) {
1653		return rstFlag;
1654	}
1655
1656	for ( var i = 0; i < sourceStr.length; i++ ) {
1657		ch = sourceStr.charCodeAt(i);
1658		len = ch >> 11 ? 3 : ch >> 7 ? 2 : 1;
1659
1660		byteLen += len;
1661		if ( byteLen > maxLength ) {
1662			rstFlag = false;
1663		}
1664	}
1665	
1666	return rstFlag;
1667};
1668
1669/**
1670 * <pre>
1671 * 배열 요소 trim 함수
1672 * 배열 내에 있는 모든 요소들에 대해 공백제거를 하거나,
1673 * 해당 요소가 공백이라면 삭제 처리를 한다.
1674 * </pre>
1675 * 
1676 * @author P081305
1677 * */
1678setArrayDataTrim = function( targetArray ) {
1679	var length = targetArray.length;
1680	for( var idx = length - 1; idx > -1; idx-- ) {
1681		targetArray[ idx ] = targetArray[ idx ].replace( /(^\s*)|(\s*$)/g, "" );
1682		
1683		if( targetArray[ idx ] == "" ) {
1684			targetArray.splice( idx, 1 );
1685		}
1686	}
1687};
1688
1689/**
1690 * <pre>
1691 * 숫자만 입력 가능하게 처리
1692 * </pre>
1693 * 
1694 * @author P081305
1695 * @param evt : Key Up 이벤트
1696 * */
1697var setNumberOnly = function( evt ) {
1698	var thisValue = this.value;
1699	var rexStr = /[^0-9]/gi;
1700	
1701	if( rexStr.test( thisValue ) ) {
1702		$( this ).val( thisValue.replace( rexStr, "" ) );
1703	}
1704};
1705
1706/**
1707 * <pre>
1708 * 영문만 입력 가능하게 처리
1709 * </pre> 
1710 * 
1711 * @author P081305
1712 * @param evt : Key Up 이벤트
1713 * */
1714var setEnglishOnly = function( evt ) {
1715	var thisValue = this.value;
1716	var rexStr = /[^a-z\s]/gi;
1717	
1718	if( rexStr.test( thisValue ) ) {
1719		$( this ).val( thisValue.replace( rexStr, "" ) );
1720	}
1721};
1722
1723/**
1724 * jqgrid 메모리 데이터 정렬을 해준다.
1725 * @param index
1726 * @param iCol
1727 * @param sortOrder
1728 * @param gridId
1729 */
1730function jqgridSortCol(index, iCol, sortOrder, gridId){
1731	//debugger;
1732	$("#"+gridId).setGridParam({ page:  $("#miv_pageNo").val()}); 
1733    var colModels = $("#"+gridId).getGridParam("colModel");
1734    var isnumber = false;
1735    if(colModels[iCol].formatter == "currency" || colModels[iCol].sorttype == "integer" ) isnumber = true;  
1736    
1737    var pageNo = $("#miv_pageNo").val();
1738    var pageSize = $("#miv_pageSize").val();
1739     var startNo = ((pageNo*pageSize)-pageSize)+1; 
1740     // 그리드의 데이터를 가져와서 json sort 해줍니다.
1741     var obj = jQuery("#"+gridId).jqGrid('getRowData');
1742     var slen = obj.length;
1743 	    for(var i = slen ; i>=0 ; i--){								// 선택한 행 수만큼 돌린다	
1744 		   jQuery("#"+gridId).jqGrid('delRowData',i);
1745 	    }
1746
1747   obj = sortByKey(obj, index, sortOrder,isnumber);           
1748 	   for(var i = 0 ; i<slen ; i++){
1749 		  obj[i].rnum = startNo++;
1750 	  	  jQuery("#"+gridId).addRowData(i+1, obj[i]);
1751 	   }
1752}
1753
1754//  jqgird 색상 
1755var editcolor = "#d4eaeb";
1756var editcolorstyle = 'style="background-color:'+editcolor+';"';
1757
1758
1759//모달 열기
1760function openModal(id){
1761	$("#"+id).modal();
1762}
1763//모달 닫기
1764function closeModal(id){
1765	$("#"+id).modal("hide");
1766}
1767
1768function checkTextLength(_this, maxLen) {
1769	var thisVal = $(_this).val();
1770	var li_byte     = 0, li_len      = 0;
1771	debugger;
1772	if(thisVal != undefined){
1773		var curLen = thisVal.length;
1774	    for(i=0; i< curLen; i++)
1775	    {
1776	      li_byte +=utfCharByteSize(thisVal.charAt(i));
1777
1778	       // 전체 크기가 li_max를 넘지않으면
1779	       if(li_byte <= maxLen)
1780	       {
1781	          li_len = i + 1;
1782	       }
1783	       
1784			if(li_byte > maxLen){
1785				var str = $(_this).val().substring(0, li_len);
1786				$(_this).val(str);
1787				return false;
1788			}
1789	    }
1790
1791	}
1792}
1793
1794function utfCharByteSize(ch) {
1795    if (ch == null || ch.length == 0) {
1796        return 0;
1797      }
1798
1799      var charCode = ch.charCodeAt(0);
1800
1801      if (charCode <= 0x00007F) {
1802        return 1;
1803      } else if (charCode <= 0x0007FF) {
1804        return 2;
1805      } else if (charCode <= 0x00FFFF) {
1806        return 3;
1807      } else {
1808         return 3; 
1809      }
1810};
1811
1812Number.prototype.format = function() {
1813	if( this == 0 ) return 0;
1814	
1815	var reg = /(^[+-]?\d+)(\d{3})/gi;
1816	var n = ( this + "" );
1817	
1818	while ( reg.test( n ) )
1819		n = n.replace( reg, "$1" + "," + "$2" );
1820	
1821	return n;
1822};
1823
1824function openPopUp(url, name, width, height)  {
1825	var xPos = (document.body.clientWidth/2)- (width/2);
1826	xPos += window.screenLeft;
1827	var yPos = (screen.availHeight / 2) - (height / 2);
1828	var args = 'scrollbars=no,toolbar=no,location=no,left='+xPos+',top='+yPos+',width='+width+',height='+height;
1829	var oWin = window.open(url, name, args);
1830	return oWin;
1831}
1832
1833function openPosPopUp(url, name, width, height, xPos, yPos)  {
1834	var args = 'scrollbars=no,toolbar=no,location=no,left='+xPos+',top='+yPos+',width='+width+',height='+height;
1835	var oWin = window.open(url, name, args);
1836	return oWin;
1837}
1838
1839function chkPwd(str){
1840	 var reg_pwd = /^.*(?=.{6,20})(?=.*[0-9])(?=.*[a-zA-Z]).*$/;
1841	 if(!reg_pwd.test(str)){
1842	    return false;
1843	 }
1844	 
1845   return true;
1846}
1847
1848function chkNumber(element) {
1849	  var val1 = element.value;
1850	  var num = new Number(val1);
1851	  
1852	  if(isNaN(num)){
1853	   
1854	   alert("숫자만 입력 가능합니다.");
1855	   element.value = '';
1856	  }
1857}
1858
1859//쿠키 가져오기  
1860function getCookie( name ) {  
1861   var nameOfCookie = name + "=";  
1862   var x = 0;  
1863   while ( x <= document.cookie.length )  
1864   {  
1865       var y = (x+nameOfCookie.length);  
1866       if ( document.cookie.substring( x, y ) == nameOfCookie ) {  
1867           if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )  
1868               endOfCookie = document.cookie.length;  
1869           return unescape( document.cookie.substring( y, endOfCookie ) );  
1870       }  
1871       x = document.cookie.indexOf( " ", x ) + 1;  
1872       if ( x == 0 )  
1873           break;  
1874   }  
1875   return "";  
1876}  
1877  
1878// 24시간 기준 쿠키 설정하기  
1879// expiredays 후의 클릭한 시간까지 쿠키 설정  
1880function setCookie( name, value, expiredays ) {   
1881   var todayDate = new Date();   
1882   todayDate.setDate( todayDate.getDate() + expiredays );   
1883   document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";";
1884}  
1885
1886function checkPass(pw){
1887	 var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
1888	 var number = "1234567890";
1889	 var sChar = "-_=+\|()*&^%$#@!~`?></;,.:'";
1890
1891	 var sChar_Count = 0;
1892	 var alphaCheck = false;
1893	 var numberCheck = false;
1894	 
1895	 if(10 <= pw.length || pw.length <= 15){
1896	  for(var i=0; i<pw.length; i++){
1897	   if(sChar.indexOf(pw.charAt(i)) != -1){
1898	    sChar_Count++;
1899	   }
1900	   if(alpha.indexOf(pw.charAt(i)) != -1){
1901	    alphaCheck = true;
1902	   }
1903	   if(number.indexOf(pw.charAt(i)) != -1){
1904	    numberCheck = true;
1905	   }
1906	  }//for
1907
1908	  if(sChar_Count < 1 || alphaCheck != true || numberCheck != true){
1909		   alert("비밀번호는 10~15자의 영문,숫자,특수문자의 조합이어야 합니다.");
1910		   return false;
1911	  }//if
1912	  
1913	 }else{
1914		  alert("비밀번호는 10~15자의 영문,숫자,특수문자의 조합이어야 합니다.");
1915		  return  false;
1916	 }//else
1917	 
1918	 return true;
1919}
1920
1921function onOnlyAlphaNumber(obj) {
1922	var inText = obj;
1923	var deny_char = /^[A-Za-z0-9]+$/;
1924
1925	if (deny_char.test(inText)) {
1926		return false;
1927	}
1928	return true;
1929}
1930
1931
1932//-------------------------------------------------- jqGrid관련 공통 시작
1933
1934/**
1935*윈도우 리사이즈될때 그리드를 부모영역의 너비로 리사이즈되도록 바인딩. 
1936*/
1937function bindWindowJqGridResize(gridId, divId){
1938    $(window).bind('resize', function() {
1939//    	debugger;
1940        // 그리드의 width를 div 에 맞춰서 적용
1941        doJqGridResize(gridId, divId); 
1942     }).trigger('resize');
1943}
1944
1945/**
1946*윈도우 리사이즈될때 그리드를 부모영역의 너비로 리사이즈되도록 바인딩. 
1947*/
1948function bindWindowJqGridResizeWidth(gridId, divId, width){
1949    $(window).bind('resize', function() {
1950    	if($('#' + divId).width() > 100)
1951           doJqGridResize(gridId, divId);
1952    	else{
1953    		width += 56;
1954    		doJqGridResize(gridId, divId, width);
1955    	}	
1956     }).trigger('resize');
1957}
1958
1959/**
1960*윈도우 리사이즈될때 그리드를 창크기 비율로 리사이즈되도록 바인딩. 
1961*/
1962function bindWindowJqGridResizeRate(gridId, percentage){
1963    $(window).bind('resize', function() {
1964        // 그리드의 width를 div 에 맞춰서 적용
1965        doJqGridResizeRate(gridId, percentage); 
1966     }).trigger('resize');
1967}
1968
1969/**
1970*윈도우 리사이즈될때 그리드를 부모영역 비율로 리사이즈되도록 바인딩. 
1971*/
1972function bindWindowJqGridResizeDivRate(gridId, divId, percentage){
1973    $(window).bind('resize', function() {
1974        // 그리드의 width를 div 에 맞춰서 적용
1975        doJqGridResizeDivRate(gridId, divId, percentage); 
1976     }).trigger('resize');
1977}
1978
1979
1980
1981/**
1982*그리드 리사이즈
1983*/
1984function doJqGridResize(gridId, divId , width){
1985//	debugger;
1986	if(width){
1987		 $('#' + gridId).setGridWidth(width, true); 
1988	}else{			
1989		 $('#' + gridId).setGridWidth($('#' + divId).width()-2 , true); 
1990	}
1991        
1992}
1993
1994/**
1995*그리드 리사이즈(창 크기 비율)
1996*/
1997function doJqGridResizeRate(gridId, percentage){
1998	var winWidth = $(window).width();
1999	var width = Math.round((winWidth / 100) * percentage);
2000	$('#' + gridId).setGridWidth(width, true);    
2001}
2002
2003/**
2004*그리드 리사이즈(부모영역 비율)
2005*/
2006function doJqGridResizeDivRate(gridId, divId, percentage){
2007	var winWidth = $('#' + divId).innerWidth();
2008	var width = Math.round((winWidth / 100) * percentage);
2009	$('#' + gridId).setGridWidth(width, true);    
2010}
2011
2012
2013/**
2014*GET 그리드 데이터 JSON String(초기적재데이터 변경사항 적용안됨)
2015*/
2016function getJqGridInitDataJsonString(gridId){	
2017	return JSON.stringify($('#' + gridId).jqGrid('getGridParam', 'data'));       
2018}
2019
2020
2021/**
2022*GET 그리드 데이터 JSON String 
2023*/
2024function getJqGridDataJsonString(gridId){	
2025	return  JSON.stringify($('#' + gridId).jqGrid('getRowData'));       
2026}
2027
2028/**
2029*그리드 Cell에디터 정리.
2030*/
2031function jqGridBeforeEditCell(gridId, rowIdx, colIdx) {
2032	jQuery("#" + gridId).jqGrid('setGridParam',{
2033  		selRowIdx : rowIdx,
2034  		selColIdx : colIdx
2035	});
2036}
2037
2038/**
2039*그리드 Cell에디터 정리.
2040*/
2041function clearJqGridCellEditor(gridId){	
2042	var rowIdx = $('#' + gridId).jqGrid('getGridParam', 'selRowIdx');
2043	var colIdx = $('#' + gridId).jqGrid('getGridParam', 'selColIdx');
2044	var row = jQuery('#'+gridId+' tr:eq('+rowIdx+')');
2045	
2046	if(row && row.length > 0){
2047		if(rowIdx || rowIdx==0){
2048			if(colIdx || colIdx==0){
2049				$('#' + gridId).saveCell(rowIdx,colIdx);
2050			}
2051		}
2052	}
2053}
2054
2055/**
2056*그리드 GET Cell값.//보류..
2057*/
2058function getJqGridCellValue(gridId, rowId, colName) {
2059	
2060    var cell = $('#' + gridId).jqGrid('getCell',rowId,colName);    
2061    var val = cell.val();
2062    return val;
2063}
2064
2065/**
2066* jqGrid블락
2067*/
2068function blockJqGridOnlyGrid(gridId, message) {
2069	$("#lui_" + gridId).css('width',$('#gbox_' + gridId).css('width'));
2070	$("#lui_" + gridId).css('height',$('#gbox_' + gridId).css('height'));
2071	$("#lui_" + gridId).css('top',$('#' + gridId).css('top'));
2072	$("#lui_" + gridId).css('left',$('#' + gridId).css('left'));
2073	$("#lui_" + gridId).css('position','absolute');
2074   	$("#lui_" + gridId).show();
2075   	if(message){
2076   		$("#load_" + gridId).text(message).show();
2077   	}	 
2078}
2079
2080/**
2081* jqGrid 언블락
2082*/
2083function unBlockJqGridOnlyGrid(gridId) {
2084	$("#lui_" + gridId).css('width',$('body').css('width'));
2085	$("#lui_" + gridId).css('height',$('body').css('height'));
2086	$("#lui_" + gridId).css('top',0);
2087	$("#lui_" + gridId).css('left',0);
2088	$("#lui_" + gridId).css('position','');
2089   	$("#lui_" + gridId).hide();
2090	$("#load_" + gridId).hide();   
2091}
2092
2093/**
2094* 그리드내 모든 체크박스 체크
2095*/
2096function checkAllGridCheckbox(gridId){
2097	$('#' + gridId + ' [type=checkbox]:not(:disabled)').prop('checked', true);
2098}
2099
2100/**
2101* 그리드내 모든 체크박스 체크해제
2102*/
2103function unCheckAllGridCheckbox(gridId){
2104	$('#' + gridId + ' [type=checkbox]:not(:disabled)').prop('checked', false);
2105}
2106
2107/**
2108 * 함수설명 : 화면 중앙에 팝업창
2109 * 예제     : nmPopupCenter(url, object,windowWidth, windowHeight, windowFeatures);
2110* @ parameter : sTargetPath : 해당 popup창의 실제 페이지 경로
2111                              object          : popup창으로 넘길 object
2112                              windowWidth     : 창의 넓이
2113                              windowHeight    : 창의 높이
2114                              windowFeatures  : 창의 속성
2115 */
2116openWinC = function (url, windowName, sParam, windowWidth, windowHeight, windowFeatures){
2117	
2118    try {
2119        if( windowFeatures == null || windowFeatures == "" ) {
2120            windowFeatures = "toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no";
2121        }
2122        //windowFeatures="";
2123        //alert(windowFeatures);
2124        
2125        
2126        if(navigator.appVersion.indexOf("Safari") > 0 && navigator.appVersion.indexOf("Chrome") < 0 && navigator.appVersion.indexOf("Version/5.1") > 0) {
2127            windowHeight = parseInt(windowHeight) - 61;
2128        }
2129        
2130        
2131        if(navigator.appVersion.indexOf("Chrome") < 0) {
2132            windowHeight = parseInt(windowHeight) - 61;
2133        }
2134
2135        if(navigator.appVersion.indexOf("Chrome") > 0) {
2136        	windowWidth = parseInt(windowWidth) + 165;
2137        	windowHeight = parseInt(windowHeight) + 20;
2138        }
2139
2140        var xPos = (screen.availWidth  - windowWidth) / 2;
2141        var yPos = (screen.availHeight - windowHeight) / 2;
2142        var feature =  "top=" + yPos + ",left=" + xPos + ",width=" + windowWidth + ",height=" + windowHeight +  "," + windowFeatures;
2143        if(!windowName) {
2144        	//windowName = "_blank";
2145        	windowName = "LOFA_POP";
2146        }
2147        var newUrl = url;
2148        if(sParam) {
2149        	newUrl = newUrl+"?"+sParam;
2150        }
2151        var oWin = window.open( newUrl , windowName, feature );
2152        
2153 		setTimeout(function(){
2154 			oWin.focus();
2155 		}, 1000);
2156 		
2157        return oWin;
2158    } catch(errorObject) {
2159		alert("Opening a pop-up window was blocked. Please allow opening a pop-ups  for this site");
2160    }
2161};
2162
2163//------------------------------------------------------------------------------------------------------------jqgrid 관련 끝
2164
2165function isNull(str){
2166	str = $.trim(str);
2167	if(str == null || str == 'undefined' || str.length == 0) { return true; } return false;
2168}
2169
2170function selectChkAll (tableObjId , selectAllChkId, chkNm) {
2171	if(selectAllChkId == null || selectAllChkId == ''){
2172		selectAllChkId = "chkAll";
2173	}
2174	
2175	if(chkNm == null || chkNm == ''){
2176		chkNm = "chk";
2177	}
2178	
2179	var tableChkObj = $("#"+tableObjId).find($("input[name="+chkNm+"]"));
2180	var chkBool 	= $($("#"+tableObjId).find($("#"+selectAllChkId))).is(":checked");
2181	for(var i=0;i<tableChkObj.length;i++){
2182		if( $(tableChkObj[i]).prop("disabled") ) continue;
2183		$(tableChkObj[i]).prop("checked", chkBool);
2184	}
2185}
2186
2187/**
2188 * unique한 id 생성
2189 * @author	cwcoms
2190 * @since	2016-08-04
2191 */
2192function createUid(){
2193	return "UID" + (new Date()).getTime();
2194}
2195/**
2196 * TABLE 행 추가
2197 * @param tableObjId, row
2198 * @returns void
2199 */
2200function tableAddRow (tableObjId, afterRow, templatTableObjId, clearYn) {
2201
2202	//element에 id추가하기
2203	var _addId = function(newrow){
2204		if(isNull(newrow)){
2205			return;
2206		}
2207		
2208		var uid = createUid();
2209		
2210		newrow.append('<input type="hidden" name="idx" value="'+uid+'"/>');
2211		
2212		var arr = newrow.find("input,select");
2213		if(isNull(arr)){
2214			return;
2215		}
2216		
2217		arr.each(function(index, value){	
2218			var nm = $(value).attr("name");
2219			
2220			if(!isNull(nm)){
2221				$(value).attr("id", nm + "_" + uid);
2222			}
2223		});
2224	};
2225	
2226	var addRow 	= $("#"+tableObjId).find("tbody > tr:eq(0)");
2227	var newrow 	= addRow.clone(); 		// tr복사
2228	
2229	if(!isNull(templatTableObjId) ) {
2230		newrow = $("#"+templatTableObjId).find("tr:eq(0)").clone();
2231	}
2232	
2233	if(afterRow != ""){
2234		newrow.insertAfter($("#"+tableObjId+" tbody > tr:eq("+afterRow+")"));	// id가 인 요소 안의 마지막 class인 요소 선택
2235	}else{
2236		$("#"+tableObjId+" tbody:last").append(newrow);
2237	}
2238	
2239	if(clearYn == false || isNull(clearYn)){
2240		var tempObj = newrow.find('input,select,textarea');
2241		for(var i=0;i<tempObj.size();i++) {
2242			$(tempObj[i]).val("");
2243		}
2244	}
2245	
2246	//element에 id추가하기
2247	_addId(newrow);
2248	
2249	return newrow;
2250}
2251
2252/**
2253 * TABLE 행 삭제
2254 * @param tableObjId, chkNm, minRow
2255 * @returns void
2256 */
2257function tableDeleteRow (tableObjId, chkNm, minRow) {
2258	if(chkNm == null || chkNm == ''){
2259		chkNm = "chk";
2260	}
2261	
2262	var allCnt  	= $("#"+tableObjId).find($("input[name="+chkNm+"]")).size();
2263	var $chkObj  	= $("#"+tableObjId).find($("input[name="+chkNm+"]:checked"));
2264	var chkCount 	= $chkObj.size();
2265
2266	if(chkCount <= 0){
2267		alert("삭제할 데이타를 체크해 주세요.");
2268		$("#"+tableObjId).focus();
2269		return;
2270	}
2271	
2272	if(minRow > 0){
2273		if(minRow == allCnt){
2274			alert("["+minRow+"]개 이상 데이타는 삭제가 불가능 합니다.");
2275			return;
2276		}
2277	}
2278
2279	for(var i=0; i<allCnt-minRow; i++){
2280		if($chkObj.eq(i).is(":checked")){
2281			$chkObj.eq(i).closest("tr").remove();
2282		}
2283	}
2284}
2285
2286function goTwitter(t, u) {
2287	var snsUrl = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(t) + "&url="+encodeURIComponent(u);
2288    window.open(snsUrl, 'twitter', 'width=450px, height=450px');
2289}
2290
2291function goFacebook(u) {
2292    var url = "http://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(u);
2293    window.open(url, 'facebook', 'width=450px, height=450px');
2294}
2295
2296function contentsPrint(div) {
2297	var initBody = document.body.innerHTML;
2298	
2299	var beforePrint = function() {
2300		 document.body.innerHTML = document.getElementById(div).innerHTML;
2301	};
2302	
2303	var afterPrint = function() {
2304		document.body.innerHTML = initBody;
2305	}
2306	
2307	if (window.matchMedia) {
2308        var mediaQueryList = window.matchMedia('print');
2309        mediaQueryList.addListener(function(mql) {
2310            if (mql.matches) {
2311                beforePrint();
2312            } else {
2313                afterPrint();
2314            }
2315        });
2316    }
2317	
2318	window.onbeforeprint = beforePrint;
2319    window.onafterprint = afterPrint;
2320    
2321    window.print();
2322}
2323
2324/*
2325- 특허 : 특허출원, 특허등록, 특허전략, 특허동향, 라이센싱 법률(분쟁자문 등) 상담
2326- 기술 : 기술동향, 기술가치평가, 생산전략, 임상디자
2326인, 인허가 상담
2327- 시장 : 시장분석, 투자유치(금융, VC, 엔젤, 증권), 시장진출(IPO 등), 기술거래일반 상담
2328- 경영 : 경영전략, 세무 및 회계, 인사 및 노무, 마케팅 상담
2329*/
2330var g_cKeyword1 = [ '특허출원', '특허전략', '특허동향', '라이센싱 법률(분쟁자문 등) 상담' ];
2331var g_cKeyword2 = [ '기술동향', '기술가치평가', '생산전략', '임상디자인', '인허가 상담'];
2332var g_cKeyword3 = [ '시장분석', '투자유치(금융, VC, 엔젤, 증권)', '시장진출(IPO 등)', '기술거래일반 상담' ];
2333var g_cKeyword4 = [ '경영전략', '세무 및 회계', '인사 및 노무', '마케팅 상담' ];
2334
2335function getKeyword(dt, setVal, obj){
2336	
2337	var option = "<option value=\"\">- 선택 -</option>";
2338	var arr;
2339	
2340	if(dt == "01"){ 
2341		arr = g_cKeyword1;
2342	}else if(dt == "02"){ 
2343		arr = g_cKeyword2;
2344	}else if(dt == "03"){ 
2345		arr = g_cKeyword3;
2346	}else if(dt == "04"){ 
2347		arr = g_cKeyword4;
2348	}else{
2349		return option;
2350	}
2351	
2352	for ( var i = 0; i < arr.length; i++ ) {
2353		var selected = "";
2354		if(arr[i] == setVal){ 
2355			selected = "selected='selected'";
2356		}
2357		option += "<option value=\""+arr[i]+"\" "+selected+">"+arr[i]+"</option>";
2358	}
2359	
2360	$(obj).html(option);
2361	
2362	return option;
2363}
2364
2365function commonFileDown(down_type, file_path, orignl_file_nm, file_nm){
2366	
2367	var frm = document.commonFileFrm;
2368	
2369	frm.down_type.value 		= down_type;
2370	frm.file_path.value 		= file_path;
2371	frm.orignl_file_nm.value 	= orignl_file_nm;
2372	frm.file_nm.value 			= file_nm;
2373	
2374	frm.method = "post";
2375	frm.action = "/commonfile/fileDownLoad.do";
2376	frm.submit();
2377}
2378
2379
2380
2381$(document).ajaxStart(function() {
2382	// 로딩 바 이미지를 띄우고 
2383    $('#hideloading').show();
2384	//console.log("show" + "|" +this);
2385}).ajaxStop(function() {
2386    // 로딩 바 태그와 이미지를 모두 hide 처리
2387    $('#hideloading').hide();
2388    //console.log("hide"+"|"+this);
2389    $('#hideloadingmessage').html("");
2390}
2391);
2392
2393$.ajaxSetup({
2394    beforeSend: function(xhr) {
2395        xhr.setRequestHeader("AJAX", true);
2396     },
2397     error: function(xhr, status, err) {
2398        if (xhr.status == 401) {
2399            alert("인증에 실패 했습니다. 로그인 페이지로 이동합니다.");
2400            location.href = "/j_spring_security_logout";
2401         } else if (xhr.status == 403) {
2402            alert("세션이 만료가 되었습니다. 로그인 페이지로 이동합니다.");
2403            location.href = "/j_spring_security_logout";
2404         }
2405     }
2406});
2407//페이스북
2408function facebook(){
2409	
2410	var link		 = document.location.href;
2411	var tm_content   = "바이오허브";
2412	window.open("http://www.facebook.com/share.php?v=4&src=bm&u="+link+"&t="+encodeURIComponent(tm_content));
2413}
2414//트위터
2415function twitter(){
2416	
2417	var title 		= "바이오허브";
2418	var short_url 	= document.location.href;
2419	var tm_content  = title + " " +  short_url;
2420	window.open("http://twitter.com/intent/tweet?status="+encodeURIComponent(tm_content));
2421
2422}
2423
2424//카카오특
2425function KakaoStoryLink(){
2426	var subject 	= "";
2427	var explains 	= "";
2428	var image 		= "";
2429	var link 		= document.location.href;
2430
2431	executeKakaoStoryLink(subject,explains,image,link,link,"바이오허브");
2432}
2433
2434//링크드인
2435function linknow(){
2436	var subject = "바이오허브";
2437	var url 	= document.location.href;
2438	var data 	= encodeURIComponent('{"title":"'+subject+'","url":"'+url+'"}');
2439	window.open('http://www.linknow.kr/?go=send_wall&data='+data);
2440}
2441
2442//이메일
2443function emailSend(){
2444	window.open('mailto:[email protected]');
2445}
2446
2447//URL복사
2448function is_ie() {
2449  if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1) return false;
2450  if(navigator.userAgent.toLowerCase().indexOf("msie") != -1) return true;
2451  if(navigator.userAgent.toLowerCase().indexOf("windows nt") != -1) return true;
2452  return false;
2453}
2454
2455function urlCopy(homepage){
2456	
2457    //var link = document.location.href;
2458    var pt   = document.location.protocol;
2459    var host = document.location.host;
2460    var path = document.location.pathname;
2461    var link = pt + "//" + host + path + g_cmm_param;
2462    
2463    
2464    if(link.indexOf("?") != -1){
2465    	link += "&link_g_topmenu_id="+g_topmenu_id+"&link_g_submenu_id="+g_submenu_id+"&link_g_homepage="+homepage;
2466    }else{
2467    	link += "?link_g_topmenu_id="+g_topmenu_id+"&link_g_submenu_id="+g_submenu_id+"&link_g_homepage="+homepage;
2468    }
2469    
2470    //alert(link);
2471
2472    var mungu1 ="";
2473    var mungu2 ="";
2474    if(homepage=="E"){
2475    	mungu1 = "The URL Address of the Bio-hub copied on the clipboard\n\You can choose Ctrl+V or Paste button.";
2476    	mungu2 = "This is the URL address of Bio-hub. Press Ctrl+C to copy to the clipboard";
2477    }else{
2478    	mungu1 = "바이오허브의 URL 주소가 클립보드에 복사되었습니다.\n\Ctrl + V 또는 붙여 넣기를 선택하여 이용하시기 바랍니다.";
2479    	mungu2 = "바이오허브의 URL 주소입니다. Ctrl+C를 눌러 클립보드로 복사하세요";
2480    }
2481  
2482	if( is_ie() ) {
2483		if(window.clipboardData.setData('Text', link)){
2484			alert(mungu1);
2485		}
2486	} else {
2487		temp = prompt(mungu2, link);
2488	}
2489	//self.close();
2490}
2491
2492//PRINT
2493function pagePrint(){
2494	var initBody;
2495    //인쇄하기전 출력되는 내용
2496    window.onbeforeprint = function () {
2497
2498        initBody = document.body.innerHTML;                                                                //기존 내용저장
2499                
2500        document.body.innerHTML = document.getElementById('content').innerHTML;    //프린트할 내용 저장
2501
2502    };
2503
2504    //인쇄가 끝난후 출력되는 내용
2505    window.onafterprint = function () {
2506        document.body.innerHTML = initBody;        //기존 내용표시
2507    };
2508
2509    window.print();
2510
2511}
2512
2513function closePopup(){
2514	window.close();
2515}
2516
2517/***
2518 * 정수인지 체크한다(정수)
2519 * @param objValue 
2520 * @return  true / false
2521 * @exception 
2522 */
2523function numberCheck(obj){
2524	
2525	if(isNull(obj.value)) return; 
2526	
2527	var numChk = /^[0-9]+$/;
2528	var numVal = obj.value;
2529	if(!numChk.test(numVal)){
2530	    var alertMsg  = "숫자만 입력하실 수 있습니다.\t\n";
2531			alertMsg += "입력범위 : 0 ~ 9 \n";
2532			alertMsg += "Example : 1, 2, 300, etc";
2533		alert(alertMsg);
2534		$(obj).val("");
2535	}
2536	return;
2537}	
2538
2539/***
2540 * 입력값이 숫자인지 체크한다(정수와 실수)
2541 * @param objValue 
2542 * @return  true / false
2543 * @exception 
2544 */
2545function numberCheck2(obj){
2546	
2547	if(isNull(obj.value)) return; 
2548	
2549	if(!this.isNum(obj.value)){
2550	    var alertMsg  = "숫자만 입력하실 수 있습니다.\t\t\n\n";
2551    		alertMsg += "입력범위 : 0 ~ 9, .\n";
2552    		alertMsg += "Example : 0.11, 2003, 12345.67890, etc.";
2553    	alert(alertMsg);
2554    	obj.value = "";
2555	}
2556	return;
2557}
2558
2559var qCnt = true;
2560function fnQuick(id)
2561{
2562	if(qCnt)
2563	{
2564		$("#"+id).css("visibility","visible");
2565		qCnt = false;
2566	}
2567	else
2568	{
2569		$("#"+id).css("visibility","hidden");
2570		$("#"+id).css("position","absolute");
2571		$("#"+id).css("index","9999");
2572		$("#"+id).css("width","234px");
2573		$("#"+id).css("right","51px");
2574		$("#"+id).css("top","0px");
2575		qCnt = true;
2576	}
2577}
2578
2579function fnQuick1(id)
2580{
2581	$("#"+id).css("visibility","visible");
2582}
2583
2584function fnQuick2(id)
2585{
2586	if(qCnt%2==1 && qCnt != 0)
2587	{
2588		$("#"+id).css("visibility","hidden");
2589		$("#"+id).css("position","absolute");
2590		$("#"+id).css("index","9999");
2591		$("#"+id).css("width","234px");
2592		$("#"+id).css("right","51px");
2593		$("#"+id).css("top","0px");
2594	}
2595}
2596
2597$(function(){
2598	$(document).ready(function(){
2599		$("input.numberCheck").on("keyup", function(){
2600			numberCheck(this);
2601		});
2602		
2603		$('.expand').on("click",function (){zoomIn();});
2604		$('.reduction').on("click",function (){zoomOut();});
2605					
2606		$('.instargram').parent().css('display','none');
2607		$('.facebook').on("click",function (){toSNS('facebook');});
2608		$('.twitter').on("click",function (){toSNS('twitter');});
2609		$('.band').on("click",function (){toSNS('band');});
2610		$('.kakaotalk').on("click",function (){shareKakaotalk();});
2611		
2612
2613		$('.facebook_board').on("click",function (){toSNS_board('facebook');});
2614		$('.twitter_board').on("click",function (){toSNS_board('twitter');});
2615		$('.band_board').on("click",function (){toSNS_board('band');});
2616		$('.kakaotalk_board').on("click",function (){shareKakaotalk_board();});
2617		
2618		$('.print').on("click",function (){print();});
2619	});
2620});
2621
2622var nowZoom = 100;
2623/*function zoomOut(){
2624	nowZoom = nowZoom - 10;
2625	if(nowZoom <=70) nowZoom=70;
2626	zooms();
2627}
2628
2629function zoomIn(){
2630	nowZoom = nowZoom + 10;
2631	if(nowZoom >=500) nowZoom=500;
2632	zooms();
2633}*/
2634
2635function zooms(){
2636	document.body.style.zoom = nowZoom + '%';	
2637}
2638
2639
2640var fontdefaultsize =  3;
2641function zoomIn() {
2642	//event.preventDefault();
2643	if (fontdefaultsize<5) {
2644		fontdefaultsize+=1;
2645		$(".contentsarea div,.contentsarea span,.contentsarea h3,.contentsarea h4,.contentsarea a").each(function(index, el) {
2646
2647			$(this).css('font-size',"+=2");
2648		});
2649	}
2650}
2651function zoomOut() {
2652	//event.preventDefault();
2653	if (fontdefaultsize>0) {
2654		fontdefaultsize-=1;
2655		$(".contentsarea div,.contentsarea span,.contentsarea h3,.contentsarea h4,.contentsarea a").each(function(index, el) {
2656			$(this).css('font-size',"-=2");
2657		});
2658	}
2659}
2660
2661
2662
2663
2664function toSNS(sns) {
2665	var strURL = document.URL;
2666	var strTitle = document.title;
2667    var snsArray = new Array();
2668    var strMsg = strTitle + " " + strURL;
2669var image = "이미지경로";
2670
2671    snsArray['twitter'] = "http://twitter.com/share?text=" + encodeURIComponent(strTitle) + '&url=' + encodeURIComponent(strURL);
2672    snsArray['facebook'] = "http://www.facebook.com/share.php?u=" + encodeURIComponent(strURL);
2673snsArray['pinterest'] = "http://www.pinterest.com/pin/create/button/?url=" + encodeURIComponent(strURL) + "&media=" + image + "&description=" + encodeURIComponent(strTitle);
2674snsArray['band'] = "http://band.us/plugin/share?body=" + encodeURIComponent(strTitle) + "  " + encodeURIComponent(strURL) + "&route=" + encodeURIComponent(strURL);
2675    snsArray['blog'] = "http://blog.naver.com/openapi/share?url=" + encodeURIComponent(strURL) + "&title=" + encodeURIComponent(strTitle);
2676    snsArray['line'] = "http://line.me/R/msg/text/?" + encodeURIComponent(strTitle) + " " + encodeURIComponent(strURL);
2677snsArray['pholar'] = "http://www.pholar.co/spi/rephol?url=" + encodeURIComponent(strURL) + "&title=" + encodeURIComponent(strTitle);
2678snsArray['google'] = "https://plus.google.com/share?url=" + encodeURIComponent(strURL) + "&t=" + encodeURIComponent(strTitle);
2679snsArray['kakaotalk'] = "https://story.kakao.com/s/share?url=" +encodeURIComponent(strURL);
2680windowOpen(snsArray[sns], 900, 450, 'no');
2681}
2682
2683
2684function toSNS_board(sns) {
2685	var bid = document.writeFrm.board_id.value;
2686	var cid = document.writeFrm.contents_id.value;
2687	var mid = document.writeFrm.board_menu_id.value;
2688
2689	var strURL = 'http://www.ggsportsclub.or.kr/board.do?bid='+bid+'&cid='+cid+'&mid='+mid;
2690	var strTitle = document.writeFrm.sns_title.value;
2691    var snsArray = new Array();
2692    var strMsg = strTitle + " " + strURL;
2693    var image = "이미지경로";
2694
2695    snsArray['twitter'] = "http://twitter.com/share?text=" + encodeURIComponent(strTitle) + '&url=' + encodeURIComponent(strURL);
2696    snsArray['facebook'] = "http://www.facebook.com/share.php?u=" + encodeURIComponent(strURL);
2697snsArray['pinterest'] = "http://www.pinterest.com/pin/create/button/?url=" + encodeURIComponent(strURL) + "&media=" + image + "&description=" + encodeURIComponent(strTitle);
2698snsArray['band'] = "http://band.us/plugin/share?body=" + encodeURIComponent(strTitle) + "  " + encodeURIComponent(strURL) + "&route=" + encodeURIComponent(strURL);
2699    snsArray['blog'] = "http://blog.naver.com/openapi/share?url=" + encodeURIComponent(strURL) + "&title=" + encodeURIComponent(strTitle);
2700    snsArray['line'] = "http://line.me/R/msg/text/?" + encodeURIComponent(strTitle) + " " + encodeURIComponent(strURL);
2701snsArray['pholar'] = "http://www.pholar.co/spi/rephol?url=" + encodeURIComponent(strURL) + "&title=" + encodeURIComponent(strTitle);
2702snsArray['google'] = "https://plus.google.com/share?url=" + encodeURIComponent(strURL) + "&t=" + encodeURIComponent(strTitle);
2703snsArray['kakaotalk'] = "https://story.kakao.com/s/share?url=" +encodeURIComponent(strURL);
2704    //window.open(snsArray[sns]);
2705    windowOpen(snsArray[sns], 900, 450, 'no');
2706}
2707
2708
2709Kakao.init("25142072889438e9bfff1ec44c9a9a26");      // 사용할 앱의 JavaScript 키를 설정
2710function shareKakaotalk() {
2711	var strURL = document.URL;
2712	var strTitle = document.title;
2713	Kakao.Link.sendDefault({
2714		  objectType:"feed"
2715		, content : {
2716			  title:"초등스포츠"   // 콘텐츠의 타이틀
2717			, description:strTitle   // 콘텐츠 상세설명
2718			, imageUrl:"http://www.ggsportsclub.or.kr/images/logo.png"   // 썸네일 이미지
2719			, link : {
2720				  mobileWebUrl:strURL   // 모바일 카카오톡에서 사용하는 웹 링크 URL
2721				, webUrl:strURL // PC버전 카카오톡에서 사용하는 웹 링크 URL
2722			}
2723		}
2724		, buttons : [
2725			{
2726				  title:"게시글 확인"    // 버튼 제목
2727				, link : {
2728					mobileWebUrl:strURL   // 모바일 카카오톡에서 사용하는 웹 링크 URL
2729				  , webUrl:strURL // PC버전 카카오톡에서 사용하는 웹 링크 URL
2730				}
2731			}
2732		]
2733	});
2734}
2735
2736function shareKakaotalk_board() {
2737	//Kakao.init("9d8f8227fb74648f1974df8eef9344ff");      // 사용할 앱의 JavaScript 키를 설정
2738	var bid = document.writeFrm.board_id.value;
2739	var cid = document.writeFrm.contents_id.value;
2740	var mid = document.writeFrm.board_menu_id.value;
2741
2742	var strURL = 'http://www.ggsportsclub.or.kr/board.do?bid='+bid+'&cid='+cid+'&mid='+mid;
2743	var strTitle = document.writeFrm.sns_title.value;
2744	Kakao.Link.sendDefault({
2745		  objectType:"feed"
2746		, content : {
2747			  title:"학교체육진흥회"   // 콘텐츠의 타이틀
2748			, description:strTitle   // 콘텐츠 상세설명
2749			, imageUrl:"http://www.ggsportsclub.or.kr/images/logo.png"   // 썸네일 이미지
2750			, link : {
2751				  mobileWebUrl:strURL   // 모바일 카카오톡에서 사용하는 웹 링크 URL
2752				, webUrl:strURL // PC버전 카카오톡에서 사용하는 웹 링크 URL
2753			}
2754		}
2755		, buttons : [
2756			{
2757				  title:"게시글 확인"    // 버튼 제목
2758				, link : {
2759					mobileWebUrl:strURL   // 모바일 카카오톡에서 사용하는 웹 링크 URL
2760				  , webUrl:strURL // PC버전 카카오톡에서 사용하는 웹 링크 URL
2761				}
2762			}
2763		]
2764	});
2765}
2766
2767
2768
2769
2770function windowOpen () {
2771	var nUrl;
2772	var nWidth;
2773	var nHeight;
2774	var nLeft;
2775	var nTop;
2776	var nScroll;
2777	
2778	nUrl = arguments[0];
2779	nWidth = arguments[1];
2780	nHeight = arguments[2];
2781	nScroll = (arguments.length > 3 ? arguments[3] : "no");
2782	nLeft = (arguments.length > 4 ? arguments[4] : (screen.width/2 - nWidth/2));
2783	nTop = (arguments.length > 5 ? arguments[5] : (screen.height/2 - nHeight/2));
2784	
2785	winopen=window.open(nUrl, 'sns_win', "left="+nLeft+",top="+nTop+",width="+nWidth+",height="+nHeight+",scrollbars="+nScroll+",toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no");
2786}
2787
2788
2789

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.