PageSourceSearch

https://tukorea.ac.kr/Web-home/js/common.js

js tukorea.ac.kr collected 2026-10-02 03:37:42 UTC 29,774 bytes, 1,170 lines download raw bytes

1
2
3//*** blockUI ***********************************************************************************//
4(function($){
5	$(window).on("load resize scroll", function() {
6		jf_blockUISizeSet();
7	});
8})(jQuery);
9
10//escape 클릭시 blockUI Close
11$(document).on('keyup',function(evt) {
12	if($('.blockMsg').size() > 0){
13		if (evt.keyCode == 27) {
14			$.unblockUI();
15			$("body").css("overflow-y","");
16		}
17	}
18});
19function jf_blockUISizeSet(){
20	if($('.blockMsg').size() > 0){
21		var w_screen = $(window).width(); //화면 가로 해상도를 구한다.
22		//창크기에 따라 변환
23		$('.blockMsg').css("width","780px");
24		if(w_screen <= 768 && w_screen > 380){
25			$('.blockMsg').css("width","90%");
26		}else if(w_screen <= 380){
27			$('.blockMsg').css("width","96%");
28		}
29		
30		
31		var widthVal = $('.blockMsg').width();
32		if(widthVal != null){
33			var leftVal = (w_screen/2)-(widthVal/2);
34			$('.blockMsg').css("left",leftVal+"px");
35		}
36		
37		var h_screen = $(window).height(); //화면 세로 해상도를 구한다.
38		var heightVal = $('.blockMsg').height();
39		if(heightVal != null){
40			var topVal = (h_screen/2)-(heightVal/2);
41			$('.blockMsg').css("top",topVal+"px");
42		}
43	}
44}
45
46$(function(){
47	$(document).on("click","._blockUI",function(){
48		if($(this).is("a")){
49			var href = $(this).attr("href");
50			//$(this).attr("target", "blockUI");
51			
52			var className = $(this).attr("class").replace("_blockUI ", "");
53			var html = 	"<div class=\"_blockInner\">"+
54						"	<a href=\"#close\" onclick=\"$.unblockUI();\" class=\"_blockClose\">close</a>"+
55						"	<iframe name=\"blockUI\" src=\""+href+"\" class='"+className+"'></iframe>"+
56						"</div>";
57			$.blockUI({
58				message:html
59			});
60			
61			var blockClass = $('.blockMsg').attr("class") + " "+className;
62			$('.blockMsg').attr("class", blockClass);
63			
64			jf_blockUISizeSet();
65			return false;
66		}
67	});
68	
69	$('.textWrap').on('click', 'div', checkFormVal);
70	
71});
72function blockUI(customTag){
73	if(customTag != null){
74		
75		if(customTag.indexOf("iframe") == -1){
76			customTag = "<div class=\"_blockWrap\">"+customTag+"</div>";
77		}
78		
79		var html = 	"<div class=\"_blockInner\">"+
80					"	<a href=\"#close\" onclick=\"$.unblockUI();\" class=\"_blockClose\">close</a>"+
81					"	"+customTag+""+
82					"</div>";
83		$.blockUI({
84			message:html
85		});
86		
87		jf_blockUISizeSet();
88	}else{
89		$.blockUI({ css: {             
90		 	border: 'none',             
91		 	padding: '15px',             
92		 	backgroundColor: '#000',             
93		 	'-webkit-border-radius': '10px',             
94		 	'-moz-border-radius': '10px',             
95		 	opacity: .5,             
96		 	color: '#fff'         
97		} }); 
98	}
99	
100}
101
102function unblockUI(){
103	$.unblockUI();
104}
105//*** blockUI ***********************************************************************************//
106
107
108
109/**
110 * <input type="text" style="ime-mode:disabled;" onKeyPress="return numbersonly(event, false)">
111 * @param e
112 * @param decimal
113 * @returns {Boolean}
114 */
115function numbersonly(e, decimal) { 
116    var key; 
117    var keychar; 
118
119    if (window.event) { 
120       // IE에서 이벤트를 확인하기 위한 설정 
121	key = window.event.keyCode; 
122    } else if (e) { 
123      // FireFox에서 이벤트를 확인하기 위한 설정 
124	key = e.which; 
125    } else { 
126	return true; 
127    } 
128
129    keychar = String.fromCharCode(key); 
130    if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) 
131	    || (key == 27) || (key == 45)) { 
132	return true; 
133    } else if ((("0123456789").indexOf(keychar) > -1)) { 
134	return true; 
135    } else if (decimal && (keychar == ".")) { 
136	return true; 
137    } else 
138	return false; 
139}
140
141function trim(str) {  
142	if(str != null){
143		return str.replace( /(^\s*)|(\s*$)/g, "" );  
144	}
145	return str;
146} 
147
148function jf_ajaxSubmit(form) {
149	var isChecked = true;
150	var submitUrl = $(form).attr("action");
151	var formData2 = {};
152	var formData = $(form).serializeArray();
153	$(formData).each(function () {
154		if(this.name == "layout"){
155			formData2[this.name] = "";
156		}else{
157			formData2[this.name] = this.value || "";
158		}
159	});
160	
161	$.ajax({
162		type:"post",
163		url:submitUrl,
164		async:false,
165		cache:false,
166		data:formData2,
167		success:function(r){
168			isChecked = r == null || r == undefined || r == "";
169			$(form).find("div._formCheck").remove();
170			if( !isChecked ) {
171				$(r).each(function() {
172					$.each(this, function(key, value) {
173						if( key.indexOf( 'duplicate_' ) == -1 ) {
174							//유효성 오류 검출시
175							var html = "";
176							html += "<div class='_formCheck'>";
177							html += "	<span class='_err'>";
178							html += "		"+value;
179							html += "	</span>";
180							html += "</div>";
181							$("#"+key).parent().addClass("check");
182							$("#"+key).after(html);
183						} else {
184							//중복 검출시
185							var html = "";
186							html += "<div class='_formCheck'>";
187							html += "	<span class='_dup'>";
188							html += "		"+value;
189							html += "	</span>";
190							html += "</div>";
191							$("#"+key).parent().addClass("check");
192							$("#"+key.replace("duplicate_", "")).after(html);
193						}
194					});
195				});
196			}
197		},
198		error:function(){
199			alert("error!");
200		}
201	});
202	
203	return isChecked;
204}
205
206function checkFormVal(){
207	$(this).siblings("input").focus();
208	$(this).remove();
209}
210
211
212var trueCheck = false;
213function confirm(message, yesCallback, noCallback) {
214	if(trueCheck){
215		return trueCheck;
216	}
217	
218	if($('#confirmDivTemp').size() == 0){
219		var html ="" +
220				"<div id='confirmDivTemp' class='_alertWrap'>" +
221				"	<div class='_alertHeader'>" +
222				"		<h2>"+ktext("k2web.confirm2")+"</h2>" +
223				"	</div>" +
224				"	<div class='_alertBody'><p class='message'></p></div>" +
225				"	<div class='_alertFooter'>" +
226				"		<input type='button' class='confirmBtnOk' value='"+ktext("k2web.yes")+"'>" +
227				"		<input type='button' class='confirmBtnCancel' value='"+ktext("k2web.no")+"'>" +
228				"	</div>" +
229				"</div>";
230		$("body").append(html);
231	}
232	$('#confirmDivTemp').modal({
233		//closeHTML: "<button title='Close' class='modal-close'>close</button>",
234		overlayId: 'confirm-overlay',
235		containerId: 'confirm-container', 
236		dataId: 'confirm-data',
237		/*onOpen: function (dialog) { 
238            dialog.overlay.fadeIn(150, function () { 
239                dialog.container.slideDown(150, function () { 
240                	dialog.data.fadeIn(150); 
241                }); 
242            }); 
243        }, */
244		onShow: function (dialog) {
245			var modal = this;
246
247			$('.message', dialog.data[0]).append(message);
248		
249			$(".confirmBtnOk").on("click", function () {
250				trueCheck = true;
251				modal.close();
252				if ($.isFunction(yesCallback)) {
253					yesCallback();
254				}
255				trueCheck = false;
256			});
257			
258			$(".confirmBtnCancel").on("click", function () {
259				trueCheck = false;
260				modal.close();
261				if ($.isFunction(noCallback)) {
262					noCallback();
263				}
264			});
265			
266			//$('.confirmBtnOk', dialog.data[0]).focus();
267		}
268	});
269	var containerHeight = $("#confirmDivTemp").height() + 10;
270	$("#confirm-container").css("height", containerHeight + "px");
271	
272	return trueCheck;
273}
274
275
276function alert(txt, okCallback){
277	/*
278	var html ="" +
279	"<div id='alertDivTemp' class='_alertWrap'>" +
280	"	<div class='_alertHeader'>" +
281	"		<h2>Message</h2>" +
282	"	</div>" +
283	"	<div class='_alertBody'><p class='alertMessage'>"+txt+"</p></div>" +
284	"	<div class='_alertFooter'>" +
285	"		<input type='button' class='alertBtnOk' value='확인' onclick=\"unblockUI();\">" +
286	"	</div>" +
287	"</div>";
288	blockUI(html);
289	*/
290	
291	if($('#alertDivTemp').size() == 0){
292		var html ="" +
293				"<div id='alertDivTemp' class='_alertWrap'>" +
294				"	<div class='_alertHeader'>" +
295				"		<h2>Message</h2>" +
296				"	</div>" +
297				"	<div class='_alertBody'><p class='alertMessage'></p></div>" +
298				"	<div class='_alertFooter'>" +
299				"		<input type='button' class='alertBtnOk' value='"+ktext("k2web.confirm")+"'>" +
300				"	</div>" +
301				"</div>";
302		$("body").append(html);
303	}
304	
305	if(txt != null && txt != "" && typeof txt == "string"){
306		txt = txt.replace(/\n/gi, "<br/>");
307	}
308	
309	$("#alertDivTemp .alertMessage").html(txt);
310	$('#alertDivTemp').modal({
311		//closeHTML: "<button title='Close' class='modal-close'>close</button>",
312		overlayId: 'simplemodal-overlay',
313		containerId: 'simplemodal-container'
314	}); // HTML
315	
316	var containerHeight = $("#alertDivTemp").height() + 10;
317	$("#simplemodal-container").css("height", containerHeight + "px");
318	
319	$(".alertBtnOk").on("click", function () {
320		if($.isFunction(okCallback)){
321			okCallback();
322			$('.simplemodal-close').click();
323		}else{
324			$('.simplemodal-close').click();
325		}
326	});
327}
328
329
330/**
331 * 공통 첨부파일 등록 폼
332 * @param num	번호
333 * @param fileType	파일타입
334 * @param siteId	사이트 아이디
335 */
336function jf_fileUploadFormCommon(num, fileType, siteId){
337	if(num == null){
338		num = 0;
339	}
340	
341	if(siteId == null){
342		siteId = "";
343	}
344	
345	/*
346	$.ajax({
347		url : kurl("/fileupload/registView"),
348		type:"post",
349		data:{
350			"num":num,
351			"fileType":fileType,
352			"siteId":siteId
353		},
354		async:false,
355		cache:false,
356		success:function(r){
357			$.blockUI({
358				message:r,
359				css:{
360					width:"400px",
361					padding:"15px",
362					border:"0px"
363				}
364			});
365		},error:function(){
366			alert("server Error");
367		}
368	});
369	*/
370	
371	if(!(typeof(window["jf_fileUploadCallback"]) == "function")){
372		alert("jf_fileUploadCallback() does not exist!");
373		return;
374	}	
375	
376	var url = kurl("/fileupload/registView") + "?num="+num+"&fileType="+fileType+"&siteId="+siteId;
377	var html = "<a href='"+url+"' class='_blockUI _blockH350' id='blockUIaTagTemp' style='display:none'>temp</a>";
378	$("body").append(html);
379	$("#blockUIaTagTemp").click();
380	$("#blockUIaTagTemp").remove();
381}
382
383var curAlt = "";
384function jf_fileUploadProcCommon(num, fileType, siteId){
385	curAlt = "";
386	var fileTag = $("#fileCommonTag");
387	var siteId = $("input[name='siteId']").val();
388	if($(fileTag).val() == ""){
389		alert(ktext("error.item.exist2", null, "k2web.select,k2web.file", siteId));
390		return;
391	}
392	
393	if(fileType == "image"){
394		//이미지 설명 필수 입력
395		curAlt = trim($("#alt").val());
396		if(curAlt == ""){
397			alert(ktext("msg.at.do3","","k2web.image.explanation,k2web.enter", siteId), function(){
398				$("#alt").focus();
399			});
400			return;
401		}
402	}
403	
404	//var fileObj = $(fileTag)[0].files[0];
405	var data = jf_fileUploadAjaxCommon(fileTag, fileType, siteId, num, "jf_fileUploadProcCommonResult");
406	jf_fileUploadProcCommonResult(data);
407}
408
409function jf_fileUploadProcCommonResult(data){
410	if(data != null && data.result){
411		var fileDir = data.fileDir;
412		var fileRename = data.fileRename;
413		var fileOrg = data.fileOrg;
414		var fileSize = data.fileSize;
415		var num = data.num;
416		
417		parent.jf_fileUploadCallback(fileDir, fileOrg, fileRename, fileSize, num, curAlt);
418		parent.unblockUI();
419	}
420}
421
422
423/**
424 * 파일 업로드
425 * @param fileObj fileObj 파일객체
426 * @param fileType fileType 업로드 타입 : image, media, 일반-""
427 * @param siteId 사이트 아이디
428 * @param num 파일 번호
429 * @param callback ie9 환경에서 iframe 파일 업로드 후 실행되어야할 함수
430 * @returns
431 */
432function jf_fileUploadAjaxCommon(fileObj, fileType, siteId, num, callback){
433	
434	if(fileObj == null){return null;}
435	if(siteId == null){
436		siteId = "";
437	}
438	if(num == null){
439		num = "";
440	}
441	var result = null;
442	if(window.FormData !== undefined){
443		// for HTML5 browsers
444		var fd = new FormData();
445		fd.append("file",fileObj[0].files[0]);
446		fd.append("fileType",fileType);
447		fd.append("siteId",siteId);
448		fd.append("num",num);
449		
450		$.ajax({
451			url: kurl("/fileupload/regist"),
452			type: "POST",
453			data: fd, 
454			async: false,
455			cache: false,
456			contentType: false,
457			processData: false,
458			success:  function(data){
459				if(data != null){
460					if(data.result){
461						result = data;
462					}else{
463						alert(data.message);
464					}
465				}
466			}
467		});
468		return result;
469		
470	}else{
471		
472		if($("#fileIframe").size() == 0){
473			$("body").append("<iframe name='fileIframe' src='#' id='fileIframe' class='hidden'/>");
474		}
475
476		var form = $(fileObj).closest("form");
477		
478		if(form == null){
479			alert("No search form tag!");
480			return;
481		}
482		
483		$(form).attr("method", "post");
484		$(form).attr("target", "fileIframe");
485		$(form).attr("enctype", "multipart/form-data");
486		$(form).attr("action",  kurl("/fileupload/regist"));
487		
488		if($(form).find("input[name='siteId']").size() == 0){
489			$(form).append("<input type='hidden' name='siteId'/>");
490		}
491		if($(form).find("input[name='fileType']").size() == 0){
492			$(form).append("<input type='hidden' name='fileType'/>");
493		}
494		if($(form).find("input[name='viewType']").size() == 0){
495			$(form).append("<input type='hidden' name='viewType' value='html'/>");
496		}
497		if($(form).find("input[name='callback']").size() == 0){
498			$(form).append("<input type='hidden' name='callback' value='"+callback+"'/>");
499		}
500		
501		$(form).find("input[name='siteId']").val(siteId);
502		$(form).find("input[name='fileType']").val(fileType);
503		
504		//*** ie9 3번 submit을 해야 전송이됨?? ****//
505		$(form).submit();
506		$(form).submit();
507		$(form).submit();
508		//*** ie9 3번 submit을 해야 전송이됨?? ****//
509		
510		$("#fileIframe").load(function(e)
511        {
512			var data = eval("("+$("#fileIframe").contents().find("body").text()+")");
513			if(data != null){ 
514				if(data.result){
515					var callback = data.callback;
516					eval(callback+"(data)");
517				}else{
518					alert(data.message);
519				}
520			}
521        });
522		
523		return null;
524	}
525	
526}
527
528function getDoc(frame) {
529    var doc = null;
530
531    // IE8 cascading access check
532    try {
533        if (frame.contentWindow) {
534            doc = frame.contentWindow.document;
535        }
536    } catch(err) {
537    }
538
539    if (doc) { // successful getting content
540        return doc;
541    }
542
543    try { // simply checking may throw in ie8 under ssl or mismatched protocol
544        doc = frame.contentDocument ? frame.contentDocument : frame.document;
545    } catch(err) {
546        // last attempt
547        doc = frame.document;
548    }
549    return doc;
550}
551
552function curUrlPattern(){
553	//var urlPattern = "";
554	//var url = location.pathname;
555	//if(url != null){
556	//	urlPattern = url.substring( url.lastIndexOf("."));
557	//}
558	
559	return urlPattern;
560}
561
562/**
563 * k:url script 용
564 * @param url
565 * @returns
566 */
567function kurl(url){
568	/*$.ajax({
569		url:"/kurl" + curUrlPattern(),
570		type:"post",
571		data:{
572			"url":url
573		},
574		async:false,
575		cache:false,
576		success:function(r){
577			if(r != null && r.url != null){
578				url = r.url;
579			}
580		}
581	});*/
582	return ctxPath + url + curUrlPattern();
583}
584
585/**
586 * k:text script 용
587 * @param key(필수)
588 * @param lang(선택)
589 * @param argsStr(선택)
590 * @returns
591 */
592function ktext(key, lang, argsStr) {
593	return ktext(key, lang, argsStr, "");
594}
595/**
596 * k:text script 용
597 * @param key(필수)
598 * @param lang(선택)
599 * @param argsStr(선택)
600 * @param siteId(선택)
601 * @returns
602 */
603function ktext(key, lang, argsStr, siteId) {
604	/*
605	 * ktext()의 경우 request가 달라 siteId를 전달하기 어려워
606	 * - 관리자 : common_js.jsp
607	 * - 사용자 : common_head.jsp
608	 * 에서 default값을 지정함. 
609	 */
610	if( siteId==null || siteId=="" || siteId==undefined ) {
611		siteId = defaultTextSiteId;
612		
613	}
614	
615	var text = ""; 
616	$.ajax({
617		url : "/ktext" + curUrlPattern(),
618		type : "post",
619		data : {
620			"key" : key,
621			"lang" : lang,
622			"argsStr" : argsStr,
623			"siteId":siteId
624		},
625		async : false,
626		cache : false,
627		success:function(r){
628			if( r!=null && r.text!=null){
629				text = r.text;
630			}
631		}
632	});
633	return text;
634}
635
636/**
637 * 현재 언어설정값을 가져온다
638 * @returns
639 */
640function klang() {
641	/*
642	 * ktext()의 경우 request가 달라 siteId를 전달하기 어려워
643	 * - 관리자 : common_js.jsp
644	 * - 사용자 : common_head.jsp
645	 * 에서 default값을 지정함. 
646	 */
647	var siteId = "";
648	if( siteId==null || siteId=="" || siteId==undefined ) {
649		siteId = defaultTextSiteId;
650	}
651	
652	var lang = "en"; 
653	$.ajax({
654		url : "/klang" + curUrlPattern(),
655		type : "post",
656		data : {
657			"siteId":siteId
658		},
659		async : false,
660		cache : false,
661		success:function(r){
662			if( r!=null && r.text!=null){
663				lang = r.text;
664			}
665		}
666	});
667	return lang;
668}
669
670/**
671 * 사용자조회
672 * 사용자 선택 후 jf_userInfoListCallback(userId, userNm) 호출함
673 * @param height
674 */
675function jf_userInfoList(siteId, height){
676	if(!(typeof(window["jf_userInfoListCallback"]) == "function")){
677		alert("jf_userInfoListCallback() does not exist!");
678		return;
679	}	
680	
681	var url = kurl("/fnctmngr/siteMngr/"+siteId+"/userInfoList");
682	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
683	$("body").append(html);
684	$("#blockUIaTagTemp").click();
685	$("#blockUIaTagTemp").remove();
686}
687
688
689/**
690 * 사용자조회(최고관리자 설정조회, 회원탈퇴 사용자조회, 사이트개설 관리자조회 )
691 * 사용자 선택 후 jf_siteUserInfoListCallback(userId,) 호출함 
692 */
693function jf_searchUserInfoList(siteId,userId){
694	if(!(typeof(window["jf_searchUserInfoListCallback"]) == "function")){
695		alert("jf_searchUserInfoListCallback() does not exist!");
696		return;
697	}	 
698	var url = kurl("/user/topMngr/searchUserList")+"?siteId="+siteId+"&userId="+userId;
699	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
700	$("body").append(html);
701	$("#blockUIaTagTemp").click();
702	$("#blockUIaTagTemp").remove();
703}
704
705/**
706 * 중간사용자 조회(최고관리자 설정조회, 회원탈퇴 사용자조회, 사이트개설 관리자
706조회 )
707 * 사용자 선택 후 jf_searchMiddleUserInfoListCallback(userId,) 호출함 
708 */
709function jf_searchMiddleUserInfoList(siteId){
710	if(!(typeof(window["jf_searchMiddleUserInfoListCallback"]) == "function")){
711		alert("jf_searchMiddleUserInfoListCallback() does not exist!");
712		return;
713	}	 
714	var url = kurl("/user/searchUserList")+"?siteId="+siteId;
715	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
716	$("body").append(html);
717	$("#blockUIaTagTemp").click();
718	$("#blockUIaTagTemp").remove();
719}
720
721/**
722 * 일반사용자 조회(조직도 조직회원 추가 조회)
723 * 사용자 선택 후 jf_orgchtUserAllListCallback(userId,userNm) 호출함 
724 */
725function jf_orgchtUserAllList(){
726	if(!(typeof(window["jf_orgchtUserAllListCallback"]) == "function")){
727		alert("jf_orgchtUserAllListCallback() does not exist!");
728		return;
729	}	 
730	var url = kurl("/orgcht/topMngr/orgchtUserAllList");
731	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
732	$("body").append(html);
733	$("#blockUIaTagTemp").click();
734	$("#blockUIaTagTemp").remove();
735}
736
737 
738
739/**
740 * 조직도 조회
741 * 조직도 선택 후 jf_orgchtTreeListCallBack(orgchtCode, orgchtNm, isDown) 호출함
742 * @param siteId
743 * @param height
744 */
745function jf_orgchtTreeList(siteId, height){
746	if(!(typeof(window["jf_orgchtTreeListCallBack"]) == "function")){
747		alert("jf_orgchtTreeListCallBack() does not exist!");
748		return;
749	}
750	
751	var url = kurl("/fnctmngr/siteMngr/"+siteId+"/orgchtTree");
752	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
753	$("body").append(html);
754	$("#blockUIaTagTemp").click();
755	$("#blockUIaTagTemp").remove();
756}
757
758/**
759 * (일반사용자를 위한)조직도 조회
760 * 조직도 선택 후 jf_orgchtTreeListCallBack(orgchtCode, orgchtNm) 호출함
761 * @param siteId 사이트 아이디
762 */
763function jf_orgchtTreeListForUser(siteId){
764	if(!(typeof(window["jf_orgchtTreeListForUserCallBack"]) == "function")){
765		alert("callback function does not exist!");
766		return;
767	}
768	
769	var url = siteId!=null && siteId!=undefined && siteId!=""? kurl("/orgcht/" + siteId + "/orgchtTree") : kurl( "/orgcht/orgchtTree" );
770	var html = "<a href='"+url+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
771	$("body").append(html);
772	$("#blockUIaTagTemp").click();
773	$("#blockUIaTagTemp").remove();
774}
775
776
777/**
778 * 기능 관리자 설정
779 * @param fnctId 기능아이디
780 * @param fnctNo 기능번호
781 */
782function jf_fnctMngr(siteId, fnctId, fnctNo){
783	if(fnctNo == null){
784		fnctNo = "";
785	}
786	var html = "<a href='"+kurl("/fnctmngr/siteMngr/"+siteId+"/userIdList")+"?fnctId="+fnctId+"&fnctNo="+fnctNo+"' class='_blockUI _blockH600' id='blockUIaTagTemp' style='display:none'>temp</a>";
787	$("body").append(html);
788	$("#blockUIaTagTemp").click();
789	$("#blockUIaTagTemp").remove();
790}
791
792/**
793 * 마스터 스킨 목록 
794 * => 선택 후 function jf_masterSkinSelectCallback(selMasterSkinId, selMasterSkinNm) 있어야함.
795 * @param masterSkinId
796 */
797function jf_masterSkinList(masterSkinId){
798	if(!(typeof(window["jf_masterSkinSelectCallback"]) == "function")){
799		alert("jf_masterSkinSelectCallback() does not exist!");
800		return;
801	}
802	
803	var url = kurl("/masterskin/siteMngr/"+$("#siteId").val()+"/masterSkinList");
804	if(masterSkinId != null){
805		url += "?masterSkinId="+masterSkinId;
806	}
807	
808	var html = "<a href='"+url+"' class='_blockUI _masterSkinList' id='blockUIaTagTemp' style='display:none'>"+ktext("k2web.select","","")+"</a>";
809	$("body").append(html);
810	$("#blockUIaTagTemp").click();
811	$("#blockUIaTagTemp").remove();
812	
813}
814
815
816/**
817 * 공통 접근 권한 설정
818 * @param siteId 사이트 아이디
819 * @param fnctId 기능 아이디
820 * @param fnctNo 기능 번호
821 * @param initViewValue 화면 초기 설정값 
822 * 	String[] keys = {"list","view"};
823	String[] texts = {"목록보기","내용보기"};
824	String initViewValue = K2Util.accesAuthorInitValue(keys, texts);
825 */
826function jf_accesAuthor(siteId, fnctId, fnctNo, initViewValue){
827	if(fnctNo == null){
828		fnctNo = "";
829	}
830	var html = "<a href='"+kurl("/accesauthor/fnctMngr/"+siteId+"/list")+"?fnctId="+fnctId+"&fnctNo="+fnctNo+"&initViewValue="+initViewValue+"' class='_blockUI' id='blockUIaTagTemp' style='display:none'>temp</a>";
831	$("body").append(html);
832	$("#blockUIaTagTemp").click();
833	$("#blockUIaTagTemp").remove();
834}
835
836/**
837 * .html() 시 자신의 태그는 가져오지 못함.
838 * => 자신의 태그 까지 가져오기
839 */
840$.fn.outerHTML = function() {
841    var el = $(this);
842    if( !el[0] ) return "";
843 
844    if (el[0].outerHTML) {
845        return el[0].outerHTML;
846    } else {
847        var content = el.wrap('<p/>').parent().html();
848        el.unwrap();
849        return content;
850    }
851}
852
853function nyroModalClose(){
854	$(".nyroModalClose").click();
855}
856
857function getAjax(url, data, async){
858	var result = null;
859	if(async == null){ async= false; }
860	
861	$.ajax({
862		url : url,
863		headers: { 'x-requested-with': 'k2web' },
864		type : "post",
865		data : data,
866		cache:false,
867		async:async,
868		success:function(e){
869			result = e;
870		},
871		error:function(){
872			//alert("실패하였습니다.");
873		}
874	});
875	return result;
876}
877
878/*
879 * 2016-05-18 추가
880 * 작성자 : 김경남
881 * 요소 최대 번호 가져오기
882*/ 
883function _getEleMaxNum(siteId, menuSeq){
884	var num = null;
885	var r = getAjax(kurl( "/site/menuMngr/"+siteId+"/"+menuSeq+"/getEleMaxNum" ));
886	if(r != null && r.maxNum != null){
887		num = r.maxNum;
888	}else{
889		alert("MaxNum Fail!");
890	}
891	return num;
892}
893
894/**
895 * 현재 서버시간 가져오기
896 */
897function getCurDate(){
898	var url = kurl("/curDateJson");
899	var r = getAjax(url);
900	if(r != null && r.date != null){
901		// yyyy/MM/dd HH:mm:ss
902		var curDate = new Date( r.date );
903		if(curDate != null){
904			return curDate;
905		}
906	}
907}
908
909var StringBuffer = function() {
910    this.buffer = new Array();
911}
912
913StringBuffer.prototype.append = function(obj) {
914     this.buffer.push(obj);
915}
916
917StringBuffer.prototype.toString = function(){
918     return this.buffer.join("");
919}
920
921
922/**
923 * 대표이미지 등록 폼
924 * @param num	번호
925 * @param fileType	파일타입
926 * @param siteId	사이트 아이디
927 */
928function jf_fileUploadFormCrop(num, fileType, siteId, w, h){
929	if(siteId == null){
930		siteId = "";
931	}
932	
933	if(!(typeof(window["jf_fileUploadCallback"]) == "function")){
934		alert("jf_fileUploadCallback() does not exist!");
935		return;
936	}	
937	
938	var url = kurl("/fileupload/cropRegistView") + "?num="+num+"&fileType="+fileType+"&siteId="+siteId+"&cropWidth="+w+"&cropHeight="+h;
939	var html = "<a href='"+url+"' class='_blockUI _blockH800' id='blockUIaTagTemp' style='display:none'>temp</a>";
940	$("body").append(html);
941	$("#blockUIaTagTemp").click();
942	$("#blockUIaTagTemp").remove();
943}
944
945function jf_tmpFileUploadProcCrop(num, fileType, siteId){
946	var fileTag = $("#fileCommonTag");
947	var siteId = $("input[name='siteId']").val();
948	if($(fileTag).val() == ""){
949		alert(ktext("error.item.exist2","","k2web.select,k2web.file", siteId));
950		return;
951	}
952	
953	var data = jf_fileUploadAjaxCommon(fileTag, fileType, siteId, num, "jf_fileUploadProcCommonResult");
954	$('#img_wrap').html('<img id="cropImg" src="'+data.fileDir+data.fileRename+'" alt="" />');
955	$img = $('#cropImg').imagesLoaded(function(){
956		/*if($('#cropImg').width()<234 || $('#cropImg').height()<126){
957			$('#cropImg').attr('src','/sysManager/images/sample_none_400x300.jpg');
958			alert('가로 234px, 세로 126px 이상의 이미지를 등록하시기 바랍니다.');
959			$sizeChk = false;
960			
961			$w = $('#cropImg').width()+60;
962			$h = $('#cropImg').height()+210;
963			window.resizeTo($w, $h);
964			$('#img_wrap').width($w-45);
965			$('#img_wrap').height($h-190);
966			
967			location.reload();
968			
969			return false;
970		}*/
971	});
972	crop();
973}
974
975function crop(){
976	var cropW = $("#cropW").val();
977	var cropH = $("#cropH").val();
978	$('#cropImg').Jcrop({
979		aspectRatio: 1,
980		onSelect: updateCoords,
981		aspectRatio: cropW/cropH,
982		minSize: [ cropW, cropH]
983	});
984	
985	$('#cropImg').imagesLoaded(function(){
986		$w = $('#cropImg').width()+60;
987		$h = $('#cropImg').height()+210;
988		if($w > 1024) $w = 1024;
989		if($h > 768) $h = 768;
990		window.resizeTo($w, $h);
991		$('#img_wrap').width($w-45);
992		$('#img_wrap').height($h-190);
993	});
994}
995
996function updateCoords(c){
997	$('#x').val(c.x);
998	$('#y').val(c.y);
999	$('#w').val(c.w);
1000	$('#h').val(c.h);
1001};
1002
1003function jf_fileUploadProcCrop(num, fileType, siteId){
1004	curAlt = "";
1005	var fileTag = $("#fileCommonTag");
1006	var siteId = $("input[name='siteId']").val();
1007	if($(fileTag).val() == ""){
1008		alert(ktext("error.item.exist2","","k2web.select,k2web.file", siteId));
1009		return;
1010	}
1011	
1012	var fileName = $("#cropImg").attr("src");
1013	if(fileName == ""){
1014		alert(ktext("error.item.exist2","","k2web.select,k2web.file", siteId));
1015		return;
1016	}
1017	
1018	if(fileType == "image"){
1019		//이미지 설명 필수 입력
1020		curAlt = trim($("#alt").val());
1021		if(curAlt == ""){
1022			alert(ktext("msg.at.do3","","k2web.image.explanation,k2web.enter", siteId), function(){
1023				$("#alt").focus();
1024			});
1025			return;
1026		}
1027	}
1028	
1029	var checkNm = 'x,y,w,h';
1030	checkNmTemp = checkNm.split(',');
1031	for(i=0; i<checkNmTemp.length; i++){
1032		if($('#'+checkNmTemp[i]).val() == ''){
1033			alert(ktext("msg.select.image.area"));
1034			return false;
1035		}
1036	};
1037	
1038	var x = parseInt($("#x").val());
1039	var y = parseInt($("#y").val());
1040	var w = parseInt($("#w").val());
1041	var h = parseInt($("#h").val());
1042	
1043	var data = jf_fileUploadAjaxCrop(fileTag, fileName, fileType, siteId, num, x, y, w, h, "jf_fileUploadProcThumbResult");
1044	jf_fileUploadProcCropResult(data);
1045}
1046
1047function jf_fileUploadProcCropResult(data){
1048	if(data != null && data.result){
1049		var fileDir = data.fileDir;
1050		var fileRename = data.fileRename;
1051		var fileOrg = data.fileOrg;
1052		var fileSize = data.fileSize;
1053		var num = data.num;
1054		
1055		parent.jf_fileUploadCallback(fileDir, fileOrg, fileRename, fileSize, num, curAlt);
1056		parent.unblockUI();
1057	}
1058}
1059
1060/**
1061 * 썹네일 파일 업로드
1062 * @param fileObj fileObj 파일객체
1063 * @param fileType fileType 업로드 타입 : image, media, 일반-""
1064 * @param siteId 사이트 아이디
1065 * @param num 파일 번호
1066 * @param callback ie9 환경에서 iframe 파일 업로드 후 실행되어야할 함수
1067 * @returns
1068 */
1069function jf_fileUploadAjaxCrop(fileObj, fileName, fileType, siteId, num, x, y, w, h, callback){
1070	
1071	if(fileObj == null){return null;}
1072	if(fileName == null){return null;}
1073
1074	if(siteId == null){
1075		siteId = "";
1076	}
1077	if(num == null){
1078		num = "";
1079	}
1080	var result = null;
1081	if(window.FormData !== undefined){
1082		// for HTML5 browsers
1083		var fd = new FormData();
1084		fd.append("file",fileObj[0].files[0]);
1085		fd.append("fileName",fileName);
1086		fd.append("fileType",fileType);
1087		fd.append("siteId",siteId);
1088		fd.append("num",num);
1089		fd.append("x",x);
1090		fd.append("y",y);
1091		fd.append("w",w);
1092		fd.append("h",h);
1093		
1094		$.ajax({
1095			url: kurl("/fileupload/cropRegist"),
1096			type: "POST",
1097			data: fd, 
1098			async: false,
1099			cache: false,
1100			contentType: false,
1101			processData: false,
1102			success:  function(data){
1103				if(data != null){
1104					if(data.result){
1105						result = data;
1106					}else{
1107						alert(data.message);
1108					}
1109				}
1110			}
1111		});
1112		return result;
1113		
1114	}else{
1115		
1116		if($("#fileIframe").size() == 0){
1117			$("body").append("<iframe name='fileIframe' src='#' id='fileIframe' class='hidden'/>");
1118		}
1119
1120		var form = $(fileObj).closest("form");
1121		
1122		if(form == null){
1123			alert("No search form tag!");
1124			return;
1125		}
1126		
1127		$(form).attr("method", "post");
1128		$(form).attr("target", "fileIframe");
1129		$(form).attr("enctype", "multipart/form-data");
1130		$(form).attr("action",  kurl("/fileupload/cropRegist"));
1131		
1132		if($(form).find("input[name='siteId']").size() == 0){
1133			$(form).append("<input type='hidden' name='siteId'/>");
1134		}
1135		if($(form).find("input[name='fileType']").size() == 0){
1136			$(form).append("<input type='hidden' name='fileType'/>");
1137		}
1138		if($(form).find("input[name='viewType']").size() == 0){
1139			$(form).append("<input type='hidden' name='viewType' value='html'/>");
1140		}
1141		if($(form).find("input[name='callback']").size() == 0){
1142			$(form).append("<input type='hidden' name='callback' value='"+callback+"'/>");
1143		}
1144		
1145		$(form).find("input[name='siteId']").val(siteId);
1146		$(form).find("input[name='fileType']").val(fileType);
1147		
1148		//*** ie9 3번 submit을 해야 전송이됨?? ****//
1149		$(form).submit();
1150		$(form).submit();
1151		$(form).submit();
1152		//*** ie9 3번 submit을 해야 전송이됨?? ****//
1153		
1154		$("#fileIframe").load(function(e)
1155        {
1156			var data = eval("("+$("#fileIframe").contents().find("body").text()+")");
1157			if(data != null){ 
1158				if(data.result){
1159					var callback = data.callback;
1160					eval(callback+"(data)");
1161				}else{
1162					alert(data.message);
1163				}
1164			}
1165        });
1166		
1167		return null;
1168	}
1169	
1170}

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.