<!--
////////////////////////////////////////////////////////////////////
// 파일명  : /js/basescript.js
// 기능    : 일반 공통 자바 스크립트 함수
// 함수명  : 동사_명사( [생략가능인수] )
//        : 시작단어의 첫글자 소문자 사용 각 단어의 첫글자는 대문자 사용
////////////////////////////////////////////////////////////////////

/*******************************************************************
// string.trim() : JavsScript String 객체의 공백제거
// str = str.trim();
*******************************************************************/
String.prototype.trim = function()
{
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

/*******************************************************************
// trim : 문자열의 앞뒤 공백 제거
// 리턴값 : 공백제거한 문자열
// str = trim(str);
*******************************************************************/
function trim(str)
{
	return str.trim();
}

/*******************************************************************
// trimStr : 문자열에서 특정 문자열 제거, 대소문자 구분됨
// 인수   : 전체문자열, 제거문자열
// 리턴값 : 특정 문자열을 제거한 문자열
*******************************************************************/
function trimStr(str, rmch)
{	// 정규식의 예약어
	rmch = rmch.replace(".", "\\.");
	rmch = rmch.replace("*", "\\*");
	rmch = rmch.replace("+", "\\+");
	rmch = rmch.replace("^", "\\^");
	rmch = rmch.replace("$", "\\$");
	rmch = rmch.replace("|", "\\|");
	rmch = rmch.replace("(", "\\(");
	rmch = rmch.replace("?", "\\?");
	var re = new RegExp(rmch, "g")
	return str.replace(re, "");
}

function strEscape(str) {
	var xre = new RegExp("  ", "g")
	return str.replace(xre, "");
}

/*******************************************************************
// trimObj : input 객체를 받아 공백 제거후 값을 객체에 저장, 길이 반환
// 인수   : 입력 객체 (document.form.name)
// 리턴값 : 공백 제거한 문자열의 길이
*******************************************************************/
function trimObj(strobj)
{
	var str = strobj.value;
	strobj.value = str.trim();
	return strobj.value.length;
}

/*******************************************************************
// 기능 : 문자열에 포함되어 있는 Html Tag를 &코드로 변환
// parameter : Html 태그 변환 대상 문자열
// 리턴값 : 변환된 문자열
*******************************************************************/
function encodeHtmlTag(str)
{
	str = str.replace(/&/g, "&amp;");
	str = str.replace(/"/g, "&quot;");
	str = str.replace(/</g, "&lt;");
	str = str.replace(/>/g, "&gt;");
	str = str.replace(/'/g, "&#39;");
	return str;
}

/*******************************************************************
// curString : 일정한 길이의 문자열로 축약
// 인수   : str:문자열, cutlen: Byte 수 [, 마지막 연결 문자열]
// 리턴값 : cutlen 보다 문자열의 길이가 큰경우 초과된 글자를 자르고 '...' 추가
*******************************************************************/
function cutString(str, cutlen, endStr)
{
	if(typeof(endStr) == "undefined")
		endStr = "";
	var strlen = str.length;
	var retstr = str;
	var b = 0;
	for(var i = 0; i < strlen; i++) {
		b = (str.charCodeAt(i) > 255) ? b+3:b+1;
		if(cutlen <= b) {
			retstr = str.substring(0, i+1) + endStr;
			break;
		}
	 }
	 return retstr;
}

/*******************************************************************
// onlyCodeForId : 특수문자 키보드 입력 못하게 한다
// 인수   : event 객체
// 리턴값 : boolean
*******************************************************************/
function onlyCodeForId(e) {
	if(window.event){
		if (event.keyCode < 20 ||  (event.keyCode>=48 && event.keyCode<=57)
		  || (event.keyCode>=65 && event.keyCode<=90)
		  || (event.keyCode>=96 && event.keyCode<=105) ) {
		    event.returnValue = true;
		} else {
		    event.returnValue = false;
		}
	} else {
		if ( e.which < 20 || (e.which>=48 && e.which<=57)
		  || (e.which>=65 && e.which<=90)
		  || (e.which>=96 && e.which<=105) ) {
		} else {
			e.preventDefault();
		}
	}
}

/*******************************************************************
// isValidEmail : 올바른 이메일 주소인가 체크
// 인수   : 이메일 주소 문자열
// 리턴값 : 올바른 주소 : true
*******************************************************************/
function isValidEmail(strEmail)
{
	strEmail = strEmail.trim();
	if(strEmail.length > 0) {
		var arrMatch = strEmail.match(/^(\".*\"|[A-Za-z0-9_-]([A-Za-z0-9_-]|[\+\.])*)@(\[\d{1,3}(\.\d{1,3}){3}]|[A-Za-z0-9][A-Za-z0-9_-]*(\.[A-Za-z0-9][A-Za-z0-9_-]*)+)$/);
    	if(arrMatch == null) {
			alert('이메일 주소가 올바르지 않습니다.\n\n다시 확인하시기 바랍니다.');
			return false;
	    }
	}
	return true;
}

/*******************************************************************
// isValidJuminno : 올바른 주민번호인가 체크
// 인수   : 주민번호 앞 6자리 입력필드 속성명 , 주민번호 뒤 7자리 입력필드 속성명
// 리턴값 : 올바른 주민번호 : true
*******************************************************************/
function isValidJuminno(objectName1, objectName2)
{

	var resiFirst = objectName1.value;
	var resiLast = objectName2.value;
	var chk = 0;
	if(resiFirst.length < 6) {
		alert("주민번호가 올바르지 않습니다.");
		objectName1.focus();
		objectName1.select();
		return false;
	}
	if(resiLast.length < 7) {
		alert("주민번호가 올바르지 않습니다.");
		objectName2.focus();
		objectName2.select();
		return false;
	}
	if(resiFirst.match(/[^(\+|\-)?][^\d]+/) != null) {
		alert('주민등록번호에 잘못된 문자가 있습니다.');
		objectName1.focus();
		objectName1.select();
		return false;
	}
	if(resiLast.match(/[^(\+|\-)?][^\d]+/) != null) {
		alert('주민등록번호에 잘못된 문자가 있습니다.');
		objectName2.focus();
		objectName2.select();
		return false;
	}
	var nYear   = resiFirst.substring(0,2);
	var nMondth = resiFirst.substring(2,4);
	var nDay    = resiFirst.substring(4,6);
	var nSex    = resiLast.charAt(0);
	if(resiFirst.length!=6 || nMondth<1 || nMondth>12 || nDay<1 || nDay>31) {
		alert('올바른 주민등록번호가 아닙니다.');
		objectName1.focus();
		objectName1.select();
		return false;
	}
	if(resiLast.length!=7 || (nSex!=1 && nSex!=2 && nSex!=3 && nSex!=4)) {
		alert('올바른 주민등록번호가 아닙니다.');
		objectName2.focus();
		objectName2.select();
		return false;
	}

	var i;
	for(i=0; i < 6; i++) {
		chk += ( (i+2) * parseInt( resiFirst.charAt(i) ));
	}
	for(i=6; i < 12; i++) {
		chk += ( (i%8+2) * parseInt( resiLast.charAt(i-6) ));
	}
	chk = 11 - (chk%11);
	chk %= 10;

	if(chk != parseInt( resiLast.charAt(6))) {
		alert('유효하지않은 주민등록번호입니다!!');
		objectName1.focus();
		return false;
	}
	return true;
}

/*******************************************************************
// isImageExt : 이미지 파일명 확장자 체크
// 인수   : 파일명
// 리턴값 : 올바른 이미지 파일명 : true
*******************************************************************/
function isImageExt(imgfile)
{
	// 확장자가 대소문자 .gif이거나 .jpg인지
	var isMatch = imgfile.match(/\.(gif|jpg)$/i);
	if(isMatch == null)
		return false;
	return true;
}

/*******************************************************************
// isDocExt : 문서 파일명 확장자 체크
// 인수   : 파일명
// 리턴값 : 올바른 이미지 파일명 : true
*******************************************************************/
function isDocExt(imgfile)
{
	// 확장자가 대소문자 .gif이거나 .jpg인지
	var isMatch = imgfile.match(/\.(doc|xls|hwp|pdf|ppt|jpg|gif|txt)$/i);
	if(isMatch == null)
		return false;
	return true;
}

/*******************************************************************
// isNumeric : 문자열이 모두 숫자인지 체크 (앞의 부호 포함)
// 인수   : 문자열
// 리턴값 : 모두 숫자 : true
*******************************************************************/
function isNumeric(str)
{
	var isMatch = str.match(/[^(\+|\-)?][^\d]+/);
	if(isMatch == null)
		return true;
	alert("숫자 이외의 문자는 입력할 수 없습니다.");
	return false;
}

function isNumber(str) {
	var isMatch = str.match(/[^0-9]/);
	if(isMatch == null)
		return true;
	return false;
}
/*******************************************************************
// isOnlyNum : 문자열이 모두 숫자인지 체크 (앞의 부호 포함)
// 인수   : event 객체
// 리턴값 : boolean
*******************************************************************/
function isOnlyNum(e) {
	if(window.event){
		// event.keyCode < 20 : Tab, Enter, shift, Alt key등..
		if ( event.keyCode < 20 || (event.keyCode>=48 && event.keyCode<=57)
		    || (event.keyCode>=96 && event.keyCode<=105)) {
		    event.returnValue = true;
		} else {
		    event.returnValue = false;
		}
	}else{
		if (e.which > 20 && (e.which < 48 || (e.which > 57  && e.which < 96) || e.which > 105) ) {
			e.preventDefault();
		}
	}
}

/*******************************************************************
// isAlphabet : 문자열이 모두 알파벳인지 체크
// 인수   : 문자열
// 리턴값 : 모두 영문 : true
*******************************************************************/
function isAlphabet(str)
{
	var isMatch = str.match(/[^a-zA-Z]/);
	if(isMatch == null)
		return true;
	alert("영문 이외의 문자는 입력할 수 없습니다.");
	return false;
}

/*******************************************************************
// isAlphaNumeric : 문자열이 모두 알파벳 & 숫자인지 체크
// 인수   : 문자열
// 리턴값 : 모두 영문 : true
*******************************************************************/
function isAlphaNumeric(str)
{
	var isMatch = str.match(/[^a-z0-9A-Z]/);
	if(isMatch == null)
		return true;
	alert("영문 및 숫자 이외의 문자는 입력할 수 없습니다.");
	return false;
}

/*******************************************************************
// 기능 : 문자열에 악성코드 존재 여부 체크
// parameter : str
// 리턴값 : 악성코드 존재 여부
*******************************************************************/
var g_strcritical = "<iframe|<frame|<script|<link|<embed|<textarea|<alert";
function checkHasCritical(str)
{
	var re = new RegExp(g_strcritical, "gi");
	if(str.match(re) == null)
		return false;
	return true;
}

/*******************************************************************
// limitStrlen : 입력 문자 길이 제한
// 인수   : 입력 객체 (document.form.name), 최대 Byte 수
// 리턴값 : 최대길이를 초과하는경우 초과된 글자를 삭제한다.
*******************************************************************/
function limitStrlen(obj, maxlimit)
{
	var i, b = 0;
	var val = obj.value;
	var len = val.length;
	for(i = 0; i < len; i++) {
		b = (val.charCodeAt(i) > 255) ? b+2:b+1;
		if(b > maxlimit)
			break;
	}
	if(b > maxlimit) {
		alert("최대 " + maxlimit + " Byte(한글:" + maxlimit/2 + "자, 영문:" + maxlimit + "자)까지 입력하실 수 있습니다.");
		obj.value = val.substring(0, i);
		obj.focus();
	}
}
/*******************************************************************
// limitStrlen2 : 입력 문자 길이 제한
// 인수   : 입력 객체 (document.form.name), 최대 Byte 수
// 리턴값 : 최대길이 초과시 false, 아니면 true
*******************************************************************/
function limitStrlen2(val, maxlimit)
{
	var i, b = 0;
	var len = val.length;
	for(i = 0; i < len; i++) {
		b = (val.charCodeAt(i) > 255) ? b+2:b+1;
		if(b > maxlimit)
			break;
	}
	if(b > maxlimit) {
		alert("최대 " + maxlimit + " Byte(한글:" + maxlimit/2 + "자, 영문:" + maxlimit + "자)까지 입력하실 수 있습니다.");
		return false;
	}
	return true;
}

/*******************************************************************
// moveNextObject : 현재 객체의 글자수를 체크 다음객체로 커서 포커스 이동
// 인수   : 현재 객체, 문자열 길이, 다음 객체
// 리턴값 : 모두 영문 : true
*******************************************************************/
function moveNextObject(fromobj, toobj, len)
{
	if(fromobj.value.length >= len)
		toobj.focus();
}

function moveNextFocus(formname, nowObj, nextObj) {
	var sForm = 'document.'+ formname +'.'
	var oNow = eval(sForm + nowObj);
	if (typeof oNow == 'object') {
		if ( oNow.value.length == oNow.maxLength) {
			var oNext = eval(sForm + nextObj);
			if ((typeof oNext) == 'object')
				oNext.focus();
		}
	}
}

/*******************************************************************
// popupCenterWindow : 팝업창을 화면 중앙에 띄움
// 인수 : URL, 창이름, 넓이, 높이, 스크롤 여부[, 그외 인수(",status=yes" - 콤마필요)]
// 리턴값 : window 객체
*******************************************************************/
function popupCenterWindow(pageurl, winname, w, h, scroll, attr)
{	// attr = ',resizable=no, status=yes';
	if(typeof(attr) == "undefined")
		attr = "";
	var leftpos = (screen.width) ? (screen.width-w)/2 : 0;
	var toppos = (screen.height) ? (screen.height-h)/2 : 0;
	var settings = 'height='+h+',width='+w+',top='+toppos+',left='+leftpos+',scrollbars='+scroll + attr;
	var win = window.open(pageurl, winname, settings);
	return win;
}

/*******************************************************************
// popupMouseWindow : 팝업창을 마우스의 현재 위치에 띄움
// 인수 : URL, 창이름, 넓이, 높이, 스크롤 여부[, 그외 인수]
// 리턴값 : window 객체
*******************************************************************/
function popupMouseWindow(pageurl, winname, w, h, scroll, attr)
{	// attr = ',resizable=no, status=yes';
	if(typeof(attr) == "undefined")
		attr = "";
	var leftpos = event.x + window.screenLeft;
	var toppos = event.y + window.screenTop;
	var settings = 'height='+h+',width='+w+',top='+toppos+',left='+leftpos+',scrollbars='+scroll + attr;
	var win = window.open(pageurl, winname, settings);
	return win;
}

/*******************************************************************
// popupImage : 이미지 크게보기 팝업창
// 인수 : 이미지 파일 URL[, 가로위치, 세로위치]
*******************************************************************/
function popupImage(imgname, t, l)
{
	if(typeof(t) == "undefined")
		t = 0;
	if(typeof(l) == "undefined")
		l = 0;
	var leftpos = event.x + window.screenLeft + l;
	var toppos =  event.y + window.screenTop + t;

	var htmlz = "<html><head><title>이미지크게보기</title><style>body{margin:0;cursor:pointer;}</style></head>";
	htmlz += "<body scroll=auto onload='width1=document.getElementById(\"Timage\").width+12;if(width1>1024)width1=1024;height1=document.getElementById(\"Timage\").height+30;if(height1>768)height1=768;top.window.resizeTo(width1,height1);' onclick='top.window.close();'>";
	htmlz += "<img src='"+imgname+"' title='클릭하시면 닫힙니다.' name='Timage' id='Timage'></body></html>";
	var imagez = window.open('', "image", "width="+ 100 +", height="+ 100 + ", top=" + toppos + ",left=" + leftpos + ",scrollbars=no,resizable=no,toolbar=0,menubar=0,menu=0,location=0,directories=0,status=no");
	imagez.document.open();
	imagez.document.write(htmlz);
	imagez.document.close();
}

/*******************************************************************
// resizeFrame : 프레임 높이 조절

*******************************************************************/
// frameLoadTimer : 프레임 페이지 로딩완료 체크 타이머
var frameLoadTimer;
function resizeFrame()
{	// 0.1초마다 resizeRetry() 호출
	frameLoadTimer = 1;
	resizeRetry("true");
}

function resizeRetry(bfirst)
{
	if(frameLoadTimer) {
		if(document.body.readyState == "complete") {
			clearInterval(frameLoadTimer);
			frameLoadTimer = 0;
			var ifWidth = document.body.scrollWidth;// + (document.body.offsetWidth-document.body.clientWidth);
			var ifHeight = parseInt(document.body.scrollHeight);
			self.resizeTo(ifWidth,ifHeight);
		} else {
			if(bfirst == "true")
				frameLoadTimer = setInterval('resizeRetry()',100);
		}
	}
}
//-->