PageSourceSearch

https://snarte.or.kr/lib/js/script.function.js?t=1791256488

js snarte.or.kr collected 2026-10-06 03:15:10 UTC 40,179 bytes, 1,012 lines download raw bytes

1//Validation
2var getFieldValue = function(field) {
3	var fieldValue = null;
4	if (field!=null) {
5		if (typeof field=="object") {
6			if (field.jquery!=undefined) {
7				fieldValue = field.val();
8			} else {
9				fieldValue = field.value;
10				if (typeof fieldValue=="undefined") {
11					fieldValue = field[0].value;
12				}
13			}
14		} else if (typeof field=="string") {
15			fieldValue = getFieldValue(document.getElementById(field));
16			if (fieldValue==null) {
17				fieldValue = getFieldValue(document.getElementsByName(field));
18			}
19		}
20	}
21
22	return fieldValue;
23}
24
25var getFieldCheck = function(field) {
26	var fieldChecked = null;
27	if (field!=null) {
28		if (typeof field=="object") {
29			if (field.jquery!=undefined) {
30				fieldChecked = field.is(":checked");
31			} else {
32				fieldChecked = field.checked;
33				if (typeof fieldChecked=="undefined") {
34					field.forEach(function(v, k){
35						fieldChecked = fieldChecked || getFieldCheck(v);
36					});
37				}
38			}
39		} else if (typeof field=="string") {
40			fieldChecked = getFieldCheck(document.getElementById(field));
41			if (fieldChecked==null) {
42				fieldChecked = getFieldCheck(document.getElementsByName(field));
43			}
44		}
45	}
46
47	return fieldChecked;
48}
49
50// cookies
51var setCookie = function(name, value, expiredays) {
52	var todayDate = new Date();
53	todayDate.setDate(todayDate.getDate() + expiredays);
54	document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";";
55}
56
57var getCookie = function(name) {
58	var nameOfCookie = name + "=";
59	var x = 0;
60	while(x <= document.cookie.length) {
61		var y = (x + nameOfCookie.length);
62		if(document.cookie.substring(x, y) == nameOfCookie) {
63			if ((endOfCookie=document.cookie.indexOf(";", y)) == -1) {
64				endOfCookie = document.cookie.length;
65			}
66			return unescape(document.cookie.substring(y, endOfCookie));
67		}
68		x = document.cookie.indexOf(" ", x) + 1;
69		if(x == 0) {
70			break;
71		}
72	}
73	return "";
74}
75
76var delCookie = function(name) {
77	var date = new Date();
78	document.cookie = name + "= " + "; expires=" + date.toUTCString() + "; path=/";
79}
80
81// text 타입의 element strip
82var form_strip = function(f) {
83	var elList = f.getElementsByTagName("input");
84	for (i=0;i<elList.length;i++ ){
85		if (elList[i].type.toLowerCase() == "text" || elList[i].type.toLowerCase() == "textarea"){
86			elList[i].value = elList[i].value.strip();
87		}
88	}
89}
90
91
92// window 띄우기
93var open_popup = function(URL, name, sizeWidth, sizeHeight, posTop, posLeft) {
94	if (!chk_number(sizeWidth)) {
95		alert("창의 너비를 지정해주세요.");
96		return null;
97	} else if (chk_number(sizeHeight)) {
98		alert("창의 높이를 지정해주세요.");
99		return null;
100	} else
101
102	if (chk_number(posTop)) {
103		posTop = 0;
104	} else
105	if (chk_number(posLeft)) {
106		posLeft = 0;
107	}
108
109	var arr_feature = [
110			"location=0"
111		,	"toolbar=no"
112		,	"width="+sizeWidth
113		,	"height="+sizeHeight
114		,	"top="+posTop
115		,	"left="+posLeft
116		,	"directories=no"
117		,	"status=no"
118		,	"scrollbars=Yes"
119		,	"resizable=no"
120		,	"menubar=no"
121		,	"border=0"
122	];
123
124	var win = open_popup2(URL, name, arr_feature.join(","));
125	win.focus();
126
127	return win;
128}
129
130// 기본 팝업창
131var open_popup2 = function(url,name,features) {
132	return window.open(url, name, features);
133}
134
135// SNS 공유
136var snsLinker = function(sns) {
137	var url = "";
138	var title = getFieldValue('sns_title');
139	var link  = document.location;
140
141	switch(sns) {
142		case "facebook" :
143			url = "http://www.facebook.com/sharer.php?u="+encodeURIComponent(link)+"&t="+encodeURIComponent(title);
144			layout = "width=645px, height=370px";
145			break;
146		case "twitter" :
147			url = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(title) + "&url=" + encodeURIComponent(link);
148			layout = "width=750px, height=250px";
149			break;
150		case "google_plus" :
151			url = "https://plus.google.com/share?url="+encodeURIComponent(link)+"&t="+encodeURIComponent(title);
152			layout = "width=1000px, height=450px";
153			break;
154		case "band":
155			url = "http://www.band.us/plugin/share?body="+encodeURIComponent(title)+encodeURIComponent("\n")+encodeURIComponent(link);
156			layout = "width=550px, height=580px, location=no, resizable=yes, status=no, scrollbars=no, personalbar=no, toolbar=no, menubar=no";
157			break;
158		case "kakaostory":
159			url = "https://story.kakao.com/share?url="+encodeURIComponent(link);
160			layout = "width=600px, height=460px, location=no, resizable=yes, status=no, scrollbars=no, personalbar=no, toolbar=no, menubar=no";
161			break;
162
163	}
164
165	var retPop = open_popup2(url, 'sns', layout);
166	if(retPop == null){
167		alert("팝업 차단을 사용안함으로 설정해주시기 바랍니다." );
168	}
169}
170
171// php에서 urlencode한 문자열을 urldecode 처리해주는 함수
172var urldecode = function(str) {
173   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
174}
175
176
177// 다음 주소 API 호출 함수
178// zip_field1				:	첫번째 주소영역 우편번호 필드 ID
179// basic_addr_field1	:	첫번째 주소영역 기본주소 필드 ID
180// detail_addr_field1	:	첫번째 주소영역 상세주소 필드 ID
181// zip_field2				:	두번째 주소영역 우편번호 필드 ID
182// basic_addr_field2	:	두번째 주소영역 기본주소 필드 ID
183// detail_addr_field2	:	두번째 주소영역 상세주소 필드 ID
184// guide_field				:	주소 사용안함 선택시 안내할 예상주소 정보가 들어갈 영역 ID
185// addr_type				:	사용할 주소 형식(1:도로명 주소만, 2:지번 주소만, 3:도로명 주소 + 지번 주소)
186// useLang				:	사용할 언어(ko:국문, en:영문) - 생략시 국문
187var openDaumPostcode = function(zip_field1, basic_addr_field1, detail_addr_field1, addr_type, useLang, zip_field2, basic_addr_field2, detail_addr_field2, guide_field) {
188	if(useLang == undefined)		useLang	=	"ko";				// 사용할 언어 생략시 기본 국문으로
189	if(addr_type == undefined)	addr_type	=	1;					// 사용할 주소형식 생략시 기본 도로명 주소만으로
190
191	daum.postcode.load(function(){
192		new daum.Postcode({
193			oncomplete: function(data) {
194				// 도로명 주소의 노출 규칙에 따라 주소를 조합한다.
195				// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
196				var fullRoadAddr			=	data.roadAddress;					// 국문 도로명 주소 변수
197				var fullRoadAddrEng	=	data.roadAddressEnglish;		// 영문 도로명 주소 변수
198				var fullJibunAddr			=	data.jibunAddress;					// 국문 지번 주소 변수
199				var fullJibunAddrEng	=	data.jibunAddressEnglish;		// 영문 지번 주소 변수
200				var extraRoadAddr		=	'';											// 도로명 조합형 주소 변수
201
202				// 법정동명이 있을 경우 추가한다. (법정리는 제외)
203				// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
204				if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
205					extraRoadAddr += data.bname;
206				}
207				// 건물명이 있고, 공동주택일 경우 추가한다.
208				if(data.buildingName !== '' && data.apartment === 'Y'){
209					extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
210				}
211				// 도로명, 지번 조합형 주소가 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
212				if(extraRoadAddr !== ''){
213					extraRoadAddr = ' (' + extraRoadAddr + ')';
214				}
215				// 도로명, 지번 주소의 유무에 따라 해당 조합형 주소를 추가한다.
216				if(fullRoadAddr !== '') {
217					fullRoadAddr += extraRoadAddr;
218				}
219
220				//----------------------------------------------------------------
221				// 우편번호와 주소 정보를 해당 필드에 넣는다.
222				//----------------------------------------------------------------
223
224				if(useLang == "ko") {													// 국문 주소정보를 요청한 경우
225					switch(addr_type) {
226						case 1:																// 도로명 주소만 요청한 경우
227							$("#"+zip_field1).val(data.zonecode);					// 도로명 주소파트 우편번호 정보 할당
228							$("#"+basic_addr_field1).val(fullRoadAddr);			// 도로명 주소파트 기본주소 정보 할당
229
230							if(detail_addr_field1 == "") {								// 도로명 주소파트 상세주소 필드가 없는 경우
231								$("#"+basic_addr_field1).focus();					// 도로명 주소파트 기본주소 필드에 포커스
232							} else {															// 도로명 주소파트 상세주소 필드가 있는 경우
233								$("#"+detail_addr_field1).focus();					// 도로명 주소파트 상세주소 필드에 포커스
234							}
235							break;
236						case 2:																// 지번 주소만 요청한 경우
237							$("#"+zip_field1).val(data.zonecode);					// 지번 주소파트 우편번호 정보 할당
238							$("#"+basic_addr_field1).val(fullJibunAddr);			// 지번 주소파트 기본주소 정보 할당
239
240							if(detail_addr_field1 == "") {								// 지번 주소파트 상세주소 필드가 없는 경우
241								$("#"+basic_addr_field1).focus();					// 지번 주소파트 기본주소 필드에 포커스
242							} else {															// 지번 주소파트 상세주소 필드가 있는 경우
243								$("#"+detail_addr_field1).focus();					// 지번 주소파트 상세주소 필드에 포커스
244							}
245						case 3:																// 도로명 주소 + 지번 주소를 요청한 경우
246							$("#"+zip_field1).val(data.zonecode);					// 도로명 주소파트 우편번호 정보 할당
247							$("#"+basic_addr_field1).val(fullRoadAddr);			// 도로명 주소파트 기본주소 정보 할당
248							$("#"+zip_field2).val(data.zonecode);					// 지번 주소파트 우편번호 정보 할당
249							$("#"+basic_addr_field2).val(fullJibunAddr);			// 지번 주소파트 기본주소 정보 할당
250
251							if(detail_addr_field1 == "") {								// 도로명 주소파트 상세주소 필드가 없는 경우
252								$("#"+basic_addr_field1).focus();					// 도로명 주소파트 기본주소 필드에 포커스
253							} else {															// 도로명 주소파트 상세주소 필드가 있는 경우
254								$("#"+detail_addr_field1).focus();					// 도로명 주소파트 상세주소 필드에 포커스
255							}
256							break;
257					}
258
259					if(guide_field != "") {
260						// 사용자가 '선택 안함'을 클릭한 경우, 예상 주소라는 표시를 해준다.
261						if(data.autoRoadAddress) {
262							var expRoadAddr = data.autoRoadAddress + extraRoadAddr;
263							$("#"+guide_field).html('(예상 도로명 주소 : ' + expRoadAddr + ')');				// 예상되는 도로명 주소에 조합형 주소를 추가한다.
264						} else if(data.autoJibunAddress) {
265							var expJibunAddr = data.autoJibunAddress;
266							$("#"+guide_field).html('(예상 지번 주소 : ' + expJibunAddr + ')');					// 예상되는 지번 주소에 조합형 주소를 추가한다.
267						} else {
268							$("#"+guide_field).html('');
269						}
270					}
271				} else {																				// 영문 주소정보를 요청한 경우
272					switch(addr_type) {
273						case 1:																		// 도로명 주소만 요청한 경우
274							$("#"+zip_field1).val(data.zonecode);					// 도로명 주소파트 우편번호 정보 할당
275							$("#"+basic_addr_field1).val(fullRoadAddrEng);				// 도로명 주소파트 기본주소 정보 할당
276
277							if(detail_addr_field1 == "") {										// 도로명 주소파트 상세주소 필드가 없는 경우
278								$("#"+basic_addr_field1).focus();							// 도로명 주소파트 기본주소 필드에 포커스
279							} else {																	// 도로명 주소파트 상세주소 필드가 있는 경우
280								$("#"+detail_addr_field1).focus();							// 도로명 주소파트 상세주소 필드에 포커스
281							}
282							break;
283						case 2:																		// 지번 주소만 요청한 경우
284							$("#"+zip_field2).val(data.zonecode);					// 지번 주소파트 우편번호 정보 할당
285							$("#"+basic_addr_field2).val(fullJibunAddrEng);			// 지번 주소파트 기본주소 정보 할당
286
287							if(detail_addr_field2 == "") {										// 지번 주소파트 상세주소 필드가 없는 경우
288								$("#"+basic_addr_field2).focus();							// 지번 주소파트 기본주소 필드에 포커스
289							} else {																	// 지번 주소파트 상세주소 필드가 있는 경우
290								$("#"+detail_addr_field2).focus();							// 지번 주소파트 상세주소 필드에 포커스
291							}
292						case 3:																		// 도로명 주소 + 지번 주소를 요청한 경우
293							$("#"+zip_field1).val(data.zonecode);					// 도로명 주소파트 우편번호 정보 할당
294							$("#"+basic_addr_field1).val(fullRoadAddrEng);				// 도로명 주소파트 기본주소 정보 할당
295							$("#"+zip_field2).val(data.zonecode);					// 지번 주소파트 우편번호 정보 할당
296							$("#"+basic_addr_field2).val(fullJibunAddrEng);			// 지번 주소파트 기본주소 정보 할당
297
298							if(detail_addr_field1 == "") {										// 도로명 주소파트 상세주소 필드가 없는 경우
299								$("#"+basic_addr_field1).focus();							// 도로명 주소파트 기본주소 필드에 포커스
300							} else {																	// 도로명 주소파트 상세주소 필드가 있는 경우
301								$("#"+detail_addr_field1).focus();							// 도로명 주소파트 상세주소 필드에 포커스
302							}
303							break;
304					}
305
306					if(guide_field != "") {
307						// 사용자가 '선택 안함'을 클릭한 경우, 예상 주소라는 표시를 해준다.
308						if(data.autoRoadAddressEnglish) {
309							$("#"+guide_field).html('(Estimated street name address: ' + data.autoRoadAddressEnglish + ')');				// 예상되는 도로명 주소에 조합형 주소를 추가한다.
310						} else if(data.autoJibunAddressEnglish) {
311							$("#"+guide_field).html('(Estimated jibun address: ' + data.autoJibunAddressEnglish + ')');							// 예상되는 지번 주소에 조합형 주소를 추가한다.
312						} else {
313							$("#"+guide_field).html('');
314						}
315					}
316				}
317			}
318		}).open();
319	});
320}
321
322var copyValueMapToForm = function(form, mapKVs) {
323	form.find("input, select, textarea").each(function(index, obj) {
324		$.each(mapKVs, function(key, value) {
325			if (obj.name == key) {
326				obj.value = value;
327			}
328		});
329	});
330}
331
332//Form Submit 중복 방지
333var prevent_data = null;
334var prevent_period = 10;
335var fnPrevent_check = function() {
336	//중복 방지 예방 시간 - 단위(초)
337	var current_date = new Date();
338	var chk_pass = false;
339
340	if (prevent_data!=null) {
341		var prev_time = Math.floor(prevent_data.getTime() /1000);
342		var now_time = Math.floor(current_date.getTime() /1000);
343
344		var gap_time = (now_time -prev_time);
345
346		if ( gap_time>prevent_period ) {
347			prevent_data = current_date;
348			chk_pass = true;
349
350		} else {
351			alert( (prevent_period -gap_time) +" 초 후 다시 시도해주세요.");
352			chk_pass = false;
353
354		}
355
356	} else {
357		prevent_data = current_date;
358		chk_pass = true;
359	}
360
361	if (chk_pass) {
362		fnLoading_show();
363	}
364
365	return chk_pass;
366}
367var fnPrevent_init = function() {
368	//중복방지 시간 초기화
369	prevent_data = null;
370
371	//로딩바 지우기
372	fnLoading_hide();
373}
374
375//로딩페이지
376var fnLoading_show = function() {
377	var div = $("<div />",{
378			"id" : "viewLoading"
379	})
380	var div_loader = $("<div />", {
381			"class" : "lds-spinner"
382		,	"html" : "<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>"
383	});
384	div.append(div_loader);
385
386	$("body").append(div);
387}
388
389var fnLoading_hide = function() {
390	$("#viewLoading").remove();
391}
392
393// 자동으로 다음 입력칸으로 넘어가는 함수
394// obj : 입력받고 있는 객체
395// len : 입력제한 글자수
396// next : obj에 len글자만큼 입력됐을 경우 넘어갈 객체명을 가진 변수(문자열)
397var auto_tab = function(obj, len, next) {
398	// 다음번으로 이동될 객체명을 가진변수에 폼까지의 문자열을 결합하여 객체화
399	next_obj = eval("obj.form."+next);
400
401	if(obj.value.length == len)
402		next_obj.focus();
403}
404
405// 숫자만 입력하게 하는 함수
406var only_number = function(Ev){
407	var evCode = ( window.netscape ) ? Ev.which : event.keyCode ;
408	/* FF일 경우 Ev.which 값을,
409	IE을 경우 event.keyCode 값을 evCode에 대입 */
410	if ( ! ( evCode == 0 || evCode == 8 || ( evCode > 47 && evCode < 58 ) ) ) {
411		/* 눌러진 키 코드가 숫자가 아닌 경우
412		( '0'은 FF에서 Tab 키,
413		'8'은 FF에서 BackSpace가 먹히지 않아 삽입) */
414		if ( Ev.preventDefault ) { // FF일 경우
415			Ev.preventDefault() ; // 이벤트 무효화
416		} else { // IE일 경우
417			event.returnValue=false; // 이벤트 무효화
418		}
419	}
420}
421
422
423// 숫자와 소수점만 입력하게 하는 함수
424function only_number_float( Ev ){
425	var evCode = ( window.netscape ) ? Ev.which : event.keyCode ;
426	/* FF일 경우 Ev.which 값을,
427	IE을 경우 event.keyCode 값을 evCode에 대입 */
428	if ( ! ( evCode == 0 || evCode == 8 || evCode == 46 || ( evCode > 47 && evCode < 58 ) ) ) {
429		/* 눌러진 키 코드가 숫자가 아닌 경우
430		( '0'은 FF에서 Tab 키,
431		'8'은 FF에서 BackSpace가 먹히지 않아 삽입)
432		'46'은 . */
433		if ( window.netscape ) { // FF일 경우
434			Ev.preventDefault() ; // 이벤트 무효화
435		} else { // IE일 경우
436			event.returnValue=false; // 이벤트 무효화
437		}
438	}
439}
440
441// 전화번호/우편번호 등 숫자와 - 만 입력하게 하는 함수
442var only_tel = function( Ev ){
443	var evCode = ( window.netscape ) ? Ev.which : event.keyCode ;
444	/* FF일 경우 Ev.which 값을,
445	IE을 경우 event.keyCode 값을 evCode에 대입 */
446	if ( ! ( evCode == 0 || evCode == 8 || evCode == 45 || ( evCode > 47 && evCode < 58 ) ) ) {
447		/* 눌러진 키 코드가 숫자가 아닌 경우
448		( '0'은 FF에서 Tab 키,
449		'8'은 FF에서 BackSpace가 먹히지 않아 삽입) */
450		if ( Ev.preventDefault ) { // FF일 경우
451			Ev.preventDefault() ; // 이벤트 무효화
452		} else { // IE일 경우
453			event.returnValue=false; // 이벤트 무효화
454		}
455	}
456}
457
458// 숫자와 . 만 입력하게 하는 함수
459var only_num_dot = function( Ev ){
460	var evCode = ( window.netscape ) ? Ev.which : event.keyCode ;
461	/* FF일 경우 Ev.which 값을,
462	IE을 경우 event.keyCode 값을 evCode에 대입 */
463	if ( ! ( evCode == 0 || evCode == 8 || evCode == 46 || ( evCode > 47 && evCode < 58 ) ) ) {
464		/* 눌러진 키 코드가 숫자가 아닌 경우
465		( '0'은 FF에서 Tab 키,
466		'8'은 FF에서 BackSpace가 먹히지 않아 삽입) */
467		if ( Ev.preventDefault ) { // FF일 경우
468			Ev.preventDefault() ; // 이벤트 무효화
469		} else { // IE일 경우
470			event.returnValue=false; // 이벤트 무효화
471		}
472	}
473}
474
475
476var total_days = function(yy, mm, dd) {
477	// yy-1년까지의 날 수 구하기 : (yy-1)*365 + 윤년이었던 햇수
478	total = (yy-1)*365 + Math.floor((yy-1)/4) - Math.floor((yy-1)/100) + Math.floor((yy-1)/400);
479
480	// yy년도의 mm-1월까지의 날 수 더하기
481	for(i=1; i<mm; i++)
482		total += lastday(yy, i);
483
484	// dd일 더하기
485	total += dd;
486
487	return total;
488}
489
490// 마지막 날짜 구하는 함수
491var lastday = function(yy, mm) {
492	last = (mm==2)?((yy%4==0 && yy%100!=0 || yy%400==0)?29:28):(((mm-1)%7%2)?30:31);
493
494	// 구해진 마지막 날짜 반환하기
495	return last;
496}
497
498// 특정날짜의 요일값 구하는 함수
499var weekday = function(yy, mm, dd) {
500	// 지정한 날짜까지의 날 수 구하기
501	total = total_days(yy, mm, dd);
502
503	// 구해진 날 수를 7로 나눈 나머지가 요일값이다.
504	w = total % 7;
505
506	// 구해진 요일값 반환하기
507	return w;
508}
509
510// 특정 날짜에 날짜를 더하는 함수
511// sDate : 기준날짜
512// val : 기준날짜에 증감할 날 수
513// mode : 기준날짜에 증감하는 기준(d:일, m:월, y:년)
514var dateAdd = function(sDate, val, mode) {
515	var yy = parseInt(sDate.substr(0, 4), 10);
516	var mm = parseInt(sDate.substr(5, 2), 10);
517	var dd = parseInt(sDate.substr(8), 10);
518
519	switch(mode) {
520		case "y":		rdate = new Date(yy + val, mm - 1, dd);		break;
521		case "m":		rdate = new Date(yy, mm - 1 + val, dd);		break;
522		default:		rdate = new Date(yy, mm - 1, dd + val);		break;
523	}
524
525	yy = rdate.getFullYear();
526	mm = rdate.getMonth() + 1; mm = (mm < 10) ? '0' + mm : mm;
527	dd = rdate.getDate(); dd = (dd < 10) ? '0' + dd : dd;
528
529	return '' + yy + '-' +  mm  + '-' + dd;
530}
531
532// 로그인 체크
533var notLogin = function(url) {
534	if (confirm("회원전용 페이지입니다. 로그인 하시겠습니까?")) {
535		window.location.href="/user/member/login.php?uri_redirect=" + url;
536	}
537}
538
539// 레이어팝업 세팅
540var layer_process = function(dialog_tag) {
541	// 마스크 사이즈
542    var maskHeight = $(document).height();
543    var maskWidth = $(window).width();
544    $('.backLayer').css({'width':maskWidth,'height':maskHeight});
545	$(".backLayer").css("background-color","#848484");
546 
547    // 윈도우 화면 사이즈 구하기
548    var winH = $(window).height();
549    var winW = $(window).width();
550 
551    // 스크롤 높이 구하기
552    var _y =(window.pageYOffset) ? window.pageYOffset
553    : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop
554    : (document.body) ? document.body.scrollTop
555    : 0;
556
557    if(_y<1){
558		var h = winH/2;
559    }else{
560		var h = winH/2+_y;
561    }
562
563    // dialog창 리사이즈
564	var dial_width =$(dialog_tag).width();
565    var dial_height = $(dialog_tag).height();
566
567    $(dialog_tag).css('top', h-(dial_height/2));
568    $(dialog_tag).css('left', winW/2-(dial_width+33)/2); 
569}
570
571// 상세보기 때 반투명 및 스크롤 따라 움직이게 해주는 함수
572var detail_view_process = function(dialog_tag) {
573	//esc키 누르면 화면 잠김 해제
574	$(document).keydown(function(event) {
575		if(event.which=='27') {
576			close_detail_view1(dialog_tag);
577		}
578	});
579
580	//윈도우가 resize될때마다 backLayer를 조정
581	$(window).resize(function() {
582		layer_process(dialog_tag);
583	});
584
585	// 스크롤할때마다 위치 갱신
586	$(window).scroll(function () {
587		layer_process(dialog_tag);
588	});
589
590	layer_process(dialog_tag);
591	// 화면을 가리는 레이어를 보여준다 (0.5초동안 30%의 농도의 투명도)
592	$(".backLayer").fadeTo(500, 0.3);
593    // dialogì°½  effect
594    $(dialog_tag).fadeIn(500);
595}
596
597var close_detail_view = function(dialog_tag) {
598	//윈도우가 resize될때마다 backLayer를 조정
599	$(window).resize();
600	// 스크롤할때마다 위치 갱신
601	$(window).scroll();
602
603	$(".backLayer").hide();
604	$(dialog_tag).fadeOut(300);
605}
606
607function close_detail_view1(dialog_tag) {
608	//윈도우가 resize될때마다 backLayer를 조정
609	$(window).resize();
610	// 스크롤할때마다 위치 갱신
611	$(window).scroll();
612
613	$(".backLayer").hide();
614	$(dialog_tag).fadeOut(300);
615}
616
617// 관리자 페이지에서 오프라인 결제 레이어 처리 함수
618var view_offline_settle_detail = function(userName, goodName, goodNameTail, settle_msg) {
619	//팝업 레이어 보이게
620	$.ajax({
621		type:"POST",
622		data: { 
623			userName		:	userName,
624			goodName		:	goodName,
625			goodNameTail	:	goodNameTail,
626			settle_msg		:	settle_msg
627		},
628		url:"/cms/offline_settle/view_detail.php",
629		success:function( result ) {
630			$("#settle_zone").html(result);
631			$("#settle_zone").show();
632		}
633	});
634	detail_view_process('#settle_zone');
635}
636
637// 관리자 페이지 오프라인 결제 레이어 닫기 처리 함수
638var cancel_offline_settle = function() {
639	field_clear();
640	$("#EDT_CAT").val('TM');
641	BT_CAT();
642	close_detail_view1('#settle_zone');
643}
644
645// 관리자 페이지 교육신청 현장등록 현금영수증 승인/취소 레이어 처리 함수
646function view_cash_settle_detail(mode, mode_sq, mode_type, goodName, userName, usr_sq, edu_fee, usr_email, usr_phone, apply_path, apply_path_etc, edu_request, admin_etc, student_name, school_name, school_year, settle_mode, settle_sq, mode_page) {
647
648	settle_msg = (settle_mode == "settle") ? "처리" : "취소";
649
650	if(confirm(urldecode(userName) + "회원님의 ["+ urldecode(goodName) + "] 교육신청에 대한 현금영수증 " + settle_msg + "를 진행하시겠습니까?")) {
651		if(mode_type == 2) {
652			$("#cash_zone #keyIn_frame").attr("height", "550");
653		} else {
654			$("#cash_zone #keyIn_frame").attr("height", "460");
655		}
656		//팝업 레이어 보이게
657		$("#cash_zone #keyIn_frame").attr("src", "/cms/offline_settle/settle_form2.php?mode="+mode+"&mode_sq="+mode_sq+"&mode_type="+mode_type+"&goodName="+goodName+"&usr_sq="+usr_sq+"&edu_fee="+edu_fee+"&usr_email="+usr_email+"&usr_phone="+usr_phone+"&apply_path="+apply_path+"&apply_path_etc="+apply_path_etc+"&edu_request="+edu_request+"&admin_etc="+admin_etc+"&student_name="+student_name+"&school_name="+school_name+"&school_year="+school_year+"&settle_mode="+settle_mode+"&settle_sq="+settle_sq+"&mode_page="+mode_page);
658		$("#cash_zone").show();
659		detail_view_process2('#cash_zone');
660	}
661}
662
663// 관리자 페이지 공간대관/장비대여 현장등록 현금영수증 승인/취소 레이어 처리 함수
664function view_cash_settle_detail2(mode, mode_sq, goodName, userName, usr_sq, settle_money, settle_mode, settle_sq, mode_page) {
665
666	settle_msg = (settle_mode == "settle") ? "처리" : "취소";
667	mode_msg = (mode == "S") ? "공간대관" : "장비대여";
668
669	if(confirm(urldecode(userName) + "회원님의 ["+ urldecode(goodName) + "] " + mode_msg + "에 대한 현금영수증 " + settle_msg + "를 진행하시겠습니까?")) {
670		$("#cash_zone #keyIn_frame").attr("height", "460");
671
672		//팝업 레이어 보이게
673		$("#cash_zone #keyIn_frame").attr("src", "/cms/offline_settle/settle_form3.php?mode="+mode+"&mode_sq="+mode_sq+"&goodName="+goodName+"&usr_sq="+usr_sq+"&settle_money="+settle_money+"&settle_mode="+settle_mode+"&settle_sq="+settle_sq+"&mode_page="+mode_page);
674		$("#cash_zone").show();
675		detail_view_process2('#cash_zone');
676	}
677}
678
679/*
680// 관리자 페이지 공간대관 현장등록 현금영수증 승인/취소 레이어 처리 함수
681function view_cash_settle_detail2(mode, mode_sq, mode_type, goodName, userName, usr_sq, settle_money, rdate, rtime_list, use_cnt, use_goal, admin_etc, settle_mode, settle_sq, mode_page) {
682
683	settle_msg = (settle_mode == "settle") ? "처리" : "취소";
684
685	if(confirm(urldecode(userName) + "회원님의 ["+ urldecode(goodName) + "] 공간대관에 대한 현금영수증 " + settle_msg + "를 진행하시겠습니까?")) {
686		if(mode_type == 2) {
687			$("#cash_zone #keyIn_frame").attr("height", "550");
688		} else {
689			$("#cash_zone #keyIn_frame").attr("height", "460");
690		}
691		//팝업 레이어 보이게
692		$("#cash_zone #keyIn_frame").attr("src", "/cms/offline_settle/settle_form3.php?mode="+mode+"&mode_sq="+mode_sq+"&goodName="+goodName+"&usr_sq="+usr_sq+"&settle_money="+settle_money+"&rdate="+rdate+"&rtime_list="+rtime_list+"&use_cnt="+use_cnt+"&use_goal="+use_goal+"&admin_etc="+admin_etc+"&settle_mode="+settle_mode+"&settle_sq="+settle_sq+"&mode_page="+mode_page);
693		$("#cash_zone").show();
694		detail_view_process2('#cash_zone');
695	}
696}
697
698// 관리자 페이지 장비대여 현장등록 현금영수증 승인/취소 레이어 처리 함수
699function view_cash_settle_detail3(mode, mode_sq, material_serial, goodName, userName, usr_sq, settle_money, rdate, rtime_list, use_goal, admin_etc, settle_mode, settle_sq, mode_page) {
700
701	settle_msg = (settle_mode == "settle") ? "처리" : "취소";
702
703	if(confirm(urldecode(userName) + "회원님의 ["+ urldecode(goodName) + "] 공간대관에 대한 현금영수증 " + settle_msg + "를 진행하시겠습니까?")) {
704		if(mode_type == 2) {
705			$("#cash_zone #keyIn_frame").attr("height", "550");
706		} else {
707			$("#cash_zone #keyIn_frame").attr("height", "460");
708		}
709		//팝업 레이어 보이게
710		$("#cash_zone #keyIn_frame").attr("src", "/cms/offline_settle/settle_form4.php?mode="+mode+"&mode_sq="+mode_sq+"&material_serial="+material_serial+"&goodName="+goodName+"&usr_sq="+usr_sq+"&settle_money="+settle_money+"&rdate="+rdate+"&rtime_list="+rtime_list+"&use_goal="+use_goal+"&admin_etc="+admin_etc+"&settle_mode="+settle_mode+"&settle_sq="+settle_sq+"&mode_page="+mode_page);
711		$("#cash_zone").show();
712		detail_view_process2('#cash_zone');
713	}
714}
715*/
716
717// 관리자 페이지 현금영수증 레이어 닫기 처리 함수
718function cancel_cash_settle() {
719	close_detail_view2('#cash_zone');
720}
721
722// 상세보기 때 반투명 및 스크롤 따라 움직이게 해주는 함수
723function detail_view_process2(dialog_tag) {
724	//esc키 누르면 화면 잠김 해제
725	$(document).keydown(function(event) {
726		if(event.which=='27') {
727			close_detail_view2(dialog_tag);
728		}
729	});
730
731	//윈도우가 resize될때마다 backLayer2를 조정
732	$(window).resize(function() {
733		layer_process2(dialog_tag);
734	});
735
736	// 스크롤할때마다 위치 갱신
737	$(window).scroll(function () {
738		layer_process2(dialog_tag);
739	});
740
741	layer_process2(dialog_tag);
742	// 화면을 가리는 레이어를 보여준다 (0.5초동안 30%의 농도의 투명도)
743	$(".backLayer2").fadeTo(500, 0.3);
744	// dialogì°½  effect
745	$(dialog_tag).fadeIn(500);
746}
747
748// 레이어팝업 세팅
749function layer_process2(dialog_tag) {
750	// 마스크 사이즈
751	var maskHeight = $(document).height();
752	var maskWidth = $(window).width();
753	$('.backLayer2').css({'width':maskWidth,'height':maskHeight});
754	$(".backLayer2").css("background-color","#848484");
755 
756	// 윈도우 화면 사이즈 구하기
757	var winH = $(window).height();
758	var winW = $(window).width();
759 
760	// 스크롤 높이 구하기
761	var _y =(window.pageYOffset) ? window.pageYOffset
762	: (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop
763	: (document.body) ? document.body.scrollTop
764	: 0;
765
766	if(_y<1){
767		var h = winH/2;
768	}else{
769		var h = winH/2+_y;
770	}
771
772	// dialog창 리사이즈
773	var dial_width =$(dialog_tag).width();
774	var dial_height = $(dialog_tag).height();
775
776	$(dialog_tag).css('top', h-(dial_height/2));
777	$(dialog_tag).css('left', winW/2-(dial_width+33)/2); 
778}
779
780function close_detail_view2(dialog_tag) {
781	//윈도우가 resize될때마다 backLayer를 조정
782	$(window).resize();
783	// 스크롤할때마다 위치 갱신
784	$(window).scroll();
785
786	$(".backLayer2").hide();
787	$(dialog_tag).fadeOut(300);
788}
789
790// 관리자 페이지 정회원결제 레이어 닫기 처리 함수
791function cancel_keyin_settle() {
792	close_detail_view1('#settle_zone');
793}
794
795// 천단위 구분기호 함수
796function addComma(num) {
797  var regexp = /\B(?=(\d{3})+(?!\d))/g;
798  return num.toString().replace(regexp, ',');
799}
800
801// 온라인 결제취소 레이어 처리 함수
802function view_kicc_settle_cancel(mode, mode_sq, userName, product_name, mode_page, mode_search, onOff) {
803	switch(mode) {
804		case "E":			mode_url = "/cms/education/process.json.php";			mode_str = "교육신청";			break;
805		case "S":			mode_url = "/cms/space/process.json.php";				mode_str = "공간대관";			break;
806		case "M":			mode_url = "/cms/material/process.json.php";			mode_str = "장비대여";			break;
807	}
808
809	if(confirm(urldecode(userName) + "회원님의 ["+ urldecode(product_name) + "] " + mode_str + "에 대한 결제취소를 진행하시겠습니까?")) {
810		$.ajax({
811			type : "post",
812			url : mode_url,
813			data : { "TP" : "cancel_settle_form", "mode_sq" : mode_sq, "mode_page" : mode_page, "mode_search" : mode_search, "onOff" : onOff },
814			dataType : "json",
815			async : false,
816			success : function(response) {
817				if (response.result) {
818					//팝업 레이어 보이게
819					$("#cancel_form").html(response.tag);
820					detail_view_process('#settle_cancel_zone');
821				} else {
822					alert (response.msg);
823				}
824			},
825			error : function(data) {
826				alert("잠시 후 다시 시도해주세요.");
827				return false;
828			}
829		});
830	}
831}
832
833// 온라인 결제 취소 레이어 닫기 처리 함수
834function cancel_kicc_settle() {
835	close_detail_view('#settle_cancel_zone');
836}
837
838function close_detail_view(dialog_tag) {
839	//윈도우가 resize될때마다 backLayer를 조정
840	$(window).resize();
841	// 스크롤할때마다 위치 갱신
842	$(window).scroll();
843
844	$(".backLayer").hide();
845	$(dialog_tag).fadeOut(300);
846}
847
848// 환불신청서 출력 함수
849function refund_paper_print(apply_sq) {
850	window.open("refund_paper_print.php?apply_sq=" + apply_sq, '_refund_print', 'top=50, width=800, height=830, scrollbars=1,toolbars=0,statusbar=0');
851}
852
853function fillValue(cnt, fillChar, data,way) {
854	data = String(data);
855	rtn = data;
856	max = parseInt(cnt, 10) - parseInt(data.length, 10);
857
858
859	if(data.length < cnt) {
860		if(way == 0) {
861			for(zzz=1; zzz<=max; zzz++) {
862				rtn = fillChar + rtn;
863			}
864		} else {
865			for(zzz=1; zzz<max; zzz++) {
866				rtn = rtn + fillChar;
867			}
868		}
869	}
870
871	return rtn;
872}
873
874
875// Max 글자 이상 입력못하게 막기
876function text_letter_limit(field, limit, cntField) {
877	var msg = $(field).val();									// 입력중인 내용
878	var msg_len = msg.length;									// 입력한 내용의 전체 길이
879	var limit_byte = 0;											// 글자 수
880	var limit_length = 0;										// substring하기 위해서 사용
881	var parseChar = "";											// 한글자씩 검사한다
882
883	var msg2 = "";												// 글자수를 초과하면 제한할수 글자전까지만 보여준다.
884
885	for(i=0; i< msg_len; i++) 	{
886		parseChar = msg.charAt(i);								// 한글자추출
887		limit_byte++;
888
889		if(limit_byte <= limit)	limit_length = i + 1;			// 전체 크기가 limit를 넘지않으면
890	}
891
892	$(cntField).html(limit_byte + " 글자");
893
894	// 전체길이를 초과하면
895	if(limit_byte > limit) {
896		alert( limit + " 글자를 초과 입력할수 없습니다. \n 초과된 내용은 자동으로 삭제 됩니다. ");
897		msg2 = msg.substr(0, limit_length);
898		msg2_len = msg2.length;
899		$(field).val(msg2);
900
901		limit_byte=0;
902		for(i=0; i< msg2_len; i++) {
903			parseChar = msg2.charAt(i);							// 한글자추출
904			limit_byte++;
905
906			if(limit_byte <= limit)	limit_length = i + 1;		// 전체 크기가 limit를 넘지않으면
907		}
908
909		$(cntField).html(limit_byte + " 글자");
910	}
911	$(field).focus();
912}
913
914
915// timestamp값을 날짜로
916function timestamp2date(timestamp) {
917	var date = new Date(parseInt(timestamp, 10) * 1000);
918	var year = date.getFullYear();
919	var month = date.getMonth()+1;
920	var day = date.getDate();
921
922	var retVal =   year + "-" + (month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day);
923	var rdate = retVal.replace(/-/g, "");
924
925	return rdate;
926}
927
928
929
930// EasyCardK 결제 실패시 오류 메시지 추출 함수
931function get_settle_fail_msg(msg_cd) {
932	switch(msg_cd) {
933		case 'Remote Client Can not Connect! ':		res_cd = '01';		res_msg = 'Localhost(127.0.0.1) 접속 안됨';													break;
934		case 'EasyCardK Sock Timeout !':			res_cd = '02';		res_msg = '처리 시갂 타임아웃(MAX 10분)';													break;
935		case 'Allready Working !':					res_cd = '03';		res_msg = '이전 명령 처리중';																break;
936		case 'Check Request Message !':				res_cd = '04';		res_msg = '요청전문에 "REQ=" 데이터가 없음';												break;
937		case 'NOT TID SETTING':						res_cd = '05';		res_msg = 'EasyCard에 설정된 TID 가 없음, 가맹점 다욲로드 필요';							break;
938		case 'INVALID SIGN DATA !':					res_cd = '06';		res_msg = '서명 데이터가 유효한 값이 아님';													break;
939		case '(KICC BIN) FORMAT ERROR !':			res_cd = '07';		res_msg = '발렛 KICC BIN 데이터 FORMAT 에러';												break;
940		case 'No Transaction history':				res_cd = '08';		res_msg = '저장된 직전 거래 내역 없음';														break;
941		case 'Wrong Request Message !':				res_cd = '09';		res_msg = '전문구분코드가 유효하지 않음';													break;
942		case 'Check the BonusCardNumber':			res_cd = '10';		res_msg = '보너스 카드번호 확인';															break;
943		case 'No transaction number':				res_cd = '11';		res_msg = '웹전송메시지 필드에 거래고유번호 데이터가 없음';									break;
944		case 'This transaction number exists ':		res_cd = '12';		res_msg = '거래고유번호가 EasyCard 거래내역에 존재함.';										break;
945		case 'not Found VAN Info ':					res_cd = '13';		res_msg = 'VAN 정보 불일치, 요청전문에 단말기번호 필드 확인';								break;
946		case 'not Found VAN Info IDX':				res_cd = '14';		res_msg = 'EasyCard에 VAN 정보가 없음, 요청전문에 입력한 TID가 불일치';						break;
947		case 'Reader Not Connect !':				res_cd = '15';		res_msg = '카드리더기 연결 안됨';															break;
948		case ' Unavailable code ! ':				res_cd = '16';		res_msg = '사용할 수 없는 명령';															break;
949		case 'Data Not Recieved (From Device) !':	res_cd = '17';		res_msg = '디바이스로부터 응답 데이터 미수싞';												break;
950		case 'Card is not Pluged in !':				res_cd = '18';		res_msg = 'IC 카드 삽입 안됨';																break;
951		case 'Reader Not Connect ! ':				res_cd = '18';		res_msg = '리더기 연결 안됨';																break;
952		case 'Make Req Message Error!':				res_cd = '20';		res_msg = '요청 전문 에러';																	break;
953		case 'TOKEN VALUE ERROR':					res_cd = '21';		res_msg = '토큰 값이 유효하지 않음';														break;
954		case 'BARCODE VALUE ERROR':					res_cd = '22';		res_msg = '바코드 데이터 전문 포맷 에러';													break;
955		case 'Invalid SignData Type':				res_cd = '23';		res_msg = '서명 데이터 포맷 오류';															break;
956		case 'Invalid SignData':					res_cd = '24';		res_msg = '서명 데이터 포맷 오류';															break;
957		case 'EASYCARDK OPTION ERROR':				res_cd = '25';		res_msg = '통합 갂편결제 전문 포맷 오류';													break;
958		case 'User Cancel !':						res_cd = '26';		res_msg = '사용자 취소';																	break;
959		case 'Time Out !':							res_cd = '27';		res_msg = '대기 타임아웃';																	break;
960		case 'NOT MATCH CARD BIN':					res_cd = '28';		res_msg = '요청전문으로 받은 카드 BIN 과 리딩한 카드가 일치하지 않음';						break;
961		case '지원하지 않는 카드입니다.':			res_cd = '29';		res_msg = '리딩한 카드정보가 유효하지 않음';												break;
962		case 'CASHIC CARD ERR !':					res_cd = '30';		res_msg = '현금IC 카드 에러';																break;
963		case 'Make Request Error! ':				res_cd = '31';		res_msg = '서버에 보내는 요청 전문 만들 때 에러 발생';										break;
964		case 'Check VAN or TID ! ':					res_cd = '32';		res_msg = 'VAN 정보 에러, EasyCard 에 VAN 정보가 없음';										break;
965		case 'Invalid VAN Code !':					res_cd = '33';		res_msg = 'VAN 정보 일치 에러 요청전문에 입력한 일치하는 VAN 정보가 EasyCard에 없음';		break;
966	}
967
968	rtnValue = res_cd + '|@|' + res_msg;
969
970	return rtnValue;
971}
972
973// 클립보드에 주소 복사하는 함수
974function clip() {
975	var url = '';
976	var textarea = document.createElement("textarea");
977	document.body.appendChild(textarea);
978	url = window.document.location.href;
979	textarea.value = url;
980	textarea.select();
981	document.execCommand("copy");
982	document.body.removeChild(textarea);
983	alert("URL이 복사되었습니다.")
984}
985
986
987function add_view_count(board_code, board_sq) {
988	var params = {
989			"TP" : "add_view_count"
990		,	"board_code" : board_code
991		,	"sq" : board_sq
992	}
993
994	$.ajax({
995		type : "post",
996		url : "/board/process.json.php",
997		data : params,
998		dataType : "json",
999		async : false,
1000		success : function(data) {
1001			if (data.status == "OK") {
1002				console.log("조회수 증가");
1003			} else {
1004				alert (data.message);
1005			}
1006		},
1007		error : function(data) {
1008			alert("잠시 후 다시 시도해주세요.");
1009			return false;
1010		}
1011	});
1012}

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.