PageSourceSearch

https://air-int.zzimcar.com/air/wfw/js/lib/jquery.com.util.js

js zzimcar.com collected 2026-10-05 07:05:02 UTC 90,790 bytes, 2,529 lines download raw bytes

1(function($) {
2	var methods = {
3		/*----------------------------------------------------------------------------------*
4		 * Function : $(input).cursor('getSelection');
5		 * Desc : text필드에서 커서의 위치를 구함.
6		 * Parameter :
7		 * Return : 커서의 시작위치, 끝 위치
8		 * ----------------------------------------------------------------------------------*/
9		getSelection : function() {
10			return {
11				start : $(this).cursor('getSelectionStart'),
12				end : $(this).cursor('getSelectionEnd')
13			};
14		},
15
16		getSelectionStart : function() {
17			if (this.length == 0) {
18				return -1;
19			}
20			input = this[0];
21
22			var pos = input.value.length;
23
24			if (input.createTextRange) {
25				var r = document.selection.createRange().duplicate();
26				r.moveEnd('character', input.value.length);
27				if (r.text == '') {
28					pos = input.value.length;
29				}
30				pos = input.value.lastIndexOf(r.text);
31			} else if (typeof (input.selectionStart) != "undefined") {
32				pos = input.selectionStart;
33			}
34
35			return pos;
36		},
37
38		getSelectionEnd : function() {
39			if (this.length == 0) {
40				return -1;
41			}
42			input = this[0];
43
44			var pos = input.value.length;
45
46			if (input.createTextRange) {
47				var r = document.selection.createRange().duplicate();
48				r.moveStart('character', -input.value.length);
49
50				if (r.text == '') {
51					pos = input.value.length;
52				}
53				pos = r.text.length;
54			} else if (typeof (input.selectionEnd) != "undefined") {
55				pos = input.selectionEnd;
56			}
57
58			return pos;
59		},
60
61		/*----------------------------------------------------------------------------------*
62		 * Function : $(input).cursor('setSelection', selectionStart, selectionEnd);
63		 * Desc : text필드에서 커서의 위치를 지정함.
64		 * Parameter : selectionStart(커서의 시작위치)
65		 * 			   selectionEnd(커서의 끝 위치)
66		 * Return :
67		 * ----------------------------------------------------------------------------------*/
68		setSelection : function(selectionStart, selectionEnd) {
69			if (this.length == 0) {
70				return this;
71			}
72			input = this[0];
73
74			if (input.createTextRange) {
75				var range = input.createTextRange();
76				range.collapse(true);
77				range.moveEnd('character', selectionEnd);
78				range.moveStart('character', selectionStart);
79				range.select();
80			} else if (input.setSelectionRange) {
81				input.focus();
82				input.setSelectionRange(selectionStart, selectionEnd);
83			}
84		},
85
86		/*----------------------------------------------------------------------------------*
87		 * Function : $(input).formatter('onlynumber');
88		 * Desc : text필드의 입력포맷을 숫자형으로 세팅함.
89		 * Parameter :
90		 * Return :
91		 * ----------------------------------------------------------------------------------*/
92		onlynumber : function() {
93
94			$(this).css('text-align', 'center');
95			$(this).bind('keydown', function(event) {
96
97				if (event.preventDefault) {
98					event.preventDefault();
99				} else {
100					event.returnValue = false;
101				}
102				var p = $(this).cursor('getSelection');
103				var pos = p.start;
104				var tmpvalue = $(this).val();
105
106				if (event.keyCode >= 96 && event.keyCode <= 105) {
107					event.keyCode = event.keyCode - 48;
108				}
109				if (p.start != p.end) {
110					tmpvalue = tmpvalue.substring(0, p.start) + tmpvalue.substring(p.end);
111				}
112				if (event.keyCode != 8 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 39) {
113					var pattern = /[0-9]/;
114					if (pattern.test(String.fromCharCode(event.keyCode))) {
115						tmpvalue = tmpvalue.substring(0, pos) + String.fromCharCode(event.keyCode) + tmpvalue.substring(pos);
116						$(this).val(tmpvalue);
117						$(this).cursor('setSelection', pos + 1, pos + 1);
118					}
119				} else if (event.keyCode == 8) { // 백스페이스
120					if (p.start == p.end) {
121						tmpvalue = tmpvalue.substring(0, pos - 1) + tmpvalue.substring(pos);
122						$(this).val(tmpvalue);
123						$(this).cursor('setSelection', pos - 1, pos - 1);
124					} else {
125						$(this).val(tmpvalue);
126						$(this).cursor('setSelection', pos, pos);
127					}
128				} else if (event.keyCode == 46) { // 딜리트
129					if (p.start == p.end) {
130						tmpvalue = tmpvalue.substring(0, pos) + tmpvalue.substring(pos + 1);
131					}
132					$(this).val(tmpvalue);
133					$(this).cursor('setSelection', pos, pos);
134				} else if (event.keyCode == 37) { // 좌로
135					if (p.start > 0) {
136						$(this).cursor('setSelection', p.start - 1, p.start - 1);
137					}
138				} else if (event.keyCode == 39) { // 우로
139					if (p.start < tmpvalue.length) {
140						$(this).cursor('setSelection', p.start + 1, p.start + 1);
141					}
142				}
143			});
144		},
145
146		/*----------------------------------------------------------------------------------*
147		 * Function : $(input).formatter('onlynumber2');
148		 * Desc : text필드의 입력포맷을 숫자형으로 세팅함.
149		 * Parameter :
150		 * Return :
151		 * ----------------------------------------------------------------------------------*/
152		onlynumber2 : function() {
153			$(this).bind(
154					'blur keyup',
155					function(e) {
156						var keyPressed;
157						if (!e) {
158							var e = window.event;
159						}
160						if (e.keyCode || e.charCode) {
161							keyPressed = e.keyCode ? e.keyCode : e.charCode;
162						} else if (e.which) {
163							keyPressed = e.which;
164						}
165
166						var hasDecimalPoint = (($(this).val().split('.').length - 1) > 0);
167						if (keyPressed == 46 || keyPressed == 8 || ((keyPressed == 190 || keyPressed == 110) && (!hasDecimalPoint))
168								|| keyPressed == 9 || keyPressed == 27 || keyPressed == 13 ||
169								// Allow: Ctrl+A
170								(keyPressed == 65 && e.ctrlKey === true) ||
171								// Allow: home, end, left, right
172								(keyPressed >= 35 && keyPressed <= 39)) {
173							// let it happen, don't do anything
174							return;
175						} else {
176							// Ensure that it is a number and stop the keypress
177							if (e.shiftKey || (keyPressed < 48 || keyPressed > 57) && (keyPressed < 96 || keyPressed > 105)) {
178								e.preventDefault();
179							}
180						}
181
182						if (/\D/g.test(this.value)) {
183
184							// Filter non-digits from input value.
185							this.value = this.value.replace(/\D/g, '');
186						}
187
188					});
189		},
190
191		/*----------------------------------------------------------------------------------*
192		 * Function : $(input).formatter('number');
193		 * Desc : text필드의 입력포맷을 숫자형으로 세팅함. 입력값의 세자리마다 콤마를 찍어줌.
194		 * Parameter :
195		 * Return :
196		 * ----------------------------------------------------------------------------------*/
197		number : function() {
198			$(this).css('text-align', 'right');
199			$(this).bind('keydown', function(event) {
200				if (event.preventDefault) {
201					event.preventDefault();
202				} else {
203					event.returnValue = false;
204				}
205				var p = $(this).cursor('getSelection');
206				var pos = p.start;
207				var reg = /(^[+-]?\d+)(\d{3})/;
208				var tmpvalue = $(this).val();
209				// if (p.start != p.end) {
210				// console.log(p);
211				// tmpvalue = tmpvalue.substring(0, p.start) + tmpvalue.substring(0, p.end);
212				// }
213
214				if (event.keyCode >= 96 && event.keyCode <= 105) {
215					event.keyCode = event.keyCode - 48;
216				}
217				if (event.keyCode != 8 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 39) {
218					var pattern = /[0-9]/;
219					if (pattern.test(String.fromCharCode(event.keyCode))) {
220						var length = tmpvalue.substring(pos).length;
221
222						tmpvalue = tmpvalue.substring(0, pos) + String.fromCharCode(event.keyCode) + tmpvalue.substring(pos);
223						tmpvalue = tmpvalue.replace(/,/g, '');
224						while (reg.test(tmpvalue)) {
225							tmpvalue = tmpvalue.replace(reg, '$1' + ',' + '$2');
226						}
227						$(this).val(tmpvalue);
228
229						if (length == 0) { // 커서 뒤 쪽으로 문자열이 없으면
230							$(this).cursor('setSelection', tmpvalue.length + 1, tmpvalue.length + 1);
231						} else {
232							$(this).cursor('setSelection', tmpvalue.length - length, tmpvalue.length - length);
233						}
234					}
235				} else if (event.keyCode == 8) { // 백스페이스
236					var length = tmpvalue.substring(pos).length;
237
238					var char = tmpvalue.substring(pos - 1, pos);
239					if (char == ',') {
240						tmpvalue = tmpvalue.substring(0, pos - 2) + tmpvalue.substring(pos);
241					} else {
242						tmpvalue = tmpvalue.substring(0, pos - 1) + tmpvalue.substring(pos);
243					}
244
245					tmpvalue = tmpvalue.replace(/,/g, '');
246					while (reg.test(tmpvalue)) {
247						tmpvalue = tmpvalue.replace(reg, '$1' + ',' + '$2');
248					}
249					$(this).val(tmpvalue);
250
251					if (length == 0) { // 커서 뒤 쪽으로 문자열이 없으면
252						$(this).cursor('setSelection', tmpvalue.length + 1, tmpvalue.length + 1);
253					} else {
254						$(this).cursor('setSelection', tmpvalue.length - length, tmpvalue.length - length);
255					}
256				} else if (event.keyCode == 46) { // 딜리트
257					var length = tmpvalue.substring(pos).length;
258					var char = tmpvalue.substring(pos, pos + 1);
259					if (char == ',') {
260						tmpvalue = tmpvalue.substring(0, pos) + tmpvalue.substring(pos + 2);
261					} else {
262						tmpvalue = tmpvalue.substring(0, pos) + tmpvalue.substring(pos + 1);
263					}
264
265					tmpvalue = tmpvalue.replace(/,/g, '');
266					while (reg.test(tmpvalue)) {
267						tmpvalue = tmpvalue.replace(reg, '$1' + ',' + '$2');
268					}
269					$(this).val(tmpvalue);
270
271					if (char == ',') { // 커서 뒤쪽에 오는 문자가 콤마이면
272						$(this).cursor('setSelection', tmpvalue.length - length + 2, tmpvalue.length - length + 2);
273					} else {
274						$(this).cursor('setSelection', tmpvalue.length - length + 1, tmpvalue.length - length + 1);
275					}
276				} else if (event.keyCode == 37) { // 좌로
277					if (p.start > 0) {
278						$(this).cursor('setSelection', p.start - 1, p.start - 1);
279					}
280				} else if (event.keyCode == 39) { // 우로
281					if (p.start < tmpvalue.length) {
282						$(this).cursor('setSelection', p.start + 1, p.start + 1);
283					}
284				}
285			});
286		},
287
288		/*----------------------------------------------------------------------------------*
289		 * Function : $(input).formatter('date');
290		 * Desc : text필드의 입력포맷을 날짜형으로 세팅함.
291		 * Parameter :
292		 * Return :
293		 * ----------------------------------------------------------------------------------*/
294		date : function() {
295			$(this).attr('maxlength', 10);
296			$(this).css('text-align', 'center');
297			$(this).val('____-__-__');
298			$(this).bind('keydown', function(event) {
299				if (event.preventDefault) {
300					event.preventDefault();
301				} else {
302					event.returnValue = false;
303				}
304				var p = $(this).cursor('getSelection');
305				var pos = p.start;
306
307				if (event.keyCode >= 96 && event.keyCode <= 105) {
308					event.keyCode = event.keyCode - 48;
309				}
310				if (event.keyCode != 8 && event.keyCode != 9 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 39) {
311					var pattern = /[0-9]/;
312					if (pattern.test(String.fromCharCode(event.keyCode))) {
313						if (pos == 4 || pos == 7) {
314							pos++;
315						}
316						if (pos < 10) {
317							this.value = this.value.substring(0, pos) + String.fromCharCode(event.keyCode) + this.value.substring(pos + 1);
318							$(this).cursor('setSelection', pos + 1, pos + 1);
319						}
320					}
321				} else if (event.keyCode == 8) { // 백스페이스
322					if (pos > 0) {
323						if (pos == 5 || pos == 8) {
324							this.value = this.value.substring(0, pos - 1) + '-' + this.value.substring(pos);
325							$(this).cursor('setSelection', pos - 1, pos - 1);
326						} else {
327							this.value = this.value.substring(0, pos - 1) + '_' + this.value.substring(pos);
328							$(this).cursor('setSelection', pos - 1, pos - 1);
329						}
330					}
331				} else if (event.keyCode == 9) { // 탭키
332					var thisElement = document.activeElement;
333					var thisForm = this.form;
334					for ( var i = 0; i < thisForm.length; i++) {
335						if (thisForm.elements[i] == thisElement) {
336							var next = thisForm.elements[i + 1];
337							next.focus();
338							break;
339						}
340					}
341				} else if (event.keyCode == 46) { // 딜리트
342					var tmpvalue = '';
343
344					if (pos == 4 || pos == 7) {
345						tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 2);
346					} else {
347						tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 1);
348					}
349
350					tmpvalue = tmpvalue.replace(/-/g, '');
351					tmpvalue = tmpvalue.replace(/_/g, '');
352					tmpvalue = $.util.rpad(tmpvalue, 8, '_');
353
354					this.value = tmpvalue.substring(0, 4) + '-' + tmpvalue.substring(4, 6) + '-' + tmpvalue.substring(6);
355					$(this).cursor('setSelection', pos, pos);
356				} else if (event.keyCode == 37) { // 좌로
357					if (p.start > 0) {
358						$(this).cursor('setSelection', p.start - 1, p.start - 1);
359					}
360				} else if (event.keyCode == 39) { // 우로
361					if (p.start < 10) {
362						$(this).cursor('setSelection', p.start + 1, p.start + 1);
363					}
364				}
365			});
366		},
367
368		/*----------------------------------------------------------------------------------*
369		 * Function : $(input).formatter('time');
370		 * Desc : text필드의 입력포맷을 시간형으로 세팅함.
371		 * Parameter :
372		 * Return :
373		 * ----------------------------------------------------------------------------------*/
374		time : function() {
375			$(this).attr('maxlength', 5);
376			$(this).css('text-align', 'center');
377			$(this).val('__:__');
378			$(this).bind('keydown', function(event) {
379				if (event.preventDefault) {
380					event.preventDefault();
381				} else {
382					event.returnValue = false;
383				}
384				var p = $(this).cursor('getSelection');
385				var pos = p.start;
386
387				if (event.keyCode >= 96 && event.keyCode <= 105) {
388					event.keyCode = event.keyCode - 48;
389				}
390				if (event.keyCode != 8 && event.keyCode != 9 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 39) {
391					var pattern = /[0-9]/;
392					if (pattern.test(String.fromCharCode(event.keyCode))) {
393						if (pos == 2 || pos == 5) {
394							pos++;
395						}
396						if (pos < 5) {
397							this.value = this.value.substring(0, pos) + String.fromCharCode(event.keyCode) + this.value.substring(pos + 1);
398							$(this).cursor('setSelection', pos + 1, pos + 1);
399						}
400					}
401				} else if (event.keyCode == 8) { // 백스페이스
402					if (pos > 0) {
403						if (pos == 3 || pos == 6) {
404							this.value = this.value.substring(0, pos - 1) + ':' + this.value.substring(pos);
405							$(this).cursor('setSelection', pos - 1, pos - 1);
406						} else {
407							this.value = this.value.substring(0, pos - 1) + '_' + this.value.substring(pos);
408							$(this).cursor('setSelection', pos - 1, pos - 1);
409						}
410					}
411				} else if (event.keyCode == 9) { // 탭키
412					var thisElement = document.activeElement;
413					var thisForm = this.form;
414					for ( var i = 0; i < thisForm.length; i++) {
415						if (thisForm.elements[i] == thisElement) {
416							var next = thisForm.elements[i + 1];
417							next.focus();
418							break;
419						}
420					}
421				} else if (event.keyCode == 46) { // 딜리트
422					var tmpvalue = '';
423
424					if (pos == 2 || pos == 5) {
425						tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 2);
426					} else {
427						tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 1);
428					}
429
430					tmpvalue = tmpvalue.replace(/:/g, '');
431					tmpvalue = tmpvalue.replace(/_/g, '');
432					tmpvalue = $.util.rpad(tmpvalue, 4, '_');
433
434					this.value = tmpvalue.substring(0, 2) + ':' + tmpvalue.substring(2, 4);// + ':' + tmpvalue.substring(4);
435					$(this).cursor('setSelection', pos, pos);
436				} else if (event.keyCode == 37) { // 좌로
437					if (p.start > 0) {
438						$(this).cursor('setSelection', p.start - 1, p.start - 1);
439					}
440				} else if (event.keyCode == 39) { // 우로
441					if (p.start < 5) {
442						$(this).cursor('setSelection', p.start + 1, p.start + 1);
443					}
444				}
445			});
446		},
447
448		/*----------------------------------------------------------------------------------*
449		 * Function : $(input).formatter('datetime');
450		 * Desc : text필드의 입력포맷을 날짜/시간형으로 세팅함.
451		 * Parameter :
452		 * Return :
453		 * ----------------------------------------------------------------------------------*/
454		datetime : function() {
455			$(this).attr('maxlength', 19);
456			$(this).css('text-align', 'center');
457			$(this).val('____-__-__ __:__:__');
458			$(this).bind(
459					'keydown',
460					function(event) {
461						if (event.preventDefault) {
462							event.preventDefault();
463						} else {
464							event.returnValue = false;
465						}
466						var p = $(this).cursor('getSelection');
467						var pos = p.start;
468
469						if (event.keyCode >= 96 && event.keyCode <= 105) {
470							event.keyCode = event.keyCode - 48;
471						}
472						if (event.keyCode != 8 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 39) {
473							var pattern = /[0-9]/;
474							if (pattern.test(String.fromCharCode(event.keyCode))) {
475								if (pos == 4 || pos == 7 || pos == 10 || pos == 13 || pos == 16) {
476									pos++;
477								}
478								if (pos < 19) {
479									this.value = this.value.substring(0, pos) + String.fromCharCode(event.keyCode) + this.value.substring(pos + 1);
480									$(this).cursor('setSelection', pos + 1, pos + 1);
481								}
482							}
483						} else if (event.keyCode == 8) { // 백스페이스
484							if (pos > 0) {
485								if (pos == 5 || pos == 8) {
486									this.value = this.value.substring(0, pos - 1) + '-' + this.value.substring(pos);
487								} else if (pos == 14 || pos == 17) {
488									this.value = this.value.substring(0, pos - 1) + ':' + this.value.substring(pos);
489								} else if (pos == 11) {
490									this.value = this.value.substring(0, pos - 1) + ' ' + this.value.substring(pos);
491								} else {
492									this.value = this.value.substring(0, pos - 1) + '_' + this.value.substring(pos);
493								}
494								$(this).cursor('setSelection', pos - 1, pos - 1);
495							}
496						} else if (event.keyCode == 46) { // 딜리트
497							var tmpvalue = '';
498
499							if (pos == 4 || pos == 7 || pos == 10 || pos == 13 || pos == 16) {
500								tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 2);
501							} else {
502								tmpvalue = this.value.substring(0, pos) + this.value.substring(pos + 1);
503							}
504
505							tmpvalue = tmpvalue.replace(/-/g, '');
506							tmpvalue = tmpvalue.replace(/:/g, '');
507							tmpvalue = tmpvalue.replace(/_/g, '');
508							tmpvalue = tmpvalue.replace(/ /g, '');
509							tmpvalue = $.util.rpad(tmpvalue, 14, '_');
510
511							this.value = tmpvalue.substring(0, 4) + '-' + tmpvalue.substring(4, 6) + '-' + tmpvalue.substring(6, 8) + ' '
512									+ tmpvalue.substring(8, 10) + ':' + tmpvalue.substring(10, 12) + ':' + tmpvalue.substring(12);
513							$(this).cursor('setSelection', pos, pos);
514						} else if (event.keyCode == 37) { // 좌로
515							if (p.start > 0) {
516								$(this).cursor('setSelection', p.start - 1, p.start - 1);
517							}
518						} else if (event.keyCode == 39) { // 우로
519							if (p.start < 19) {
520								$(this).cursor('setSelection', p.start + 1, p.start + 1);
521							}
522						}
523					});
524		}
525	};
526
527	$.fn.formatter = $.fn.cursor = function(method) {
528
529		if (methods[method]) {
530			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
531		} else if (typeof method === 'object' || !method) {
532			return methods.init.apply(this, arguments);
533		} else {
534			$.error('Method ' + method + ' does not exist on jQuery.tooltip');
535		}
536	};
537})(jQuery);
538
539(function($) {
540	$.util = {
541		/*----------------------------------------------------------------------------------*
542		 * Function : $.util.min(a, b);
543		 * Desc : a와 b 중에서 최소값을 구하는 함수.
544		 * Parameter : a, b (최소값을 구하기 위한 숫자)
545		 * Return :
546		 * ----------------------------------------------------------------------------------*/
547		min : function(a, b) {
548			return a < b ? a : b;
549		},
550		/*----------------------------------------------------------------------------------*
551		 * Function : $.util.max(a, b);
552		 * Desc : a와 b 중에서 최대값을 구하는 함수
553		 * Parameter : a, b (최대값을 구하기 위한 숫자)
554		 * Return :
555		 * ----------------------------------------------------------------------------------*/
556		max : function(a, b) {
557			return a > b ? a : b;
558		},
559		/*----------------------------------------------------------------------------------*
560		 * Function : $.util.isNull(val);
561		 * Desc : val 값이 null인지 아닌지 구분하는 함수
562		 * Parameter : val (null 체크를 하는 값)
563		 * Return :
564		 * ----------------------------------------------------------------------------------*/
565		isNull : function(val) {
566
567			if (val == null) {
568				return true;
569			}
570
571			if (new String(val).valueOf() == "undefined") {
572				return true;
573			}
574
575			var s = new String(val);
576			if (s == null) {
577				return true;
578			}
579			if (s.toString().length == 0) {
580				return true;
581			}
582			return false;
583		},
584		/*----------------------------------------------------------------------------------*
585		 * Function : $.util.isNotNull(val);
586		 * Desc : val 값이 null인지 아닌지 구분하는 함수
587		 * Parameter : val (null 체크를 하는 값)
588		 * Return :
589		 * ----------------------------------------------------------------------------------*/
590		isNotNull : function(val) {
591			if ($.util.isNull(val)) {
592				return false;
593			}
594			return true;
595		},
596		/*----------------------------------------------------------------------------------*
597		 * Function : $.util.checkURL(val);
598		 * Desc : val 값이 주소 유형에 맞는지 여부 체크
599		 * Parameter : val (url 체크를 하는 값)
600		 * Return :
601		 * ----------------------------------------------------------------------------------*/
602		checkURL : function(val) {
603			if ($.util.isNull(val)) {
604				return false;
605			} else if (val.indexOf(".") == -1) {
606				return false;
607			} else {
608				return true;
609			}
610		},
611		/*----------------------------------------------------------------------------------*
612		 * Function : $.util.checkEmail(val);
613		 * Desc : val 값이 이메일 주소 유형에 맞는지 여부 체크
614		 * Parameter : val (이메일 주소를 체크하기 위한 값)
615		 * Return :
616		 * ----------------------------------------------------------------------------------*/
617		checkEmail : function(val) {
618			if ($.util.isNull(val)) {
619				return false;
620			}
621
622			var nIndexOfAt = val.indexOf("@");
623			var nIndexOfDot = val.indexOf(".");
624			var nLength = val.length;
625
626			// "@" 이 하나도 없거나 맨 끝에 위치한 경우
627			if (nIndexOfAt <= 0 || nIndexOfAt == nLength) {
628				return false;
629			}
630
631			// "." 이 하나도 없거나 맨 끝에 위치한 경우
632			if (nIndexOfDot <= 0 || nIndexOfDot == nLength) {
633				return false;
634			}
635
636			// "@"이 두개 이상 존재하는 경우
637			if (val.indexOf("@", nIndexOfAt + 1) != -1) {
638				return false;
639			}
640
641			// ".@" 인 경우 또는 "@."인 경우
642			if (val.substr(nIndexOfAt - 1, 1) == "." || val.substr(nIndexOfAt + 1, 1) == ".") {
643				return false;
644			}
645
646			// "@" 이후에 "."이 존재하지 않는 경우
647			if (val.indexOf(".", (nIndexOfAt + 2)) == -1) {
648				return false;
649			}
650
651			// 공백문자가 존재하는 경우
652			if (val.indexOf(" ") != -1) {
653				return false;
654			}
655
656			return true;
657
658		},
659		/*----------------------------------------------------------------------------------*
660		 * Function : $.util.checkPhone(val);
661		 * Desc : val 값이 전화 번호인지 체크하는 함수
662		 * Parameter : val (전화번호 값)
663		 * Return :
664		 * ----------------------------------------------------------------------------------*/
665		checkPhone : function(val) {
666			if ($.util.isNull(val) || (!$.util.isNull(val) && val.indexOf("-") == -1)) {
667				// 숫자만 입력했으면 저장
668				if ($.util.checkNumber(val) || (val.indexOf("+") == 0 && val.lastIndexOf("+") == 0)) {
669					return true;
670				} else {
671					return false;
672				}
673			} else if (val.indexOf(".") >= 0) {
674				return false;
675			} else {
676				// "-" 사이의 값이 숫자가 아닌 경우
677				var arrNumbers = val.split("-");
678				for ( var i = 0; i < arrNumbers.length; i++) {
679					if (!$.util.checkNumber(arrNumbers[i], "+")) {
680						return false;
681					}
682				}
683			}
684			return true;
685		},
686		/*----------------------------------------------------------------------------------*
687		 * Function : $.util.checkNumber(val);
688		 * Desc : val 값이 숫자인지 여부를 체크하는 함수
689		 * Parameter : val (숫자값)
690		 * 			 : sign (+, -)
691		 * Return :
692		 * Modify : 2013.10.11 Yangem, null 인경우 체크할필요 없으므로 true로 수정
693		 * ----------------------------------------------------------------------------------*/
694		checkNumber : function(val, sign) {
695			var strBase = "1234567890";
696			var strSign = sign;
697			var bReturn = true;
698
699			if (!$.util.isNull(strSign)) {
700				strBase += strSign;
701			}
702
703			if ($.util.isNull(val)) {
704				bReturn = true;
705			} else {
706				for ( var i = 0; i < $.util.length(val); i++) {
707					if (strBase.indexOf($.util.substring(val, i, 1)) < 0) {
708						bReturn = false;
709						break;
710					}
711				}
712			}
713			return bReturn;
714
715		},
716		/*----------------------------------------------------------------------------------*
717		 * Function : $.util.checkDate8(val);
718		 * Desc : 날짜가 8자리인지 체크하는 함수
719		 * Parameter : val (날짜)
720		 *
721		 * Return :
722		 * ----------------------------------------------------------------------------------*/
723		checkDate8 : function(val) {
724			if ($.util.length(val) != 8) {
725				return false;
726			} else if (!$.date.dateCheck(val)) {
727				return false;
728			}
729			return true;
730
731		},
732		/*----------------------------------------------------------------------------------*
733		 * Function : $.util.checkDate10(val);
734		 * Desc : 10자리 날짜를 체크하는 함수
735		 * Parameter : val (날짜)
736		 *
737		 * Return :
738		 * ----------------------------------------------------------------------------------*/
739		checkDate10 : function(val) {
740			return $.util.checkDate8($.util.replace($.util.replace($.util.replace(val, "/", ""), "-", ""), ".", ""));
741		},
742		/*----------------------------------------------------------------------------------*
743		 * Function : $.util.checkDate12(val);
744		 * Desc : 12자리 날짜/시간을 체크하는 함수
745		 * Parameter : val (날짜)
746		 *
747		 * Return :
748		 * ----------------------------------------------------------------------------------*/
749		checkTime12 : function(val) {
750			var pattern = "^(([0]?[1-9]|1[0-2]):[0-5][0-9](:[0-5][0-9])?( )?(AM|am|aM|Am|PM|pm|pM|Pm))$";
751
752			if (val.match(pattern)) {
753				return true;
754			} else {
755				return false;
756			}
757		},
758		/*----------------------------------------------------------------------------------*
759		 * Function : $.util.checkDate24(val);
760		 * Desc : 24자리 날짜/시간을 체크하는 함수
761		 * Parameter : val (날짜)
762		 *
763		 * Return :
764		 * ----------------------------------------------------------------------------------*/
765		checkTime24 : function(val) {
766			var pattern = "^(([0]?[0-9]|1[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?)$";
767
768			if (val.match(pattern)) {
769				return true;
770			} else {
771				return false;
772			}
773
774		},
775		/*----------------------------------------------------------------------------------*
776		 * Function : $.util.checkPassword(val);
777		 * Desc : 비밀번호 체크 형식에 맞는지 여부 확인하는 함수
778		 * Parameter : val (비밀번호)
779		 *
780		 * Return :
781		 * ----------------------------------------------------------------------------------*/
782		checkPassword : function(val) {
783			var result1 = val.match(/[^a-zA-Z]/gi);
784			var result2 = val.match(/[^0-9]/gi);
785
786			if (val.length > 5) {
787				if (result1 != null && result2 != null) {
788					return true;
789				}
790			} else {
791				return false;
792			}
793
794		},
795		/*----------------------------------------------------------------------------------*
796		 * Function : $.util.checkBTMSPassword1(val);
797		 * Desc : 비밀번호 체크 형식에 맞는지 여부 확인하는 함수(영문, 숫자, 특수문자 포함)
798		 * Parameter : val (비밀번호)
799		 *
800		 * Return :
801		 * ----------------------------------------------------------------------------------*/
802		checkBTMSPassword1 : function(val) {
803			var result1 = val.match(/[a-zA-Z]/gi);
804			var result2 = val.match(/[0-9]/gi);
805			var result3 = val.match(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\('\"]/gi);
806
807			// 1234qwer!@
808			// alert("result1 : " + result1); // qwer
809			// alert("result2 : " + result2); // 1234
810			// alert("result3 : " + result3); // !@
811
812			if (result1 != null) {
813
814				if (result2 != null) {
815
816					if (result3 != null) {
817						// alert("영문, 숫자, 특수문자 good");
818						return true;
819					}
820					// alert("result3 (특수문자) 위배");
821					return false;
822				}
823				// alert("result2 (숫자) 위배");
824				return false;
825			}
826			// alert("result1 (영문) 위배");
827			return false;
828		},
829		/*----------------------------------------------------------------------------------*
830		 * Function : $.util.checkBTMSPassword2(val);
831		 * Desc : 비밀번호 체크 형식에 맞는지 여부 확인하는 함수(8자리 이상 50자리 이하)
832		 * Parameter : val (비밀번호)
833		 *
834		 * Return :
835		 * ----------------------------------------------------------------------------------*/
836		checkBTMSPassword2 : function(val) {
837			if (val.length < 8) {
838				alert("비밀번호는 최소 8자리 이상이어야 합니다.");
839				return false;
840			} else if (val.length > 35) {
841				alert("비밀번호는 최대 35자리 이하이어야 합니다.");
842				return false;
843			} else {
844				// alert("자리수check good");
845				return true;
846			}
847
848		},
849
850		/*----------------------------------------------------------------------------------*
851		 * Function : $.util.checkVofPassword(val);
852		 * Desc : 비밀번호 체크 형식에 맞는지 여부 확인하는 함수(6자리 이상 16자리 이하),영숫자혼용 - VOF비밀번호
853		 * Parameter : val (비밀번호)
854		 *
855		 * Return :
856		 * ----------------------------------------------------------------------------------*/
857		checkVofPassword : function(val) {
858			var iLen = val.length;
859			var result1 = val.match(/[a-zA-Z]/gi);
860			var result2 = val.match(/[0-9]/gi);
861			var result3 = val.match(/[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\('\"]/gi);
862
863			if (iLen < 6) {
864				return false;
865			} else {
866				if (result1 != null) {
867
868					if (result2 != null) {
869
870						if (result3 != null) {
871							// alert("영문, 숫자, 특수문자 good");
872							return true;
873						}
874						// alert("result3 (특수문자) 위배");
875						return false;
876					}
877					// alert("result2 (숫자) 위배");
878					return false;
879				}
880				// alert("result1 (영문) 위배");
881			}
882
883			return false;
884
885			/*
886			 * var bIsNumeric = val.match(/[^a-zA-Z]/gi); var bIsAlphabet = val.match(/[^0-9]/gi); if (val.match(/[^A-Za-z0-9]/g) != null) { //
887			 * alert("영숫자만"); return false; } else { if (iLen < 6) { // alert("최소6자"); return false; } else if ((bIsNumeric == null) && (bIsAlphabet !=
888			 * null)) { // alert("영문도 필요"); return false; } else if ((bIsNumeric != null) && (bIsAlphabet == null)) { // alert("숫자도 필요"); return
889			 * false; } else if (iLen > 16) { // alert("최대 16"); return false; } } return true;
890			 */
891		},
892
893		/*----------------------------------------------------------------------------------*
894		 * Function : $.util.replace("abc", "b", "*");
895		 * Desc : 입력된 문자열의 일부분을 다른 문자열로 치환
896		 * Parameter : str(원본 String)
897		 *              oldstr(대체할 문자열)
898		 * 				newstr(새로 바꿀 문자열)
899		 * Return : String(대체 된 문자열)
900		 * ----------------------------------------------------------------------------------*/
901		replace : function(str, oldstr, newstr) {
902			while (str.indexOf(oldstr) != -1) {
903				str = str.replace(oldstr, newstr);
904			}
905			return str;
906
907		},
908		/*----------------------------------------------------------------------------------*
909		 * Function : $.util.length(val);
910		 * Desc : 입력값 형태에 따라서 길이 또는 범위를 구하는 함수
911		 * Parameter : 객체, 문자열, 배열
912		 * Return : Type에 따라 구해진 길이 또는 범위
913		 * ----------------------------------------------------------------------------------*/
914		length : function() {
915			var varRtnValue = 0;
916			var arrArgument = Array.prototype.slice.apply(arguments);
917			if (arrArgument.length < 1) {
918				return 0;
919			}
920
921			if (!$.util.isEmpty(arrArgument[0])) {
922				varRtnValue = arrArgument[0].toString().length;
923			}
924
925			return varRtnValue;
926
927		},
928		/*----------------------------------------------------------------------------------*
929		 * Function : $.util.substring(strString, nIndex, nSize);
930		 * Desc : 입력된 문자열에서 특정 위치 안에 있는 문자열 반환
931		 * Parameter : strString(String 문자열)
932		 * 				nIndex(얻어올 첫 글자의 Index)
933		 * 				nSize(얻어올 글자수, Default length(해당 객체의 길이)
934		 * Return : String(지정 위치 안의 문자열)
935		 * ----------------------------------------------------------------------------------*/
936		substring : function() {
937			var retVal = "";
938			var strString = "";
939			var nIndex = 0;
940			var nSize = 0;
941			var arrArgument = Array.prototype.slice.apply(arguments);
942
943			if (arrArgument.length >= 1) {
944				strString = arrArgument[0];
945			}
946			if (arrArgument.length >= 2) {
947				nIndex = parseInt(arrArgument[1]);
948			}
949			if (arrArgument.length >= 3) {
950				nSize = parseInt(arrArgument[2]);
951			} else {
952				nSize = $.util.length(arrArgument[0]);
953			}
954			if (!$.util.isEmpty(strString)) {
955				retVal = strString.substr(nIndex, nSize);
956			}
957
958			return retVal;
959
960		},
961		/*----------------------------------------------------------------------------------*
962		 * Function : $.util.isEmpty(val);
963		 * Desc : 값이 존재하는지 여부 체크
964		 * Parameter : val(입력값)
965		 * Return : true = 입력값이 null, 빈 스트링(""), undefined일 경우 false = 그 외 값이 존재하는 경우
966		 * ----------------------------------------------------------------------------------*/
967		isEmpty : function(val) {
968			sVal = new String(val);
969			if (sVal == null || sVal == "null" || sVal.length <= 0 || escape(sVal) == "undefined") {
970				return true;
971			} else {
972				return false;
973			}
974		},
975		/*----------------------------------------------------------------------------------*
976		 * Function : $.util.trim(val);
977		 * Desc     : 좌,우측 스페이스와 팁공간 제거
978		 * Parameter : String val
979		 * Return   : String
980		 *			좌, 우측 스페이스와 팁 공간을 모두 제거한 문자열 리턴
981		 * Example  : $.util.isEmpty(" abc def ") -> "abc def" 리턴
982		 * ----------------------------------------------------------------------------------*/
983		trim : function(val) {
984			return $.trim(val);
985		},
986		/*----------------------------------------------------------------------------------*
987		 * Function : $.util.isNumber(sVal);
988		 * Desc : 입력값이 숫자인지를 확인한다
989		 * Parameter : sVal 입력스트링
990		 * Return : Boolean True이면 숫자값
991		 * ----------------------------------------------------------------------------------*/
992		isNumber : function(sVal) {
993			if (sVal.length < 1) {
994				return false;
995			}
996
997			for ( var i = 0; i < sVal.length; i++) {
998				iBit = parseInt(sVal.substring(i, i + 1)); // 문자(Char)를 숫자로 변경
999				if (('0' < iBit) || ('9' > iBit)) {
1000					// alert(i+':'+iBit+':'+'Mun');
1001				} else {
1002					// alert((i+1)+'번째 문자는 숫자가 아닙니다.');
1003					return false;
1004				}
1005			}
1006			return true;
1007
1008		},
1009		/*----------------------------------------------------------------------------------*
1010		 * Function : $.util.trimChar(sVal, chars);
1011		 * Desc : 스트링값에서 chars를 제외
1012		 * Parameter : sVal (입력스트링)
1013		 * 				chars (제외할 chars)
1014		 * Return : chars가 제외된 문자열
1015		 * ----------------------------------------------------------------------------------*/
1016		trimChar : function(sVal, chars) {
1017			var un_str = "";
1018			str = String(sVal);
1019
1020			for ( var j = 0; j < str.length; j++) {
1021				if (str.charAt(j) != chars) {
1022					un_str = un_str + str.charAt(j);
1023				}
1024			}
1025
1026			return un_str;
1027		},
1028		/*----------------------------------------------------------------------------------*
1029		 * Function : $.util.checkDate10(val);
1030		 * Desc : 10자리 날짜를 체크하는 함수
1031		 * Parameter : val (날짜)
1032		 *
1033		 * Return :
1034		 * ----------------------------------------------------------------------------------*/
1035		checkDateTime : function(val) {
1036			var pattern = "^(([0]?[0-9]|1[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?)$";
1037			var time = $.util.substring(val, 11, 5);
1038			if ($.util.checkDate8($.util.replace($.util.replace($.util.replace($.util.substring(val, 0, 10), "/", ""), "-", ""), ".", ""))) {
1039				if (time.match(pattern)) {
1040					return true;
1041				} else {
1042					return false;
1043				}
1044			}
1045			return false;
1046		},
1047		/*----------------------------------------------------------------------------------*
1048		 * Function : $.util.intSize(val, changeChar);
1049		 * Desc : 객체의 width 또는 height 크기가 String형태인 것을 숫자로 뽑아서 써야 할 때 사용한다.
1050		 * Parameter : val (객체 width)
1051		 * 				changeChar (제외하는 char ex. px, %)
1052		 * Return :
1053		 * ----------------------------------------------------------------------------------*/
1054		intSize : function(val, changeChar) {
1055			return Number($.util.replace(val, changeChar, ''));
1056		},
1057
1058		/*----------------------------------------------------------------------------------*
1059		 * Function : $.util.formatter(parentId);
1060		 * Desc : form 안의 input 태그중 타입이 text이고 format attribute를 갖고 있는 필드의 입력 포맷을 세팅한다.
1061		 * Parameter : parentId (input을 둘러싸고 있는 상위 노드 id)
1062		 * Return :
1063		 * ----------------------------------------------------------------------------------*/
1064		formatter : function(formId) {
1065			$('#' + formId + ' input[type="text"]').each(function(idx, elem) {
1066				if (typeof $(this).attr('format') != 'undefined' && $(this).attr('format') != null && $(this).attr('format') != '') {
1067					$(this).formatter($(this).attr('format'));
1068				}
1069			});
1070		},
1071
1072		/*----------------------------------------------------------------------------------*
1073		 * Function : $.util.lpad(originalstr, length, strToPad);
1074		 * Desc : 문자열의 왼쪽을 지정하는 길이만큼 특정문자로 채워준다.
1075		 * Parameter : originalstr (해당문자열)
1076		 * 			   length (왼쪽이 특정문자로 채워진 문자열의 전체길이)
1077		 * 			   strToPad (왼쪽에 채울 문자)
1078		 * Return : originalstr의 왼쪽에 strToPad로 채워진 length길이의 문자열
1079		 * ----------------------------------------------------------------------------------*/
1080		lpad : function(originalstr, length, strToPad) {
1081			while (originalstr.length < length) {
1082				originalstr = strToPad + originalstr;
1083			}
1084			return originalstr;
1085		},
1086
1087		/*----------------------------------------------------------------------------------*
1088		 * Function : $.util.rpad(originalstr, length, strToPad);
1089		 * Desc : 문자열의 오른쪽을 지정하는 길이만큼 특정문자로 채워준다.
1090		 * Parameter : originalstr (해당문자열)
1091		 * 			   length (오른쪽이 특정문자로 채워진 문자열의 전체길이)
1092		 * 			   strToPad (오른쪽에 채울 문자)
1093		 * Return : originalstr의 오른쪽에 strToPad로 채워진 length길이의 문자열
1094		 * ----------------------------------------------------------------------------------*/
1095		rpad : function(originalstr, length, strToPad) {
1096			while (originalstr.length < length) {
1097				originalstr = originalstr + strToPad;
1098			}
1099			return originalstr;
1100		},
1101
1102		/*----------------------------------------------------------------------------------*
1103		 * Function : $.util.decode(value, if1, ret1[, if2, ret2, ...... , ifn, retn][, defaultVal]);
1104		 * Desc : value가 ifn의 값일 때 retn의 값을 반환한다.(오라클의 decode와 동일)
1105		 * Parameter : value ()
1106		 * 			   ifn (value와 비교할 값)
1107		 * 			   retn (value와 ifn을 비교해서 같으면 반환할 값)
1108		 *             defaultVal (value와 ifn을 비교해서 같은 값이 없을 경우 반환할 값)
1109		 * Return : retn
1110		 * ----------------------------------------------------------------------------------*/
1111		decode : function() {
1112			var defaultVal = '';
1113			var retVal = "";
1114			var flag = false;
1115			var val = arguments[0];
1116			var param = Array.prototype.slice.call(arguments).slice(1);
1117			var length = param.length;
1118			if (length % 2 == 1) {
1119				defaultVal = param[length - 1];
1120			}
1121
1122			for ( var i = 0; i < length; i = i + 2) {
1123				if (val == param[i]) {
1124					retVal = param[i + 1];
1125					flag = true;
1126					break;
1127				}
1128			}
1129			if (flag) {
1130				return retVal;
1131			} else {
1132				return defaultVal;
1133			}
1134		},
1135
1136		/*----------------------------------------------------------------------------------*
1137		 * Function : $.util.setdatetimefmt(datestr);
1138		 * Desc : 문자열의 오른쪽을 지정하는 길이만큼 특정문자로 채워준다.
1139		 * Parameter : datestr (데이타 문자열)
1140		 * Return : datestr을 datetime포맷으로 변경해 준다.
1141		 * ----------------------------------------------------------------------------------*/
1142		setdatetimefmt : function(datestr) {
1143			var strLen = datestr.length;
1144
1145			if (strLen == 14) {
1146				return datestr.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/g, "$1-$2-$3 $4:$5:$6");
1147			} else if (strLen == 8) {
1148				return datestr.replace(/(\d{4})(\d{2})(\d{2})/g, "$1-$2-$3");
1149			} else {
1150				return datestr;
1151			}
1152		},
1153
1154		mask : function(parentId) {
1155			$('#' + parentId + ' input[type="text"]').each(function(idx, elem) {
1156				if (typeof $(this).attr('mask') != 'undefined' && $(this).attr('mask') != null && $(this).attr('mask') != '') {
1157					$(this).mask($(this).attr('mask'));
1158				}
1159			});
1160		},
1161
1162		/*----------------------------------------------------------------------------------*
1163		 * Function : $.util.checkAlphabet(val);
1164		 * Desc : 영문만 입력
1165		 * Parameter : val (데이타문자열)
1166		 *
1167		 * Return :
1168		 * ----------------------------------------------------------------------------------*/
1169		checkAlphabet : function(val) {
1170			if (val.length < 1) {
1171				return false;
1172			}
1173			if (val.match(/[^A-Za-z]/gi) == null) {
1174				return true;
1175			} else {
1176				return false;
1177			}
1178		},
1179		/*----------------------------------------------------------------------------------*
1180		 * Function : $.util.checkAlphabetNumber(val);
1181		 * Desc : 영문 +숫자만 입력
1182		 * Parameter : val (데이타문자열)
1183		 *
1184		 * Return :
1185		 * ----------------------------------------------------------------------------------*/
1186		checkAlphabetNumber : function(val) {
1187			if (val.length < 1) {
1188				return false;
1189			}
1190			if (val.match(/[^A-Za-z0-9]/g) == null) {
1191				return true;
1192			} else {
1193				return false;
1194			}
1195		},
1196
1197		/*----------------------------------------------------------------------------------*
1198		 * Function : $.util.checkLowerAlphabetNumber(val);
1199		 * Desc : 영문소문자 +숫자만 입력
1200		 * Parameter : val (데이타문자열)
1201		 *
1202		 * Return :
1203		 * ----------------------------------------------------------------------------------*/
1204		checkLowerAlphabetNumber : function(val) {
1205			if (val.length < 1) {
1206				return false;
1207			}
1208			if (val.match(/[^a-z0-9]/g) == null) {
1209				return true;
1210			} else {
1211				return false;
1212			}
1213		},
1214		/*----------------------------------------------------------------------------------*
1215		 * Function : $.util.checkUpperAlphabetNumber(val);
1216		 * Desc : 영문대문자 +숫자만 입력
1217		 * Parameter : val (데이타문자열)
1218		 *
1219		 * Return :
1220		 * ----------------------------------------------------------------------------------*/
1221		checkUpperAlphabetNumber : function(val) {
1222			if (val.length < 1) {
1223				return true;
1224			}
1225			if (val.match(/[^A-Z0-9]/g) == null) {
1226				return true;
1227			} else {
1228				return false;
1229			}
1230		},
1231
1232		/*----------------------------------------------------------------------------------*
1233		 * Function : $.util.checkUpperAlphabet(val);
1234		 * Desc : 영문대문자만 입력
1235		 * Parameter : val (데이타문자열)
1236		 *
1237		 * Return :
1238		 * ----------------------------------------------------------------------------------*/
1239		checkUpperAlphabet : function(val) {
1240			if (val.length < 1) {
1241				return false;
1242			}
1243			if (val.match(/[^A-Z]/g) == null) {
1244				return true;
1245			} else {
1246				return false;
1247			}
1248		},
1249
1250		/*----------------------------------------------------------------------------------*
1251		 * Function : $.util.checkUpperAlphabetComma(val);
1252		 * Desc : 영문대문자 + 콤마만 입력
1253		 * Parameter : val (데이타문자열)
1254		 *
1255		 * Return :
1256		 * ----------------------------------------------------------------------------------*/
1257		checkUpperAlphabetComma : function(val) {
1258			if (val.length < 1) {
1259				return false;
1260			}
1261			if (val.match(/[^A-Z,]/g) == null) {
1262				return true;
1263			} else {
1264				return false;
1265			}
1266		},
1267
1268		/*----------------------------------------------------------------------------------*
1269		 * Function : $.util.checkUpperAlphabet(val);
1270		 * Desc : 영문대문자와 숫자와 @만 입력
1271		 * Parameter : val (데이타문자열)
1272		 *
1273		 * Return :
1274		 * ----------------------------------------------------------------------------------*/
1275		// checkUpperAlphabetNumberAt : function(val) {
1276		// if (val.length < 1) {
1277		// return false;
1278		// }
1279		// if (val.match(/[^A-Z0-9@]/g) == null) {
1280		// return true;
1281		// } else {
1282		// return false;
1283		// }
1284		// },
1285		/*----------------------------------------------------------------------------------*
1286		 * Function : $.util.isDateGrid(sDat, sColumn);
1287		 * Desc : yyyy-mm-dd 형태의 날짜 포맷을 체크하는 함수
1288		 * Parameter : sDate (yyyy-mm-dd 형태의 날짜 String), sColumn(컬럼명)
1289		 * Return : boolean (yyyy-mm-dd형태가 정확)
1290		 * ----------------------------------------------------------------------------------*/
1291		isDateGrid : function(pDate, colname) {
1292			var rtnArr = new Array();
1293			rtnArr[0] = "";
1294			rtnArr[1] = true;
1295
1296			if (pDate === "") {
1297				return rtnArr;
1298			}
1299
1300			if ($.util.checkDate10(pDate)) {
1301				var datePat = /^(\d{4})(\/|-)?(\d{2})(\/|-)?(\d{2})$/;
1302				// var datePat = /^(\d{4})(\d{2})(\d{2})$/;
1303				var matchArray = pDate.match(datePat); // is the format ok?
1304
1305				// var dateFmtErr = "날짜 형식은 yyyy-mm-dd로 입력해 주세요.";
1306				var dateFmtErr = colname + "은(는) yyyymmdd로 입력해 주세요.";
1307
1308				/* null여부는 require에서 확인 한다. hyu2 */
1309				if ($.util.isNull(matchArray)) {
1310					// rtnArr[0] = dateFmtErr;
1311					// rtnArr[1] = false;
1312					return rtnArr;
1313				}
1314
1315				year = matchArray[1];
1316				month = matchArray[3]; // p@rse date into variables
1317				day = matchArray[5];
1318				if (month.length != 2) {
1319					rtnArr[0] = dateFmtErr;
1320					rtnArr[1] = false;
1321					return rtnArr;
1322				}
1323
1324				if (day.length != 2) {
1325					rtnArr[0] = dateFmtErr;
1326					rtnArr[1] = false;
1327					return rtnArr;
1328				}
1329
1330				if (matchArray == null) {
1331					rtnArr[0] = dateFmtErr;
1332					rtnArr[1] = false;
1333					return rtnArr;
1334				}
1335
1336				if (month < 1 || month > 12) { // check month range
1337					rtnArr[0] = colname + "은(는) 1월에서 12월까지 입력가능합니다.";
1338					rtnArr[1] = false;
1339					return rtnArr;
1340				}
1341
1342				if (day < 1 || day > 31) {
1343					rtnArr[0] = colname + "은(는) 1일부터 31일까지 입력가능합니다.";
1344					rtnArr[1] = false;
1345					return rtnArr;
1346				}
1347
1348				if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
1349					rtnArr[0] = colname + "의 " + Number(month) + "월은 31일이 없습니다.";
1350					rtnArr[1] = false;
1351
1352					return rtnArr;
1353				}
1354
1355				if (month == 2) { // check for february 29th
1356					var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
1357					if (day > 29 || (day == 29 && !isleap)) {
1358						rtnArr[0] = colname + "의 " + Number(year) + "년 2월은 " + Number(day) + "일이 없습니다.";
1359						rtnArr[1] = false;
1360						return rtnArr;
1361					}
1362				}
1363				return rtnArr; // date is valid
1364			} else {
1365				rtnArr[0] = "날짜형식에 맞지 않습니다.";
1366				rtnArr[1] = false;
1367
1368				return rtnArr;
1369			}
1370		},
1371
1372		/*----------------------------------------------------------------------------------*
1373		 * Function : $.util.numComma(n);
1374		 * Desc : 숫자에 콤마를 추가하는 함수
1375		 * Parameter : n (숫자 String)
1376		 * Return : n (콤마를 포함한 숫자)
1377		 * ----------------------------------------------------------------------------------*/
1378		numComma : function(n) {
1379			var reg = /(^[+-]?\d+)(\d{3})/; // 정규식
1380			n += ''; // 숫자를 문자열로 변환
1381
1382			while (reg.test(n)) {
1383				n = n.replace(reg, '$1' + ',' + '$2');
1384			}
1385
1386			return n;
1387		},
1388
1389		/*----------------------------------------------------------------------------------*
1390		 * Function : $.util.convertBusinessNoFmt(n);
1391		 * Desc : 사업자 번호(1234567890)를 포맷(123-45-67890)으로 변경하는  함수
1392		 * Parameter : n (숫자 String)
1393		 * Return : n (콤마를 포함한 숫자)
1394		 * ----------------------------------------------------------------------------------*/
1395		convertBusinessNoFmt : function(businessNo) {
1396			var patt = new RegExp(/^(\d{3})(\d{2})(\d{5})$/);
1397			if (patt.test(businessNo)) { // 정확한 사업자 번호면
1398				return businessNo.replace(/(\d{3})(\d{2})(\d{5})/ig, "$1-$2-$3");
1399			} else { // 정확하지 않은 사업자번호
1400				return businessNo;
1401			}
1402		},
1403
1404		onlyRegExp : function(key, expr) { // 날짜 validate 추가
1405			// var obj = $('#' + arr.key.id);
1406
1407			var regExpattern = null;
1408			if (expr == "onlynumber") {
1409				regExpattern = (/[^(0-9)]/);
1410			} else if (expr == "alpha") {
1411				regExpattern = (/[^(a-zA-Z)]/);
1412			} else if (expr == "alphanum") {
1413				regExpattern = (/[^(0-9a-zA-Z)]/);
1414			} else if (expr == "numComma") {
1415				regExpattern = (/[^(0-9)]/);
1416			}
1417			// var korMatch = value.match(/[가-힣ㄱ-ㅎㅏ-ㅣ]/gi);
1418			var retValue = "";
1419			$obj = $('#' + key);
1420
1421			var val = $obj.val();
1422
1423			if (expr != "numComma") {
1424				for ( var i = 0; i < val.length; i++) {
1425					var checkStr = val.charAt(i);
1426					retValue += checkStr.replace(regExpattern, "");
1427				}
1428			} else {
1429				for ( var i = 0; i < val.length; i++) {
1430					var checkStr = val.charAt(i);
1431					retValue += checkStr.replace(regExpattern, "");
1432				}
1433
1434				retValue = $.util.numComma(retValue);
1435
1436			}
1437
1438			$obj.val(retValue);
1439
1440		},
1441		ifrmReSize : function(ifTitle, ifHieght) { // 프레임 사이즈 변경
1442
1443			var frameObj = $k1("[id^='ifrm_']", parent.document);
1444			var iframeHeight = "";
1445
1446			$k1.each(frameObj, function(index, element) {
1447				if ($k1(this).attr('title') == ifTitle) {
1448					iframeHeight = $k1(this).contents().height();
1449					if (ifHieght == null || ifHieght == undefined || ifHieght == "") {
1450						ifHieght = iframeHeight;
1451					}
1452					$(this).height(ifHieght);
1453				}
1454			});
1455
1456		},
1457
1458		/*----------------------------------------------------------------------------------*
1459		 * Function : $.util.isWholeNumber(val);
1460		 * Desc : 정수만 입력
1461		 * Parameter : val (데이타문자열)
1462		 *
1463		 * Return :
1464		 * ----------------------------------------------------------------------------------*/
1465		isWholeNumber : function(val) {
1466			var regex = /^(\d*\.\d*)$/;
1467			if (regex.test(val)) {
1468				alert("소수점을 입력하실수 없습니다.");
1469				return true;
1470			}
1471			return false;
1472		},
1473
1474		/*----------------------------------------------------------------------------------*
1475		 * Function : $.util.dateFmt(val);
1476		 * Desc : 데이터 val에 포맷을 정해주는 함수
1477		 * Parameter : val (데이타 val값)
1478		 * Return :
1479		 * ----------------------------------------------------------------------------------*/
1480		dateFmt : function(dateVal) {
1481			if (dateVal.length == 14) {
1482				dateVal = dateVal.substring(0, 4) + '-' + dateVal.substring(4, 6) + '-' + dateVal.substring(6, 8) + ' ' + dateVal.substring(8, 10)
1483						+ ':' + dateVal.substring(10, 12) + ':' + dateVal.substring(12, 14);
1484			}
1485			if (dateVal.length == 12) {
1486				dateVal = dateVal.substring(0, 4) + '-' + dateVal.substring(4, 6) + '-' + dateVal.substring(6, 8) + ' ' + dateVal.substring(8, 10)
1487						+ ':' + dateVal.substring(10, 12);
1488			}
1489			if (dateVal.length == 8) {
1490				dateVal = dateVal.substring(0, 4) + '-' + dateVal.substring(4, 6) + '-' + dateVal.substring(6, 8);
1491			}
1492
1493			return dateVal;
1494		},
1495		/*----------------------------------------------------------------------------------*
1496		 * Function : $.util.fillchar(str, char);
1497		 * Desc : 해당 문자만큼 char 문자로 채운다.
1498		 * Parameter : str (데이타 str),
1499		 * 				char (채울 문자)
1500		 * Return :
1501		 * ----------------------------------------------------------------------------------*/
1502		fillchar : function(str, char) {
1503			if (str.length == 0) {
1504				return;
1505			}
1506
1507			var chgchar = "";
1508			for ( var i = 0; i < str.length; i++) {
1509				chgchar += char;
1510			}
1511
1512			return chgchar;
1513		},
1514		/*----------------------------------------------------------------------------------*
1515		 * Function : $.util.checkTime(timeVal, colname);
1516		 * Desc : 시간분 형태인지 파악
1517		 * Parameter : timeVal 시간분값
1518		 * Return :
1519		 * ----------------------------------------------------------------------------------*/
1520		checkTime : function(timeVal, colname) {
1521			var rtnArr = new Array();
1522			rtnArr[0] = "";
1523			rtnArr[1] = true;
1524
1525			var regex = /^(2[0-3]|[01][0-9]):?([0-5][0-9])$/;
1526			if (regex.test(timeVal)) {
1527				rtnArr[0] = "";
1528				rtnArr[1] = true;
1529			} else {
1530				rtnArr[0] = colname + "은 형식이 잘못되었습니다.";
1531				rtnArr[1] = false;
1532			}
1533
1534			return rtnArr;
1535		},
1536		/*----------------------------------------------------------------------------------*
1537		 * Function : $.util.replaceAll(sValue, param1, param2);
1538		 * Desc : param1 문자열을 모두 param2 문자열로 변경한ë
1538‹¤.
1539		 * Parameter :
1540		 * Return :
1541		 * ----------------------------------------------------------------------------------*/
1542		replaceAll : function(sValue, param1, param2) {
1543			return sValue.split(param1).join(param2);
1544		}
1545	// 아리프레임 리사이즈
1546	};
1547
1548})(jQuery);
1549
1550(function($) {
1551	$.date = {
1552		/*----------------------------------------------------------------------------------*
1553		 * Function : $.date.dateCheck(sDate);
1554		 * Desc : 날짜 형식인지 아닌지 체크하는 함수
1555		 * Parameter : sDate(입력값)
1556		 * Return : 날짜 형식 여부
1557		 * ----------------------------------------------------------------------------------*/
1558		dateCheck : function(sDate) {
1559			sDate = sDate.replace(" ", "").replace("-", "").replace("/", "");
1560			if ($.isNumeric(sDate) == false || $.date.getDay(sDate) == -1) {
1561				return false;
1562			}
1563			var df = "^[0-9]{4}([0]?[0-9]|1[0-2])([0-2]?[0-9]|[3][0-1])$";
1564			return sDate.match(df);
1565		},
1566		availDepDate : function(depdateArr, depweek, apdaycnt) {
1567			
1568			var availdateArr = [ '-1' ]; // 출국 가능 일자 배열
1569			var mindate = $.date.strToDate($k1.date.calDateCount($k1.date.toDate(), apdaycnt));
1570			var depweekArr = $.date.availWeekDayArr(depweek);
1571
1572			// console.log('mindate : ' + mindate);
1573			// console.log('depweekArr : ' + depweekArr);
1574			for ( var a in depdateArr) {
1575				if(a == "contains"){
1576					continue;
1577				}
1578				var availArr = depdateArr[a].split('~');
1579				var betweendateArr = $.date.getBetweenDateArray(availArr[0], availArr[1]); // 출국 가능 기간 사이의 날짜를 구한다.
1580
1581				$.each(betweendateArr, function(index, value) {
1582					if ($.inArray(value, availdateArr) == -1) { // 중복된 날짜를 제거한다.
1583						var valdate = $.date.strToDate($.util.replaceAll(value, "-", ""));
1584						var weekday = $.date.getDay($.util.replaceAll(value, "-", "")); // 출국 가능 기간 안에 날짜들의 요일을 구한다.
1585						if (valdate >= mindate) {
1586							if (depweekArr.length > 0) {
1587								if (depweekArr.toString().indexOf(weekday) != -1) { // 출국 가능 요일에서 해당 날짜 요일이 있는지 확인한다.
1588									availdateArr.push(value);
1589								}
1590							}
1591						}
1592					}
1593				});
1594			}
1595			// console.log('availdateArr : ' + availdateArr);
1596			return availdateArr;
1597		},
1598		availArrDate : function(depdate, arrweek, minstay, maxstay) {
1599			var availdateArr = [ '-1' ]; // 출국 가능 일자 배열
1600			var s_mindate = $k1.date.calDateCount(depdate, minstay);
1601			var s_maxdate = $k1.date.calDateCount(depdate, maxstay);
1602			var arrweekArr = $.date.availWeekDayArr(arrweek);
1603
1604			var betweendateArr = $.date.getBetweenDateArray(s_mindate, s_maxdate); // 출국 가능 기간 사이의 날짜를 구한다.
1605			// console.log('mindate : ' + s_mindate + ', maxdate : ' + s_maxdate);
1606
1607			$.each(betweendateArr, function(index, value) {
1608				var weekday = $.date.getDay($.util.replaceAll(value, "-", "")); // 출국 가능 기간 안에 날짜들의 요일을 구한다.
1609				if (arrweekArr.toString().indexOf(weekday) != -1) { // 출국 가능 요일에서 해당 날짜 요일이 있는지 확인한다.
1610					availdateArr.push(value);
1611				}
1612			});
1613
1614			// console.log('availdateArr : ' + availdateArr);
1615			return availdateArr;
1616		},
1617		calDateCount : function(srcDate, addStrDate) {
1618			var dtype = addStrDate.substr(addStrDate.length - 1, 1);
1619			var addDay = addStrDate.substring(0, addStrDate.indexOf(dtype));
1620			var calDate = '';
1621
1622			// console.log('substr : ' + addDay + ', ' + dtype);
1623
1624			calDate = $.date.addDateByType(dtype, addDay, srcDate, "");
1625
1626			// console.log('srcDate : ' + srcDate + ', calDate : ' + calDate);
1627			return calDate;
1628		},
1629		isAvailWeekDay : function(weekArr, weekday) {
1630			var availflag = false;
1631			$.each(weekArr, function(index, value) {
1632				if (value == 1) {
1633					if (index == weekday) {
1634						availflag = true;
1635					}
1636				}
1637			}); // end each
1638
1639			return availflag;
1640		},
1641		availWeekDayArr : function(depweekstr) {
1642			var availWeekArr = [];
1643			for ( var i = 0; i < depweekstr.length; i++) {
1644				if (depweekstr.charAt(i) == '1') {
1645					availWeekArr.push(i);
1646				}
1647			}
1648
1649			return availWeekArr;
1650		},
1651		/*----------------------------------------------------------------------------------*
1652		 * Function : $.date.getBetweenDateArray(fromdate, todate);
1653		 * Desc : form date와 to date 사이의 날짜를 배열로 구한다.
1654		 * Parameter : fromdate(시작일), todate(종료일)
1655		 * Return : 날짜 배열
1656		 * ----------------------------------------------------------------------------------*/
1657		getBetweenDateArray : function(fromdate, todate) {
1658			var ret_dateArr = [];
1659			s_formdate = $.util.replaceAll(fromdate, "-", "");
1660			s_todate = $.util.replaceAll(todate, "-", "");
1661
1662			d_formdate = $.date.strToDate(s_formdate);
1663			d_todate = $.date.strToDate(s_todate);
1664
1665			var betweenday = (d_todate.getTime() - d_formdate.getTime()) / 1000 / 60 / 60 / 24;
1666			// console.log("between date : " + betweenday + " > " + s_formdate + " " + s_todate);
1667
1668			for ( var i = 0; i <= betweenday; i++) {
1669				// console.log($.date.addDate("d", i, s_formdate, "-"));
1670				ret_dateArr.push($.date.addDate("d", i, s_formdate, "-"));
1671			}
1672
1673			return ret_dateArr;
1674		},
1675		/*----------------------------------------------------------------------------------*
1676		 * Function : $.date.getDay(sDate);
1677		 * Desc : 입력된 날짜의 요일을 반납
1678		 * Parameter : sDate (yyyyMMdd 형태의 날짜 String)
1679		 * Return : 0 = 일요일, 1 = 월요일, ..., 6 = 토요일 * -1 = 오류 발생시
1680		 * ----------------------------------------------------------------------------------*/
1681		getDay : function(sDate) {
1682			var objDate = $.date.strToDate(sDate);
1683			return objDate.getDay();
1684		},
1685		/*----------------------------------------------------------------------------------*
1686		 * Function : $.date.strToDate(sDate);
1687		 * Desc : yyyyMMdd 형태의 String을 Date 객체로 변환하는 함수
1688		 * Parameter : sDate (yyyyMMdd 형태의 날짜 String)
1689		 * Return : Date
1690		 * ----------------------------------------------------------------------------------*/
1691		strToDate : function(sDate) {
1692			var nYear = Number(sDate.substring(0, 4));
1693			var nMonth = Number(sDate.substring(4, 6)) - 1;
1694			var nDate = Number(sDate.substring(6, 8));
1695
1696			return new Date(nYear, nMonth, nDate);
1697		},
1698		toDate : function() {
1699			var today = new Date(); // 날자 변수 선언
1700			var dateNow = $.util.lpad(String(today.getDate()), 2, "0"); // 일자를 구함
1701			var monthNow = $.util.lpad(String((today.getMonth() + 1)), 2, "0"); // 월(month)을 구함
1702			// var yearNow = String(today.getYear()); // 년(year)을 구함
1703			var yearNow = String(today.getFullYear()); // 년(year)을 구함
1704
1705			// console.log('today : ' + yearNow + monthNow + dateNow);
1706			return yearNow + monthNow + dateNow;
1707		},
1708		/*----------------------------------------------------------------------------------*
1709		 * Function : $.date.fillZero(id, size);
1710		 * Desc : size 만큼 '0'을 날짜 뒤에 채워  변환하는 함수
1711		 * Parameter : $.date.fillZero('2013-08-07', 14)
1712		 * Return : String (yyyyMMdd+'000000' 형태의 날짜 String)
1713		 * ----------------------------------------------------------------------------------*/
1714		fillZero : function(id, size) {
1715			var gRtnVal = "";
1716			// $k1("#paytl").val().replace(/[^0-9]/g, '');
1717			var gLenDt = $("#" + id).val().replace(/[^0-9]/g, '');
1718			var gDiff = parseInt(size) - parseInt(gLenDt.length);
1719			if (gDiff > 0) {
1720				for ( var int = 0; int < gDiff; int++) {
1721					gLenDt += "0";
1722				}
1723				gRtnVal.concat(gDiff);
1724			} else {
1725				gRtnVal.concat(gDiff);
1726			}
1727			return gRtnVal;
1728		},
1729		/*----------------------------------------------------------------------------------*
1730		 * Function : $.date.conv1aDate(sDate);
1731		 * Desc : ddMMyyyy 형태의 String을 yyyyMMdd 로 변환하는 함수
1732		 * Parameter : sDate (ddMMyyyy 형태의 날짜 String)
1733		 * Return : String (yyyyMMdd 형태의 날짜 String)
1734		 * ----------------------------------------------------------------------------------*/
1735		conv1aDate : function(sDate) {
1736			var retrnDate = "";
1737			try {
1738				if (sDate != null || sDate != undefined || sDate != "") {
1739					// ddMMyy
1740					if (sDate.length == 6) {
1741						var nYear = parseInt(sDate.substr(4, 2));
1742						var nMonth = parseInt(sDate.substr(2, 2)) - 1;
1743						var nDate = parseInt(sDate.substr(0, 2));
1744
1745						var fullDatetime = new Date(nYear, nMonth, nDate);
1746						var mYear = fullDatetime.getFullYear() + 100;
1747						var mMonth = String(fullDatetime.getMonth() * 1 + 1);
1748						mMonth = mMonth.length == 1 ? "0" + mMonth : mMonth;
1749						var mDate = String(fullDatetime.getDate());
1750						mDate = mDate.length == 1 ? "0" + mDate : mDate;
1751						retrnDate = (mYear + mMonth + mDate);
1752
1753					} else if (sDate.length == 8) {
1754						// ddMMyyyy//생일:::13/12/2005
1755						var nYear = sDate.substr(4, 4);
1756						var nMonth = sDate.substr(2, 2);
1757						var nDate = sDate.substr(0, 2);
1758
1759						// var fullDatetime = new Date(nYear, nMonth, nDate);
1760						// var mYear = fullDatetime.getFullYear() + 100;
1761						// var mMonth = String(fullDatetime.getMonth());
1762						// mMonth = mMonth.length == 1 ? "0" + mMonth : mMonth;
1763						// var mDate = String(fullDatetime.getDate());
1764						// mDate = mDate.length == 1 ? "0" + mDate : mDate;
1765						var mYear = String(nYear);
1766						var mMonth = String(nMonth);
1767						var mDate = String(nDate);
1768						retrnDate = (mYear + mMonth + mDate);
1769
1770					} else if (sDate.length == 10) {
1771						// ddMMyyHHmm
1772						var nTime = sDate.substr(6, 4);
1773						var nYear = parseInt(sDate.substr(4, 2));
1774						var nMonth = parseInt(sDate.substr(2, 2)) - 1;
1775						var nDate = parseInt(sDate.substr(0, 2));
1776
1777						var fullDatetime = new Date(nYear, nMonth, nDate);
1778
1779						var mYear = fullDatetime.getFullYear() + 100;// 1900+100=2000
1780						var mMonth = String(fullDatetime.getMonth() * 1 + 1);
1781						mMonth = mMonth.length == 1 ? "0" + mMonth : mMonth;
1782						var mDate = String(fullDatetime.getDate());
1783						mDate = mDate.length == 1 ? "0" + mDate : mDate;
1784						retrnDate = (mYear + mMonth + mDate + nTime);
1785					}
1786				}
1787			} catch (e) {
1788			}
1789
1790			return retrnDate;
1791		},
1792		/*----------------------------------------------------------------------------------*
1793		 * Function : $.date.formatter(sDate, flag, separator);
1794		 * Desc : yyyyMMdd 형태의 String을 Date 객체로 변환하는 함수
1795		 * Parameter : sDate - 숫자형태의 Full날짜 String
1796		 * 			   flag - day(요일) : 최소 8자리
1797		 * 			   flag - date(년월일) : 최소 8자리
1798		 * 			   flag - dateday(년월일(요일)) : 최소 8자리
1799		 * 			   flag - datetime(년월일시분)) : 최소 12자리
1800		 * 			   flag - datedaytime(년월일(요일)시분)) : 최소 12자리
1801		 * 			   flag - time(시분) : 최소 12자리
1802		 * 			   separator - 요일 구분자 값
1803		 * Return : Date
1804		 * ----------------------------------------------------------------------------------*/
1805		formatter : function(pDate, pFlag, pSeperator) {
1806			var ret = '', sFlag = '', sDay = '', sMeng = '';
1807
1808			if (typeof pDate == 'undefined' || pDate == null || pDate.length < 8 || pDate == 'null') {
1809				return '';
1810			}
1811			if (typeof pFlag == 'undefined' || pFlag == null || pFlag.length == 0 || pFlag == 'null') {
1812				return '';
1813			}
1814			if (typeof pSeperator == 'undefined' || pSeperator == null || pSeperator.length == 0 || pSeperator == 'null') {
1815				sFlag = '-';
1816			} else {
1817				sFlag = pSeperator;
1818			}
1819
1820			var sYear = pDate.substring(0, 4);
1821			var sMonth = pDate.substring(4, 6);
1822			var sDate = pDate.substring(6, 8);
1823			var sHour = pDate.substring(8, 10);
1824			var sMinute = pDate.substring(10, 12);
1825			var nDay = $.date.getDay(pDate.substring(0, 8));
1826			switch (nDay) {
1827			case 0:
1828				sDay = "일";
1829				break;
1830			case 1:
1831				sDay = "월";
1832				break;
1833			case 2:
1834				sDay = "화";
1835				break;
1836			case 3:
1837				sDay = "수";
1838				break;
1839			case 4:
1840				sDay = "목";
1841				break;
1842			case 5:
1843				sDay = "금";
1844				break;
1845			case 6:
1846				sDay = "토";
1847				break;
1848			}
1849
1850			switch (sMonth) {
1851			case "01":
1852				sMeng = "JAN";
1853				break;
1854			case "02":
1855				sMeng = "FEB";
1856				break;
1857			case "03":
1858				sMeng = "MAR";
1859				break;
1860			case "04":
1861				sMeng = "APR";
1862				break;
1863			case "05":
1864				sMeng = "MAY";
1865				break;
1866			case "06":
1867				sMeng = "JUN";
1868				break;
1869			case "07":
1870				sMeng = "JUL";
1871				break;
1872			case "08":
1873				sMeng = "AUG";
1874				break;
1875			case "09":
1876				sMeng = "SEP";
1877				break;
1878			case "10":
1879				sMeng = "OCT";
1880				break;
1881			case "11":
1882				sMeng = "NOV";
1883				break;
1884			case "12":
1885				sMeng = "DEC";
1886				break;
1887			}
1888
1889			switch (pFlag) {
1890			case 'day': // 요일
1891				ret = sDay;
1892				break;
1893			case 'date': // 날짜
1894				ret = sYear + sFlag + sMonth + sFlag + sDate;
1895				break;
1896			case 'dateday': // 날짜(요일)
1897				ret = sYear + sFlag + sMonth + sFlag + sDate + '(' + sDay + ')';
1898				break;
1899			case 'datetime': // 날짜 시간
1900				ret = sYear + sFlag + sMonth + sFlag + sDate + ' ' + sHour + ':' + sMinute;
1901				break;
1902			case 'datedaytime': // 날짜(요일) 시간
1903				ret = sYear + sFlag + sMonth + sFlag + sDate + '(' + sDay + ') ' + sHour + ':' + sMinute;
1904				break;
1905			case 'time': // 시간
1906				ret = sHour + ':' + sMinute;
1907				break;
1908			case 'dateeng': // 영문
1909				ret = String(sDate) + String(sMeng) + String(sYear.substring(2, 4));
1910				break;
1911			}
1912
1913			return ret;
1914		},
1915		/*
1916		 * ---------------------------------------------------------------------------- 특정 날짜에 대해 지정한 값만큼 가감(+-)한 날짜를 반환 입력 파라미터 ----- pInterval :
1917		 * "yyyy" 는 연도 가감, "m" 은 월 가감, "d" 는 일 가감 pAddVal : 가감 하고자 하는 값 (정수형) pYyyymmdd : 가감의 기준이 되는 날짜 pDelimiter : pYyyymmdd 값에 사용된 구분자를 설정 (없으면 ""
1918		 * 입력) 반환값 ---- yyyymmdd 또는 함수 입력시 지정된 구분자를 가지는 yyyy?mm?dd 값 사용예 --- 2008-01-01 에 3 일 더하기 ==> $.date.addDate("d", 3, "2008-08-01", "-");
1919		 * 20080301 에 8 개월 더하기 ==> $.date.addDate("m", 8, "20080301", ""); ---------------------------------------------------------------------------
1920		 */
1921		addDate : function(pInterval, pAddVal, pYyyymmdd, pDelimiter) {
1922			var yyyy;
1923			var mm;
1924			var dd;
1925			var cDate;
1926			var oDate;
1927			var cYear, cMonth, cDay;
1928
1929			if (pDelimiter != "") {
1930				pYyyymmdd = pYyyymmdd.replace(eval("/\\" + pDelimiter + "/g"), "");
1931			}
1932
1933			yyyy = pYyyymmdd.substr(0, 4);
1934			mm = pYyyymmdd.substr(4, 2);
1935			dd = pYyyymmdd.substr(6, 2);
1936
1937			if (pInterval == "yyyy") {
1938				yyyy = (yyyy * 1) + (pAddVal * 1);
1939			} else if (pInterval == "m") {
1940				mm = (mm * 1) + (pAddVal * 1);
1941			} else if (pInterval == "d") {
1942				dd = (dd * 1) + (pAddVal * 1);
1943			}
1944
1945			cDate = new Date(yyyy, mm - 1, dd); // 12월, 31일을 초과하는 입력값에 대해 자동으로 계산된 날짜가 만들어짐.
1946			cYear = cDate.getFullYear();
1947			cMonth = cDate.getMonth() + 1;
1948			cDay = cDate.getDate();
1949
1950			cMonth = cMonth < 10 ? "0" + cMonth : cMonth;
1951			cDay = cDay < 10 ? "0" + cDay : cDay;
1952
1953			if (pDelimiter != "") {
1954				return cYear + pDelimiter + cMonth + pDelimiter + cDay;
1955			} else {
1956				return cYear + "" + cMonth + "" + cDay;
1957			}
1958		},
1959		addDateByType : function(pType, pAddVal, pYyyymmdd, pDelimiter) {
1960			var yyyy;
1961			var mm;
1962			var dd;
1963			var cDate;
1964			var oDate;
1965			var cYear, cMonth, cDay;
1966
1967			pYyyymmdd = pYyyymmdd.replace(eval("/\\" + "-" + "/g"), "");
1968
1969			yyyy = pYyyymmdd.substr(0, 4);
1970			mm = pYyyymmdd.substr(4, 2);
1971			dd = pYyyymmdd.substr(6, 2);
1972
1973			// console.log(yyyy + '-' + mm + '-' + dd);
1974			var enddate = $k1.date.getMonthEndDate(Number(yyyy), Number(mm));
1975
1976			if (pType == "Y") {
1977				yyyy = (yyyy * 1) + (pAddVal * 1);
1978			} else if (pType == "M") {
1979				mm = (mm * 1) + (pAddVal * 1);
1980			} else if (pType == "D") {
1981				dd = (dd * 1) + (pAddVal * 1);
1982			}
1983
1984			// 기준일이 말일 경우 처리함.
1985			if (pType == 'M') {
1986				// console.log(yyyy + '-' + mm + '-' + dd);
1987				// console.log(enddate + '=' + Number(dd));
1988				if (Number(dd) == enddate) {
1989					dd = $k1.date.getMonthEndDate(Number(yyyy), Number(mm));
1990				}
1991				// console.log('change : ' + yyyy + '-' + mm + '-' + dd);
1992			}
1993
1994			cDate = new Date(yyyy, mm - 1, dd); // 12월, 31일을 초과하는 입력값에 대해 자동으로 계산된 날짜가 만들어짐.
1995			cYear = cDate.getFullYear();
1996			cMonth = cDate.getMonth() + 1;
1997			cDay = cDate.getDate();
1998
1999			cMonth = cMonth < 10 ? "0" + cMonth : cMonth;
2000			cDay = cDay < 10 ? "0" + cDay : cDay;
2001
2002			if (pDelimiter != "") {
2003				return cYear + pDelimiter + cMonth + pDelimiter + cDay;
2004			} else {
2005				return cYear + "" + cMonth + "" + cDay;
2006			}
2007		},
2008		getMonthEndDate : function(year, month) {
2009			var dt = new Date(year, month, 0);
2010			return dt.getDate();
2011		}
2012
2013	};
2014})(jQuery);
2015
2016(function($) {
2017	$.gridformatter = {
2018		dateTimeFormat : function(cellvalue, options, rowObject) {
2019
2020			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2021				return '';
2022			}
2023			switch (options.colModel.formatoptions.dateformat) {
2024			case 'datetime':
2025				if (cellvalue.length > 13) {
2026					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2027							+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12) + ':' + cellvalue.substring(12, 14);
2028				} else if (cellvalue.length == 12) {	// second가 없는 데이터 00 default 삽입
2029					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2030					+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12) + ':00';
2031				}
2032				break;
2033			case 'datetime2':
2034				if (cellvalue.length > 13) {
2035					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2036							+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12) + ':' + cellvalue.substring(12, 14) + ' '
2037							+ cellvalue.substring(14, 17);
2038				}
2039				break;
2040			case 'datetime3': // YY-MM-DD ~
2041				if (cellvalue.length > 13) {
2042					cellvalue = cellvalue.substring(2, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2043							+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12) + ':' + cellvalue.substring(12, 14);
2044				}
2045				break;
2046			case 'datetime4': // YY-MM-DD
2047				if (cellvalue.length > 8) {
2048					cellvalue = cellvalue.substring(2, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8);
2049				}
2050				break;
2051			case 'datehhmm':
2052				if (cellvalue.length > 11) {
2053					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2054							+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12);
2055				}
2056				break;
2057			case 'datehhmm2': // datehhmm or YY-MM-DD HH
2058				if (cellvalue.length > 11) {
2059					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2060							+ cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12);
2061				}
2062				else if (cellvalue.length > 9) {
2063					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + ' '
2064							+ cellvalue.substring(8, 10);
2065				}
2066				break;
2067			case 'date':
2068				cellvalue = cellvalue.replace(/-/g, '');
2069
2070				 if (cellvalue.length > 7) {
2071					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8);
2072				}else if (cellvalue.length == 6) {
2073					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) ;
2074				}
2075				break;
2076			case 'time':
2077				if (cellvalue.length > 3) {
2078
2079					cellvalue = cellvalue.substring(0, 2) + ':' + cellvalue.substring(2, 4);
2080				}
2081				break;
2082			case 'dateweek':
2083				if (cellvalue.length > 7) {
2084					cellvalue = cellvalue.substring(0, 4) + '-' + cellvalue.substring(4, 6) + '-' + cellvalue.substring(6, 8) + " ("
2085							+ $(rowObject).find(options.colModel.formatoptions.weekColumnNm).text() + ")";
2086
2087				}
2088				break;
2089			//20161101 고용혁
2090			case 'maskDate':
2091				cellvalue = cellvalue.replace(/-/g, '');
2092				var maskVal1 = cellvalue.substring(4, 6);
2093				var maskVal2 = cellvalue.substring(6, 8);
2094				maskVal1 = '**';
2095				maskVal2 = '**';
2096				 if (cellvalue.length > 7) {
2097					cellvalue = cellvalue.substring(0, 4) + '-' + maskVal1 + '-' + maskVal2;
2098				}else if (cellvalue.length > 5) {
2099					cellvalue = cellvalue.substring(0, 4) + '-' + maskVal1  ;
2100				}
2101				break;
2102				
2103			case 'custTime':
2104				if (cellvalue.length > 11) {
2105					cellvalue = cellvalue.substring(8, 10) + ':' + cellvalue.substring(10, 12);
2106				}else{
2107					cellvalue = "";
2108				}
2109			break;	
2110			}
2111//
2112			return cellvalue;
2113		},
2114
2115		businessRegNoFormat : function(cellvalue, options, rowObject) {
2116			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2117				return '';
2118			}
2119
2120			if (cellvalue.length == 10) {
2121				cellvalue = cellvalue.substring(0, 3) + '-' + cellvalue.substring(3, 5) + '-' + cellvalue.substring(5);
2122			}
2123
2124			return cellvalue;
2125		},
2126
2127		postCodeFormat : function(cellvalue, options, rowObject) {
2128			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2129				return '';
2130			}
2131
2132			if (cellvalue.length == 6) {
2133				cellvalue = cellvalue.substring(0, 3) + '-' + cellvalue.substring(3);
2134			}
2135
2136			return cellvalue;
2137		},
2138
2139		urlLinkFormat : function(cellvalue, options, rowObject) {
2140			var $grid = $('#' + options.gid);
2141			var pkey = $grid.grid('getGridParam', 'constraints')['pkey'];
2142			// var pkArr = {};
2143			// console.log('===========');
2144			// console.log(rowObject);
2145			// console.log('===========');
2146			var retStr = '';
2147			for ( var i = 0; i < pkey.length; i++) {
2148				if (i != 0) {
2149					retStr += ';';
2150				}
2151				retStr += pkey[i] + '=' + $(rowObject).find(pkey[i]).text();
2152
2153				// pkArr[pkey[i]] = $(rowObject).find(pkey[i]).text();
2154			}
2155			// return '<a href="#" onClick="openForm(' + pkArr + ')">' +
2156			// cellvalue + '</a>';
2157			return '<a href="#" onClick="openForm(\'' + retStr + '\')">' + cellvalue + '</a>';
2158		},
2159
2160		urlLinkUnformat : function(cellvalue, options, rowObject) {
2161			return cellvalue;
2162		},
2163
2164		removeFormatter : function(cellvalue, options) {
2165			cellvalue = cellvalue.replace(/-/g, '');
2166			cellvalue = cellvalue.replace(/ /g, '');
2167			cellvalue = cellvalue.replace(/:/g, '');
2168			cellvalue = cellvalue.replace(/,/g, '');
2169			return cellvalue;
2170		},
2171
2172		// 통화(10,00,000)
2173		removeCurrFormatter : function(cellvalue, options) {
2174			cellvalue = cellvalue.replace(/,/g, '');
2175			return cellvalue;
2176		},
2177
2178		passFormat : function(cellvalue, options, rowObject) {
2179			return '**********';
2180		},
2181		//-- 20161101 고용혁 추가. -- start//
2182		//--------- 여권 --------------- 한글성명.//
2183		nameFormat : function(cellvalue, options) {
2184			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2185				return '';
2186			}
2187			if (cellvalue.length == 2) {
2188				cellvalue = cellvalue.substring(0, 1) + '*';
2189			}else if (cellvalue.length == 3) {
2190				cellvalue = cellvalue.substring(0, 1) + '*' +cellvalue.substring(2,3);
2191			}else if (cellvalue.length == 4) {
2192				cellvalue = cellvalue.substring(0, 2) + '**';
2193			}else if (cellvalue.length == 5) {
2194				cellvalue = cellvalue.substring(0, 1) + '**' +cellvalue.substring(3,5);
2195			}else if (cellvalue.length == 6) {
2196				cellvalue = cellvalue.substring(0, 1) + '**' +cellvalue.substring(3,6);
2197			}else if (cellvalue.length > 6) {
2198				cellvalue = cellvalue.substring(0, 1) + '**' +cellvalue.substring(3,cellvalue.length);
2199			}
2200			return cellvalue;
2201		},
2202		eFirstNmFormat : function(cellvalue, options, rowObject) {
2203			return '******';
2204		},
2205		nFirstNmFormat : function(cellvalue, options, rowObject) {
2206			cellvalue = "";
2207			return cellvalue;
2208		},
2209		ppFormat : function(cellvalue, options, rowObject) {
2210			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2211				return '';
2212			}
2213/*			if (cellvalue.length == 9) {
2214				cellvalue = cellvalue.substring(0,5) + '***';
2215			}else if (cellvalue.length > 9) {
2216				cellvalue = cellvalue.substring(0,5) + '***';
2217			}else if (cellvalue.length < 9) {
2218				cellvalue = cellvalue.substring(0,5) + '***';
2219			}*/
2220			if(cellvalue.length == 9 || cellvalue.length >= 8){
2221				cellvalue = cellvalue.substring(0,cellvalue.length -4) + '****';
2222			}else if(cellvalue.length < 6){
2223				cellvalue = cellvalue.substring(0,cellvalue.length -3) + '***';
2224			}else if(cellvalue.length < 4){
2225				cellvalue =  '***';
2226			}
2227
2228			return cellvalue;
2229		},
2230		//--------- 목적지  ---------------//
2231		addrFormat : function(cellvalue, options, rowObject) {
2232			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2233				return '';
2234			}
2235			cellvalue = cellvalue.substring(0,5) + '******';
2236			return cellvalue;
2237		},
2238		zipFormat : function(cellvalue, options, rowObject) {
2239			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2240				return '';
2241			}
2242			cellvalue = cellvalue.substring(0,cellvalue.length-2) + '**';
2243			return cellvalue;
2244		},
2245		stayFormat : function(cellvalue, options, rowObject) {
2246			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2247				return '';
2248			}
2249			if(cellvalue.length == 1){
2250				cellvalue = '*';
2251			}else if(cellvalue.length == 2){
2252				cellvalue = cellvalue.substring(0,1) + '*';
2253			}else if(cellvalue.length >= 3){
2254				cellvalue = cellvalue.substring(0,cellvalue.length-2) + '**';
2255			}
2256			return cellvalue;
2257		},
2258		//MR,MS 등 붙었을 경우. ' '으로 체크
2259		maskFormat : function(cellvalue, options, rowObject) {
2260			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2261				return '';
2262			}
2263
2264			var name = cellvalue.substring(0,cellvalue.indexOf(' ')-1);
2265			var nameH;
2266			if(name.length == 2){
2267				nameH = cellvalue.substring(cellvalue.indexOf(' '),cellvalue.length);
2268				cellvalue = name.substring(0,name.length-1) + '*' + nameH;
2269			}else if(name.length == 3){
2270				nameH = cellvalue.substring(cellvalue.indexOf(' '),cellvalue.length);
2271				cellvalue = name.substring(0,name.length-2) + '**' + nameH;
2272			}else if(name.length == 4){
2273				nameH = cellvalue.substring(cellvalue.indexOf(' '),cellvalue.length);
2274				cellvalue = name.substring(0,name.length-3) + '***' + nameH;
2275			}else if(name.length > 4){
2276				nameH = cellvalue.substring(cellvalue.indexOf(' '),cellvalue.length);
2277				cellvalue = name.substring(0,name.length-4) + '****' + nameH;
2278			}
2279
2280			return cellvalue;
2281		}
2282		,phoneFormat : function(cellvalue, options, rowObject) {
2283			if (typeof cellvalue == 'undefined' || cellvalue == null || cellvalue.length == 0 || cellvalue == 'null') {
2284				return '';
2285			}
2286
2287			//010-1234-5678
2288			if(cellvalue.indexOf('-') != -1){
2289				cellvalue = cellvalue.replace(/-/g,'');
2290				cellvalue = cellvalue.substring(0,3)+'-****-'+cellvalue.substring(cellvalue.length-4);
2291
2292			//01012345678
2293			}else{
2294				cellvalue = cellvalue.substring(0,3)+'****'+cellvalue.substring(cellvalue.length-4);
2295			}
2296			return cellvalue;
2297		}
2298		//-- 20161101 고용혁 추가. -- end//
2299	};
2300
2301	$.gridvalidate = {
2302		require : function(value, colname) {
2303			if (typeof value == 'undefined' || value == '' || value == null) {
2304				return [ false, colname + '는(은) 필수 입력항목입니다.' ];
2305			} else {
2306				return [ true, '' ];
2307			}
2308		},
2309
2310		minvalue : function(value, colname, limitVal) {
2311			if (typeof value != 'undefined' && value != '' && value != null) {
2312				if (Number(value) < Number(limitVal)) {
2313					return [ false, colname + '의 최소값은 ' + limitVal + '입니다.' ];
2314				} else {
2315					return [ true, '' ];
2316				}
2317			} else {
2318				return [ true, '' ];
2319			}
2320		},
2321
2322		maxvalue : function(value, colname, limitVal) {
2323			if (typeof value != 'undefined' && value != '' && value != null) {
2324				if (Number(value) > Number(limitVal)) {
2325					return [ false, colname + '의 최대값은 ' + limitVal + '입니다.' ];
2326				} else {
2327					return [ true, '' ];
2328				}
2329			} else {
2330				return [ true, '' ];
2331			}
2332		},
2333
2334		number : function(value, colname) {
2335			return [ $.util.checkNumber(value), colname + '는(은) 숫자만 입력 가능합니다.' ];
2336		},
2337
2338		minusnumber : function(value, colname) {
2339			return [ $.util.checkNumber(value, "-"), colname + '는(은) 숫자만 입력 가능합니다.' ];
2340		},
2341		
2342		commanumber : function(value, colname) {
2343			return [ $.util.checkNumber(value, "."), colname + '는(은) 숫자만 입력 가능합니다.' ];
2344		},
2345
2346		minlength : function(value, colname, limitVal) {
2347			if (value.length < Number(limitVal)) {
2348				return [ false, colname + '의 최소 입력 자리수는 ' + limitVal + '입니다.' ];
2349			} else {
2350				return [ true, '' ];
2351			}
2352		},
2353
2354		maxlength : function(value, colname, limitVal) {
2355			if (value.length > Number(limitVal)) {
2356				return [ false, colname + '의 최대 입력 자리수는 ' + limitVal + '입니다.' ];
2357			} else {
2358				return [ true, '' ];
2359			}
2360		},
2361
2362		email : function(value, colname) {
2363			if (!$.util.checkEmail(value)) {
2364				return [ false, colname + '의  이메일형식을 확인하세요' ];
2365			} else {
2366				return [ true, '' ];
2367			}
2368		},
2369
2370		password : function(value, colname) {
2371			if (!$.util.checkVofPassword(value)) {
2372				return [ false, colname + '의 형식을 확인하세요(최소:6자, 최대:16자, 영숫자특수문자혼용)' ];
2373			} else {
2374				return [ true, '' ];
2375			}
2376		},
2377
2378		alphabet : function(value, colname) {
2379			if (typeof value != 'undefined' && value != '' && value != null) {
2380				if (!$.util.checkAlphabet(value)) {
2381					return [ false, colname + '은(는) 영문만 입력가능합니다.' ];
2382				} else {
2383					return [ true, '' ];
2384				}
2385			} else {
2386				return [ true, '' ];
2387			}
2388
2389		},
2390
2391		alphabetnumber : function(value, colname) {
2392			if (!$.util.checkAlphabetNumber(value)) {
2393				return [ false, colname + '은(는) 영문과 숫자만 입력가능합니다.' ];
2394			} else {
2395				return [ true, '' ];
2396			}
2397		},
2398
2399		loweralphabetnumber : function(value, colname) {
2400			if (!$.util.checkLowerAlphabetNumber(value)) {
2401				return [ false, colname + '은(는) 소문자영문과 숫자만 입력가능합니다.' ];
2402			} else {
2403				return [ true, '' ];
2404			}
2405		},
2406		upperalphabetnumber : function(value, colname) {
2407			if (!$.util.checkUpperAlphabetNumber(value)) {
2408				return [ false, colname + '은(는) 대문자영문과 숫자만 입력가능합니다.' ];
2409			} else {
2410				return [ true, '' ];
2411			}
2412		},
2413
2414		upperalphabet : function(value, colname) {
2415			if (!$.util.checkUpperAlphabet(value)) {
2416				return [ false, colname + '은(는) 대문자영문만 입력가능합니다.' ];
2417			} else {
2418				return [ true, '' ];
2419			}
2420		},
2421
2422		upperalphabetcomma : function(value, colname) {
2423			if (!$.util.checkUpperAlphabetComma(value)) {
2424				return [ false, colname + '은(는) 대문자영문와 콤마(,)만 입력가능합니다.' ];
2425			} else {
2426				return [ true, '' ];
2427			}
2428		},
2429
2430		// checkupperalphabetnumberat : function(value, colname) {
2431		// if (!$.util.checkUpperAlphabet
2431NumberAt(value)) {
2432		// return [ false, colname + '은(는) 대문자영문과 숫자만 입력가능합니다(@포함).' ]; // @포함
2433		// } else {
2434		// return [ true, '' ];
2435		// }
2436		// },
2437		// groupcode : function(value, colname) { // by sykim 2014.04.11
2438		// if (value.indexOf("@A") != 3 && value.indexOf("@C") != 3) {
2439		// return [ false, colname + '은(는) 3문자 + "@A" or 3문자 + "@C"형태이어야 합니다.' ];
2440		// } else {
2441		// return [ true, '' ];
2442		// }
2443		// },
2444		isdate : function(value, colname) { // 날짜 validate 추가
2445			var dateArr = $.util.isDateGrid(value, colname);
2446			if (!dateArr[1]) {
2447				return [ false, dateArr[0] ];
2448			} else {
2449				return [ true, '' ];
2450			}
2451		},
2452		istime : function(value, colname) { // 시간 validate 추가
2453			var timeArr = $.util.checkTime(value, colname);
2454			if (!timeArr[1]) {
2455				return [ false, timeArr[0] ];
2456			} else {
2457				return [ true, '' ];
2458			}
2459		}
2460
2461	};
2462})(jQuery);
2463
2464(function($) {
2465	$.tagUtil = {
2466		/*----------------------------------------------------------------------------------*
2467		 * Function : gfn_replaceTag
2468		 * Desc : tag 제거
2469		 * Parameter : strcontents(문자열)
2470		 * Return : 변환 문자열
2471		 * ----------------------------------------------------------------------------------*/
2472		gfn_replaceTag : function(strcontents) {
2473			var replaceStr = "";
2474			if (strcontents == null || strcontents == "") {
2475				return replaceStr;
2476			}
2477			replaceStr = new String(strcontents).replace(/&/ig, "&amp;"); // 먼저 변환해야함
2478			replaceStr = new String(replaceStr).replace(/\"/ig, "&quot;");
2479			replaceStr = new String(replaceStr).replace(/</ig, "&lt;");
2480			replaceStr = new String(replaceStr).replace(/>/ig, "&gt;");
2481			replaceStr = new String(replaceStr).replace(/�/ig, "");  //DLE
2482			replaceStr = new String(replaceStr).replace(/�/ig, "");  //GS
2483			replaceStr = new String(replaceStr).replace(/�/ig, "");  //FS
2484			replaceStr = new String(replaceStr).replace(/��/ig, "");  //<
2485
2486			return replaceStr;
2487		},
2488
2489		/*----------------------------------------------------------------------------------*
2490		 * Function : gfn_replaceBrTag
2491		 * Desc : 개행문자를  <br> 로변환
2492		 * Parameter : strcontents(문자열)
2493		 * Return : 변환 문자열
2494		 * ----------------------------------------------------------------------------------*/
2495		gfn_replaceBrTag : function(strcontents) {
2496			var replaceStr = "";
2497			if (strcontents == null || strcontents == "") {
2498				return replaceStr;
2499			}
2500			replaceStr = new String(strcontents).replace(/\n/ig, '<br>');
2501			return replaceStr;
2502		},
2503		/*----------------------------------------------------------------------------------*
2504		 * Function : gfn_replaceXssTag
2505		 * Desc : orgStr 바꾸기를 원하는 Html 로변환
2506		 * Parameter : strcontents(문자열)
2507		 * Return : 변환 문자열
2508		 * ----------------------------------------------------------------------------------*/
2509		gfn_replaceXssTag : function(strcontents) {
2510			var replaceStr = "";
2511			if (strcontents == null || strcontents == "") {
2512				return replaceStr;
2513			}
2514			replaceStr = strcontents;
2515
2516			replaceStr = new String(replaceStr).replace(/<SCRIPT[^>]*>/ig, '<!--<x-SCRIPT>');
2517			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*SCRIPT[\t\n\r ]*>/ig, '<!--<x-SCRIPT>');
2518			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*STYLE[^>]*>/ig, '<!--<x-style>-->');
2519			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*IFRAME[^>]*>/ig, '<!--<x-iframe>-->');
2520			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*FRAME[^>]*>/ig, '<!--<x-frame>-->');
2521			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*OBJECT[^>]*>/ig, '<!--<x-object>-->');
2522			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*FORM[^>]*>/ig, '<!--<x-form>-->');
2523			replaceStr = new String(replaceStr).replace(/<[\t\n\r ]*INPUT/ig, '<x-input');
2524
2525			return replaceStr;
2526		}
2527
2528	};
2529})(jQuery);

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.