PageSourceSearch

https://mportal.cau.ac.kr/common/js/portalCommon.js

js cau.ac.kr collected 2026-09-24 08:43:52 UTC 25,409 bytes, 1,027 lines download raw bytes

1//팝업관련상수
2window.POPUP = {
3	'OZ_WIDTH' : 900,
4	'OZ_HEIGHT' : 800
5};
6String.prototype.toUnicode = function(){
7    var result = "";
8    for(var i = 0; i < this.length; i++){
9        // Assumption: all characters are < 0xffff
10        result += "\\u" + ("000" + this[i].charCodeAt(0).toString(16)).substr(-4);
11    }
12    return result;
13};
14
15$.downloadFile = function(url, data, method){
16    if( url && data ){
17        //data can be string of parameters or array/object
18
19		if( typeof data === 'object' ) {
20			var arr = [];
21			for( var key in data ) {
22				arr.push(key + "=" +  data[key]);
23			}
24			data = arr.join("&");
25		}
26
27		try {
28			var arr1 = [];
29		    $.each( data.split("&"), function(){
30		    	var pair = this.split("=");
31		    	arr1.push(pair[0] + "=" + btoa(unescape(encodeURIComponent(pair[1]))));
32			});
33			if ( isAndroidNativeApp() ) {
34				Android.requestDownload(url, arr1.join("&") );
35				return false;
36			}
37
38			if( isIosWebView() ){
39                webkit.messageHandlers.downloadHandler.postMessage(JSON.stringify({
40					result : {
41						url : url,
42						data : arr1.join("&")
43					}
44				}));
45				return false;
46			}
47		} catch ( e ) {
48			console.log('error');
49		}
50
51        //split params into form inputs
52        var inputs = '';
53        jQuery.each(data.split('&'), function(){
54            var pair = this.split('=');
55            inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ btoa(unescape(encodeURIComponent(pair[1]))) +'" />';
56        });
57        //send request
58        jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
59            .appendTo('body').submit().remove();
60    };
61
62};
63
64$.downloadFile3 = function(url, data, method){debugger;
65    if( url && data ){
66        //data can be string of parameters or array/object
67
68		if( typeof data === 'object' ) {
69			var arr = [];
70			for( var key in data ) {
71				arr.push(key + "=" +  data[key]);
72			}
73			data = arr.join("&");
74		}
75
76        //split params into form inputs
77        var inputs = '';
78        jQuery.each(data.split('&'), function(){
79            var pair = this.split('=');
80            inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
81        });
82        //send request
83        jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
84            .appendTo('body').submit().remove();
85    };
86
87};
88/*
89 * PKM`s 라이브러리 
90 * @author PKM : [email protected]
91 */
92var gfnc_transaction = function(url, params, callback, async, dataType) {
93	async = (async === false) ? false : true;
94	if(async) gfnc_Progress(true);
95	params = params ? params : {};
96
97	if(!callback) {
98		callback = gfnc_afterCallBack;
99	}
100
101	$.ajax({
102		type: "POST",
103		url: url,
104		dataType: dataType ? dataType : "json",
105		data: JSON.stringify(params),
106		async: async,
107		contentType: "application/json; charset=utf-8",
108		success: function(data, status) {
109			if(data.result == "error") {
110				alert(_ERR_LOGIC + "\n" + data.msg);
111			} else {
112				callback(data);
113			}
114
115			if(this.async) {
116				if(async) gfnc_Progress(false);
117			}
118
119		},
120		error : function(request, status, error) {
121			alert(_ERR_AJAX_IO + "\n" + request.status + " : " + error);
122			if (async) gfnc_Progress(false);
123		}
124	});
125};
126
127function gfnc_afterCallBack(code, record) {
128	gfnc_Progress(false);
129	return;
130}
131var mak = true;
132
133
134function gfnc_Progress(flag) {
135	if(flag){
136		if(mak){
137			$("#maLoading").addClass("ma-show");
138			mak = false;
139		};
140		//modal("modalProcessing", "show");
141	}else{
142		if(!mak){
143			$("#maLoading").removeClass("ma-show");
144			mak = true;
145		}
146
147		//modal("modalProcessing", "hide");
148	}
149}
150
151function modal(id, value)
152{
153	$("#" + id).modal(value);
154}
155
156var setEditor = function(editorId, height, minHeight, maxHeight, focus)
157{
158	$("#" + editorId).summernote({
159		lang: "ko-KR",
160		height: height,
161		minHeight: minHeight,
162		maxHeight: maxHeight,
163		focus: focus,
164		dialogsFade: true,
165		placeholder: "내용을 입력하세요",
166		fontNames: ["NanumGothic", "NanumGothicBold"],
167		fontNamesIgnoreCheck: ["NanumGothic", "NanumGothicBold"],
168		toolbar: [
169		          ["style", ["style"]],
170		          ["fontsize", ["fontsize"]],
171		          ["color", ["color"]],
172		          ["font", ["bold", "italic", "underline", "strikethrough", "superscript", "subscript", "clear"]],
173		          ["paragraph", ["ul", "ol", "paragraph", "height"]],
174		          ["misc", ["undo", "redo"]]
175		        ],
176		callbacks: {
177			onImageUpload: function(files)
178			{
179				for(var i = 0; i < files.length; i++)
180				{
181					sendFile(files[i], editorId);
182				}
183			}
184		}
185	});
186};
187
188var sendFile = function(file, editorId)
189{
190	modal("modalProcessing", "show");
191
192	var data = new FormData();
193	data.append("file", file);
194	data.append("type", "summernote");
195
196	$.ajax({
197		type: "POST",
198		url: "/file/upload.ajax",
199		cache: false,
200		dataType: "json",
201		processData: false,
202		async: true,
203		contentType: false,
204		data: data,
205		success: function(data, status)
206		{
207			if(data.result == "error")
208			{
209				if(data.errorType == "ext")
210				{
211					alert(_MSG_WRONG_FILE_EXT_SUMMERNOTE + "\n업로드 제외 파일 : " + data.fileName);
212				}
213				else if(data.errorType == "size")
214				{
215					alert(_MSG_WRONG_FILE_SIZE_SUMMERNOTE + "\n업로드 제외 파일 : " + data.fileName);
216				}
217				else
218				{
219					alert(_ERR_LOGIC + "\n" + data.msg);
220				}
221			}
222			else
223			{
224				$("#" + editorId).summernote("insertImage", data.fileFullPath);
225			}
226
227			modal("modalProcessing", "hide");
228		},
229		error: function(request, status, statusText)
230		{
231			alert(_ERR_AJAX_IO + "\n" + request.status + " : " + statusText);
232
233			modal("modalProcessing", "hide");
234		}
235	});
236};
237
238var axjFileUpload = function(targetId, fileFolder, pageMode, fileKey, fileCnt, fileSize)
239{
240	myUpload[targetId].setConfig({
241		targetID: targetId,
242		targetButtonClass: "Red",
243		uploadFileName: "file",
244		// file_types: "image/*", //audio/*|video/*|image/*|MIME_type (accept)
245		dropBoxID: targetId + "QueueBox",
246		queueBoxID: targetId + "QueueBox",
247		// queueBoxAppendType: "(prepend || append)",
248		onClickUploadedItem: function() // 업로드된 목록을 클릭했을 때.
249		{
250			$("#fileModifyName").val(this.fileModifyName);
251			$("#fileOriginName").val(this.fileOriginName);
252			$("#fileFolder").val(this.fileFolder);
253			var form = document.fileDownloadForm;
254			form.action = "/file/download.do";
255			form.submit();
256		},
257		uploadMaxFileSize: (fileSize || 31457280), // 업로드될 개별 파일 사이즈.
258		uploadMaxFileCount: fileCnt, // 업로드될 파일갯수 제한 0 은 무제한.
259		uploadUrl: "/file/upload.ajax",
260		uploadPars: {type: "axj", fileFolder: fileFolder},
261		deleteUrl: "/file/delete.ajax",
262		deletePars: {type: pageMode, fileFolder: fileFolder},
263		buttonTxt: "파일선택",
264		fileKeys: { // 서버에서 리턴하는 json key 정의 (id는 예약어 사용할 수 없음)
265			name: "fileOriginName",
266			type: "fileExt",
267			saveName: "fileModifyName",
268			fileSize: "fileSize",
269			uploadedPath: "fileFullPath",
270			thumbPath: "fileFullPath",
271			fileFolder: "fileFolder" // 서버에서 키값을 다르게 설정 할 수 있다는 것을 확인 하기 위해 이름을 다르게 처리한 예제 입니다.
272		},
273		onbeforeFileSelect: function()
274		{
275			return true;
276		},
277		onUpload: function()
278		{},
279		onComplete: function()
280		{
281			modal("modalProcessing", "hide");
282		},
283		onStart: function()
284		{
285			modal("modalProcessing", "show");
286		},
287		onDelete: function(fileInfo)
288		{
289			var uploadedList = myUpload[targetId].uploadedList;
290			for(var i = 0; i < uploadedList.length; i++)
291			{
292				if(fileInfo._id_ == uploadedList[i]._id_)
293				{
294					uploadedList.splice(i, 1);
295				}
296			}
297		},
298		onError: function(errorType, extData)
299		{
300			if(errorType == "html5Support")
301			{
302				// alert("브라우저 지원안함.");
303			}
304			else if(errorType == "fileSize")
305			{
306				//alert(_MSG_WRONG_FILE_SIZE_AXJ + "\n업로드 제외 파일 : " + extData.name);
307				//alert(_MSG_WRONG_FILE_SIZE_AXJ);
308				alert('업로드 파일의 사이즈는 ' + calculateToBytes(fileSize) + 'MB를 초과할 수 없습니다.');
309			}
310			else if(errorType == "fileCount")
311			{
312				// alert("업로드 갯수 초과 초과된 아이템은 업로드 되지 않습니다.");
313			}
314			else
315			{
316				alert("알수없음.");
317			}
318			modal("modalProcessing", "hide");
319		}
320	});
321
322	// 서버에 저장된 파일 목록을 불러와 업로드된 목록에 추가 합니다. ----------------------------- s
323	if(pageMode == "modify")
324	{
325		var url = "/file/list.ajax";
326		var pars = "fileKey=" + fileKey;
327		new AXReq(url, {pars:pars, onsucc:function(res){
328			if(res.result == "ok")
329			{
330				myUpload[targetId].setUploadedList(res.fileList);
331			}
332			else
333			{
334				alert(_ERR_FILE_LIST + "\n" + res.msg);
335			}
336		}});
337	}
338	// 서버에 저장된 파일 목록을 불러와 업로드된 목록에 추가 합니다. ----------------------------- e
339};
340
341function toPrint(id, mode, title, close)
342{
343	var printOption = {
344			/*
345			 * printMode : 팝업설정. popup = 팝업창, iframe = iframe
346			 * pageTitle : 인쇄 타이틀.
347			 * leaveOpen : 인쇄 후 창닫기. false = 인쇄후 창닫기.
348			 */
349			printMode: mode,
350			pageTitle: title,
351			leaveOpen: close};
352
353	$("#" + id).printElement(printOption);
354}
355
356function checkFirstAlp(str){
357	if(str === "" || str === undefined || str === null){
358		return false;
359	}
360	
361	var re = /^[a-zA-Z]/	
362	if(!re.test(str)){
363		return false;
364	}
365	
366	return true;
367}
368
369function onlyAlpNum() // 숫자와 영문자만 입력 허용.
370{
371	if((event.keyCode < 48) || ((event.keyCode > 57) && (event.keyCode < 65)) || ((event.keyCode > 90) && (event.keyCode < 97)) || (event.keyCode > 122))
372	{
373		if(navigator.appName == "Netscape")
374		{
375			event.preventDefault();
376		}
377		else
378		{
379			event.returnValue = false;
380		}
381	}
382}
383
384function onlyNum() // 숫자만 입력 허용.
385{
386	if((event.keyCode < 48) || (event.keyCode > 57))
387	{
388		if(navigator.appName == "Netscape")
389		{
390			event.preventDefault();
391		}
392		else
393		{
394			event.returnValue = false;
395		}
396	}
397}
398
399function onlyHangul() // 한글만 입력 허용.
400{
401	if((event.keyCode < 12592) || (event.keyCode > 12687))
402	{
403		if(navigator.appName=="Netscape")
404		{
405			event.preventDefault();
406		}
407		else
408		{
409			event.returnValue = false;
410		}
411	}
412}
413
414function dataNullCheck(value) // Input Data Null 체크 여부.
415{
416	var temp = $.trim(value);
417	
418	if(temp === "" || temp === undefined || temp === null)
419	{
420		return true;
421	}
422	else
423	{
424		return false;
425	}
426}
427
428function dataNullAndLengthCheck(value, num) // Input Data Null 체크, 입력 값 길이 체크.
429{
430	var temp = $.trim(value);
431
432	if(temp === "" || temp === undefined || temp === null)
433	{
434		return true;
435	}
436	else
437	{
438		if(temp.length >= num)
439		{
440			return false;
441		}
442		else
443		{
444			return true;
445		}
446
447		return false;
448	}
449}
450
451function isValidEmail(email) // 이메일 형식 검사.
452{
453	var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
454	if(email.search(format) != -1)
455	{
456		return true; // 올바른 포맷 형식.
457	}
458
459	return false;
460}
461
462function specialStrReplace(text) // html 태그 xss처리.
463{
464	return text.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;").replace(/\'/g, "&apos;").replace(/\r\n|\r|\n/g, "<br/>\n");
465}
466
467function getToday()
468{
469	var date = new Date();
470
471	return (date.getFullYear()).toString() + (("00" + (date.getMonth() + 1).toString()).slice(-2)) + ("00" + (date.getDate()).toString()).slice(-2);
472}
473
474function getDate(currentDate, type, calVal) // YYYYMMDD 형식.
475{
476	var year = Number(currentDate.substring(0, 4));
477	var month = Number(currentDate.substring(4, 6));
478	var day = Number(currentDate.substring(6, 8));
479	var monthArr = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
480
481	if(type == "year")
482	{
483		if(calVal < 0)
484		{
485			year = year - Math.abs(calVal);
486		}
487		else
488		{
489			year = year + Math.abs(calVal);
490		}
491	}
492	else if(type == "month")
493	{
494		if(calVal < 0)
495		{
496			month = month - Math.abs(calVal);
497
498			if(month == 0)
499			{
500				year = year - 1;
501				month = 12;
502			}
503		}
504		else
505		{
506			month = month + Math.abs(calVal);
507
508			if(month == 13)
509			{
510				year = year + 1;
511				month = 1;
512			}
513		}
514	}
515	else if(type == "day")
516	{
517		var tempDate = new Date(year, month - 1, day);
518
519		if(calVal < 0)
520		{
521			tempDate.setDate(tempDate.getDate() - Math.abs(calVal));
522		}
523		else
524		{
525			tempDate.setDate(tempDate.getDate() + Math.abs(calVal));
526		}
527
528		year = tempDate.getFullYear();
529		month = tempDate.getMonth() + 1;
530		day = tempDate.getDate();
531	}
532
533	if(year < 2000 || year > 2030)
534	{
535		alert(_MSG_INPUT_CALENDAR_RANGE);
536
537		return;
538	}
539
540	if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
541	{
542		monthArr[1] = "29";
543	}
544
545	if(monthArr[month -1] < day)
546	{
547		day = monthArr[month -1];
548	}
549
550	return year.toString() + (("00" + month.toString()).slice(-2)) + ("00" + day.toString()).slice(-2);
551}
552
553function calculateToBytes(bytes) // 파일싸이즈 변환.
554{
555	var s = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
556	var e = Math.floor(Math.log(bytes) / Math.log(1024));
557
558	if (e == "-Infinity")
559	{
560		return "0" + s[0];
561	}
562	else
563	{
564		//return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + s[e];
565		return (bytes / Math.pow(1024, Math.floor(e)));
566	}
567}
568
569function getDefaultGridDataSet(gridData, pageSize){
570	var pageSize = pageSize || gridData.length,
571		gridDataSet = {
572			records : gridData,
573			page : 0,
574			recordTotal : gridData.length,
575			pageSize : pageSize,
576			pageTotal : Math.ceil(gridData.length / pageSize)
577		};
578	return gridDataSet;
579}
580
581function transformTozTreeFormat(menuInfo, keyOpt){
582
583	var defaultOpt = {
584		key : "menuId",
585		parentKey : "prtMenuId",
586		childKey : "nodes"
587	};
588	
589	defaultOpt = angular.extend(defaultOpt, keyOpt);
590
591	var i,l,
592		key = defaultOpt.key || "menuId",
593		parentKey = defaultOpt.parentKey || "prtMenuId",
594		childKey = defaultOpt.childKey || "nodes",
595		sNodes = menuInfo;
596	if (!key || key=="" || !sNodes) return [];
597		
598	if(Object.prototype.toString.apply(sNodes)){
599		var r = [];
600		var tmpMap = [];
601		for (i=0, l=sNodes.length; i<l; i++) {
602			tmpMap[sNodes[i][key]] = sNodes[i];
603		}
604		for (i=0, l=sNodes.length; i<l; i++) {
605			if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
606				if (!tmpMap[sNodes[i][parentKey]][childKey])
607					tmpMap[sNodes[i][parentKey]][childKey] = [];
608				tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
609			} else {
610				r.push(sNodes[i]);
611			}
612		}
613		return r;
614	}else {
615		return [sNodes];
616	}
617}
618
619function clone(obj) {
620	if (obj === null || typeof(obj) !== 'object')
621		return obj;
622
623	var copy = obj.constructor();
624
625	for (var attr in obj) {
626		if (obj.hasOwnProperty(attr)) {
627			copy[attr] = obj[attr];
628		}
629	}
630
631	return copy;
632}
633
634// 공통 엑셀 다운로드 
635function portalExcelDownload(fileName, columns, data, style){
636	//
637	// // null data 공백으로 치환
638	// angular.forEach(data, function(row){
639	// 	angular.forEach(row, function(column, key){
640	// 		if( column === null || typeof column === "undefined" ){
641	// 			row[key] = '';
642	// 		}
643	// 	});
644	// });
645	//
646	var tempData = angular.copy(data);
647	var excelData =[];
648	var cnt = columns.length;
649
650	for(var i = 0; i < cnt ; i++){
651		excelData.push(columns[i].columnid)
652	}
653	// null data 공백으로 치환
654	angular.forEach(tempData, function(row){
655		angular.forEach(row, function(column, key){
656			if( column === null || typeof column === "undefined" ){
657				row[key] = '';
658			}
659			for(var i = 0; i < cnt ; i++){
660				if(columns[i].columnid===key){
661					row[columns[i].title] = row[key];
662					delete row[key];
663				}
664
665				if(excelData.indexOf(key) == -1) {
666					delete row[key];
667				}
668			}
669		});
670	});
671	var defaultStyle = {
672		sheetid: fileName + ' Sheet',
673		headers: true,
674		/*column: {
675          style:'font-size:12px;background:pink'
676        },*/
677		columns: columns
678	};
679	alasql('SELECT * INTO XLSX("' + fileName + '.xlsx",?) FROM ?',[defaultStyle, tempData]);
680}
681
682//기간 계산
683function getPeriod(startDate, endDate) {
684	return moment(endDate).diff(moment(startDate), 'days') + 1;
685}
686
687function submitWithJson(obj, data, target, method) {
688    try {
689        var param = null;       
690        // json object이라면
691        if ( obj && Object.prototype.toString.call(obj) === '[object Object]' ) {
692            param = {
693                 'url'     : obj.url                 || ''
694                ,'data'    : obj.data                || {}
695                ,'target'  : obj.target              || '_self'
696                ,'method'  : obj.method              || 'POST'
697            };
698        }
699        else {
700            param = {
701                 'url'     : obj                     || ''
702                ,'data'    : data                    || {}
703                ,'target'  : target                  || '_self'
704                ,'method'  : method                  || 'POST'
705            }; 
706        }
707         
708        //랜덤한 수를 출력
709        var curDate   = new Date();
710        var ranNumber = Math.floor(Math.random() * 10000) + 1;
711        var strId = "";
712            strId += param.target;
713            strId += "_";           
714            strId += curDate.getFullYear();
715            strId += curDate.getMonth();
716            strId += curDate.getDay();
717            strId += curDate.getHours();
718            strId += curDate.getMinutes();
719            strId += curDate.getSeconds();
720            strId += "_" + ranNumber;
721             
722        var $newForm = jQuery("<form></form>")
723                        .attr("name"  , strId)
724                        .attr("id"    , strId)
725                        .attr("method", param.method);
726        if ( $newForm ) {
727            if ( Object.prototype.toString.call(param.data) === "[object Array]") {
728                jQuery.each(param.data, function(index, val) {
729                    var row = val;
730                    jQuery.each(row, function(key, val) { 
731                        jQuery("<input type='hidden'>")
732                            .attr("name" , key)
733                            .attr("value", val)
734                            .appendTo($newForm);
735                    });
736                });
737                $newForm.appendTo(document.body);
738            }
739            else {
740                jQuery.each(param.data, function(key, val) { 
741                	jQuery("<input type='hidden'>")
742                        .attr("name" , key)
743                        .attr("id"   , key)
744                        .attr("value", val)
745                        .appendTo($newForm);
746                });
747                $newForm.appendTo(document.body);               
748            }
749     
750            var myForm = $newForm[0];
751            myForm.action = param.url;
752            myForm.method = param.method;
753            myForm.target = param.target;
754             
755            myForm.submit();
756            $newForm.remove();
757        }//if ( $popForm ) {
758    }
759    catch (e) {alert(e.message);}
760    finally   {}
761}
762
763//브라우저 세션 스토리지에 검색조건 set
764function setSearchInfo(searchKey, searchInfo, tableParams){
765	var params = {};
766	if(tableParams && tableParams.page()){
767		searchInfo.page = tableParams.page();
768	}
769	params[searchKey] = searchInfo;
770	sessionStorage.setItem('searchInfo', JSON.stringify(params[searchKey]));
771}
772
773//브라우저 세션 스토리지에 검색조건 get
774function getSearchInfo(searchKey){
775	var searchInfo = JSON.parse(sessionStorage.getItem('searchInfo'));
776	if(searchInfo){
777		searchInfo[searchKey];
778	}
779	return searchInfo;
780}
781
782//모바일 접속 여부
783function checkMobile(){
784	if(navigator.userAgent.match(/Android|Mobile|iP(hone|od|ad)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)){
785		return true;
786	}else{
787		return false;
788	}
789}
790
791function getMapData( data, defaultField, targetField, val ){
792   for( var i = 0 ; i < data.length ; i ++ ){
793      if( data[i][defaultField] == val ){
794         return data[i][targetField];
795      }
796   }
797}
798function validateEmail(email) {
799    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
800    return re.test(email);
801}
802function numberWithCommas(x) {
803	if( dataNullCheck(x) ) return 0;
804    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
805}
806function formatZipNumber( zipNumber ){
807    zipNumber = zipNumber.trim();
808
809	if( dataNullCheck(zipNumber) || !( zipNumber.length == 5 || zipNumber.length == 6)){
810		return "";
811	}
812
813	if( zipNumber.length === 5 ) {
814		return zipNumber;
815	}
816
817	if ( zipNumber.length === 6 ) {
818		return zipNumber.substr(0,3) + "-" + zipNumber.substr(3);
819	}
820
821	return "";
822}
823function fn_tis_comm_getDate( objDate )
824{
825    var	rtnDate;
826    var strYear, strMonth, strDay;
827
828    strYear = objDate.getFullYear();
829
830    if( objDate.getMonth() < 9 ) {
831        strMonth = '0' + (objDate.getMonth()+1);
832    }else {
833        strMonth = objDate.getMonth() + 1;
834    }
835    if( objDate.getDate() < 9 ) {
836        strDay = '0' + objDate.getDate();
837    }else {
838        strDay = objDate.getDate();
839    }
840    return strYear.toString() + strMonth.toString() + strDay.toString();
841
842    return	rtnDate;
843}
844function fn_tis_comm_ems2_pop( targetKey, loginDt, l_empno )
845{
846    targetKey = targetKey.replace(/=/g,"$");
847    //loginDt = loginDt.replace(/=/g,"$");
848    l_empno = l_empno.replace(/=/g,"$");
849    //alert( "temp_emp_no=" + temp_emp_no  +  "l_empno=" + l_emp_no );
850
851    encodeURIComponent(targetKey);
852    //encodeURIComponent(loginDt);
853    encodeURIComponent(l_empno);
854    //window.open( "/Upload/COMM/ems/cauwebsso.html?type=7&target_key=" + targetKey + "&login_dt=" + loginDt + "&login_id=" + l_empno, 'ems2', 'width=900,height=700,status=no,toolbar=no,menubar=no,scrollbars=yes' );
855    window.open( "/html/ems/cauwebsso.html?type=7&target_key=" + targetKey + "&emp_no=" + l_empno, 'ems2', 'width=1100,height=750,scrollbars=yes' );
856}
857
858//실수형 변환
859function getParseFloat(inputValue, defaultValue){
860	var result = parseFloat(inputValue);
861	if(isNaN(result)){
862		return defaultValue;
863	}else{
864		return result;
865	}
866}
867
868function gridDateFormat( value ){
869	if( dataNullCheck(value ) ) return "";
870
871	if( value.length == 8){
872		return getDateFormat("YYYYMMDD", value, "YYYY.MM.DD" ).replace("Invalid date", "");
873	} else {
874		return getDateFormatDefault(value).replace("Invalid date", "");
875	}
876}
877
878function gridNumberFormat( value ){
879    if( dataNullCheck(value ) ) return 0;
880
881    return numberWithCommas(value);
882}
883
884function gridSummaryNumberFormat( method, value ){
885    if( dataNullCheck(value ) ) return 0;
886
887    return numberWithCommas(value);
888}
889function getDateFormat(sourceFormat, input, targetFormat ){
890	targetFormat = targetFormat || "YYYY.MM.DD";
891	return moment(input, sourceFormat).format(targetFormat);
892}
893
894function getDateFormatDefault(input){
895	return moment(input).format('YYYY.MM.DD');
896}
897
898function getStringToDateFormat(input){
899	return moment(input).format('YYYY.MM.DD')+" "+moment(input).format('HH:mm:ss');
900}
901function trim( str ){
902	if( dataNullCheck(str) ){
903		return "";
904	}
905	return str.trim();
906}
907
908String.prototype.byteLength = function() {
909    var l= 0;
910
911    for(var idx=0; idx < this.length; idx++) {
912        var c = escape(this.charAt(idx));
913
914        if( c.length==1 ) l ++;
915        else if( c.indexOf("%u")!=-1 ) l += 2;
916        else if( c.indexOf("%")!=-1 ) l += c.length/3;
917    }
918
919    return l;
920};
921
922String.prototype.cut = function(len) {
923    var str = this;
924    var l = 0;
925    for (var i=0; i<str.length; i++) {
926        l += (str.charCodeAt(i) > 128) ? 2 : 1;
927        if (l > len) return str.substring(0,i);
928    }
929    return str.toString();
930};
931
932
933// 포틀릿 더보기
934var ShowMore = function() {
935
936	this.show = true;
937	this.call = 0;
938	this.action = function( list, num, moreNum ) {
939		if( !Array.isArray(list) ) {
940			return null;
941		}
942
943		this.call++;
944		var _sliceNum = num || 5; // 추가할 리스트 수
945		var _moreNum = moreNum || 3; // 더보기 횟수
946		var _length = list.length;
947
948		var _returnList = list.slice(0, _sliceNum * this.call);
949		if( this.call >= _moreNum || _length - _returnList.length == 0 ) {
950			this.show = false;
951		} else {
952			this.show = true;
953		}
954
955		return _returnList;
956	};
957};
958
959var  toPortletFmt = function( portels) {
960		var data = {};
961	jQuery.each(portels, function(index, val) {
962		data[val.id]=  val;
963	});
964	return data;
965};
966
967// 이미지 to 텍스트
968function replaceImgToText(list, objNm) {
969
970	list.forEach(function( obj ){
971		obj[objNm] = obj[objNm].replace(/<img(.*?)>/gi,'<div class=\"nb-p-imageText\">[ 이미지입니다 ]</div>');
972	});
973
974	return list;
975}
976
977// unicode 변환
978function unicodeToChar(text) {
979	return text.replace(/\\u[\dA-F]{4}/gi,
980		function (match) {
981			return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
982		});
983}
984
985function formatMask(str, chr) {
986	str = str.trim();
987
988	var temp = "";
989
990	if(str != null && str.length > 1){
991		temp = str.substring(0, 1);
992		
993		for (var i = 0; i < str.length-1; i++) {
994			temp = temp + chr;
995		}
996	}else{
997		temp = str;	
998	}
999	return temp;
1000}
1001
1002function trimstring(str){
1003	 if (str.trim)
1004	  return str.trim();
1005	 else
1006	  return str.replace(/(^\s*)|(\s*$)/g, ""); //find and remove spaces from left and right hand side of string
1007}
1008function isIosWebView(){
1009    var standalone = window.navigator.standalone,
1010        userAgent = window.navigator.userAgent.toLowerCase(),
1011        safari = /safari/.test( userAgent ),
1012        ios = /macintosh|iphone|ipod|ipad/.test( userAgent );
1013
1014    if( ios ) {
1015
1016        if ( !standalone && !safari ) {
1017            return true;
1018
1019        };
1020    }
1021    return false;
1022}
1023
1024function isAndroidNativeApp(){
1025    return /cauplus\/[0-9\.]/.test(navigator.userAgent);
1026}
1027

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.