/* ======================================================================

구성 및 추가작성 :	조정학 ; 2000.6.3
용            도 :	사용자 입력란의 validation check
 H I S T O R Y   :	07/08/2000 Jeong-Hark Cho 전체소스정리
 		 :	08/08/2000 Jeong-Hark Cho checkBirth추가
 		 :	11/08/2000 Jeong-Hark Cho IsCommaAndInt추가
 		 :				  IsCommaAndAge추가
 		 :	10/10/2000 Jeong-Hark Cho TrimString추가
 		 :	25/10/2000 Jeong-Hark Cho IsBupinId추가
 		 :				  IsSaupId추가

====================================================================== */

IE4 = (document.all)    ? 1 : 0;
NS4 = (document.layers) ? 1 : 0;

/** =============================================
Return : object
Comment: 객체이름(objName)을 받아 해당 객체를 반환한다.
Usage  : obj = getObj(arguments[i]);
---------------------------------------------- */
function getObj(objName)
{
	obj = (IE4 == 1) ? eval("document.all." + objName) : document.forms[0].elements[objName];
	return obj;
}
//===============================================

/* ======================================================================

  FUNCTION: Fix.  소숫점 자리수 지정 .
		  입력되는 값은 숫자이어야 한다.  .

====================================================================== */
function Fix(myVal, decPlaces) {
	var newVal = myVal
	var returnVal = 0;

	var test = (Math.round(myVal*Math.pow(10,decPlaces))).toString() //Math.round(myVal*Math.pow(10,decPlaces))/Math.pow(10,decPlaces)
	if (decPlaces > 0)
		returnVal = test.substring(0,test.length-decPlaces) + "." + test.substring(test.length-decPlaces,test.length);
	else if (decPlaces == 0)
		returnVal = test.substring(0,test.length-decPlaces);
	else
		returnVal = myVal;
alert(returnVal);
	return returnVal;
} // END Fix

/* ======================================================================
FUNCTION:       IsAlpah
RETURN:         알파벳으로만 이루어져야 true
====================================================================== */
function IsAlpha( str ) {

	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	str += "";	// convert to a string for performing string comparisons.

	// Loop through string one character at time,  breaking out of for
	// loop when an non Alpha character is found.
  	for (i = 0; i < str.length; i++) {
		// Alpha must be between "A"-"Z", or "a"-"z"
		if ( !( ((str.charAt(i) >= "a") && (str.charAt(i) <= "z")) ||
      			((str.charAt(i) >= "A") && (str.charAt(i) <= "Z")) ) ) {
         				isValid = false;
         				break;
      			}
   } // end for loop
	return isValid;
}  // end IsAlpha

/* ======================================================================
FUNCTION:	IsAlphaNum
RETURN:  	숫자 또는 알파벳만으로 이루어져야 true
====================================================================== */
function IsAlphaNum( str ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	// convert to a string for performing string comparisons.
   	str += "";

	// Loop through length of string and test for any alpha numeric
	// characters
   	for (i = 0; i < str.length; i++)
   	{
			// Alphanumeric must be between "0"-"9", "A"-"Z", or "a"-"z"
      	if (!(((str.charAt(i) >= "0") && (str.charAt(i) <= "9")) ||
      			((str.charAt(i) >= "a") && (str.charAt(i) <= "z")) ||
      			((str.charAt(i) >= "A") && (str.charAt(i) <= "Z"))))
			{
				isValid = false;
				break;
			}
   	} // END for

   	return isValid;
}  // end IsAlphaNum

/* ======================================================================
FUNCTION:	IsAlphaNumOrUnderscore
RETURN:  	숫자와 알파벳 그리고 '_'만을 포함하면 true
====================================================================== */
function IsAlphaNumOrUnderscore( str ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	str += "";	// convert to a string for performing string comparisons.
	// Loop through string one character at a time. If non-alpha numeric
	// is found then, break out of loop and return a false result

	for (i = 0; i < str.length; i++)
   	{
		// Alphanumeric must be between "0"-"9", "A"-"Z", or "a"-"z"
      		if ( !( ((str.charAt(i) >= "0") && (str.charAt(i) <= "9")) ||
      			((str.charAt(i) >= "a") && (str.charAt(i) <= "z")) ||
      			((str.charAt(i) >= "A") && (str.charAt(i) <= "Z")) ||
      			(str.charAt(i) == "_") ) )
      		{
   				isValid = false;
         		break;
      		}

	} // END for

	return isValid;

}  // end IsAlphaNumOrUnderscore

/* ======================================================================
FUNCTION:  	IsInt
RETURN:  	0-9 사이 정수만 포함되어야 true
		allowNegatives가 true일경우 '-'로 시작하는 정수는 true
====================================================================== */
function IsInt( numstr, allowNegatives ) {
	// Return immediately if an invalid value was passed in
	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
		return false;

	// Default allowNegatives to true when undefined or null
	if (allowNegatives+"" == "undefined" || allowNegatives+"" == "null")
		allowNegatives = true;

	var isValid = true;

	// convert to a string for performing string comparisons.
	numstr += "";

	// Loop through string and test each character. If any
	// character is not a number, return a false result.
 	// Include special case for negative numbers (first char == '-').
	for (i = 0; i < numstr.length; i++) {
    	if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9") || (numstr.charAt(i) == "-"))) {
       	isValid = false;
       	break;
		} else if ((numstr.charAt(i) == "-" && i != 0) ||
				(numstr.charAt(i) == "-" && !allowNegatives)) {
       	isValid = false;
       	break;
      }

   } // END for

   	return isValid;
}  // end IsInt

/* ======================================================================
FUNCTION:  	IsValidYear
RETURN:  	날짜형태인지 체크후 boolean 리턴
CALLS:		IsInt()
====================================================================== */
function IsValidYear(year){

	var isValid=false;
	today = new Date();
	//if(!IsBlank(year)){
		if(IsInt(year)){
			if(year.length==4 && (year.charAt(0)==1 || year.charAt(0)==2) && (year.charAt(1)==0 || year.charAt(1)==9)){
				if(year>1000) isValid = true;
				}
			}
	//}
	return isValid;
}

/** =============================================
Return : boolean
Comment: 숫자로 구성된 문자열 체크
Usage  :
---------------------------------------------- */
function fn_isNumStr(no)
{
	var    i;
	var    str = null;

	str = new String(no);

	if(str == null || str.length == 0)
		return false;

	for(ii = 0; ii < str.length; ii++)
		if(!fn_isInt(str.charAt(ii)))
			return false;
	return true;
}
//===============================================

/** =============================================
Return : boolean
Comment: 한 글자가 숫자인지 체크
Usage  :
---------------------------------------------- */
function fn_isInt(value)
{
	var   j;
	var   _intValue   = '0123456789';

	for(j=0;j<_intValue.length;j++)
		if(value == _intValue.charAt(j)) {
			return true;
		}
	return false;
}
//===============================================


/* ======================================================================
FUNCTION:  	IsNum
RETURN:  	숫자면 true, 부동형,negative형 인정
====================================================================== */
function IsNum( numstr ) {
	// Return immediately if an invalid value was passed in
	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
		return false;

	var isValid = true;
	var decCount = 0;		// number of decimal points in the string

	// convert to a string for performing string comparisons.
	numstr += "";

	// Loop through string and test each character. If any
	// character is not a number, return a false result.
 	// Include special cases for negative numbers (first char == '-')
	// and a single decimal point (any one char in string == '.').
	for (i = 0; i < numstr.length; i++) {
		// track number of decimal points
		if (numstr.charAt(i) == ".")
			decCount++;

    	if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9") ||
				(numstr.charAt(i) == "-") || (numstr.charAt(i) == "."))) {
       	isValid = false;
       	break;
		} else if ((numstr.charAt(i) == "-" && i != 0) ||
				(numstr.charAt(i) == "." && numstr.length == 1) ||
			  (numstr.charAt(i) == "." && decCount > 1)) {
       	isValid = false;
       	break;
      }
//if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9")) ||
   } // END for

   	return isValid;
}  // end IsNum
/* ======================================================================
FUNCTION:  	IsValid5DigitZip
RETURN:  	6자리 숫자로만 입력된 우편번호면 true
CALLS:		IsBlank(), IsInt()
====================================================================== */
function IsValid6DigitZip( str ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	str += "";
   if (IsBlank(str) || (str.length != 6) || !IsInt(str, false))
		isValid = false;

   return isValid;
} // end IsValid6DigitZip
/* ======================================================================
FUNCTION:  	IsValid3Plus3DigitZip
RETURN:  	숫자 3자리 '-' 숫자 3자리 형태의 우편번호면 true
CALLS:		IsBlank(), IsInt()
====================================================================== */
function IsValid3Plus3DigitZip( str ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	str += "";

   	if (IsBlank(str) || (str.length != 7) ||
			!IsInt(str.substring(0,2), false) || str.charAt(3) != '-' ||
			!IsInt(str.substring(4,6), false))
		isValid = false;
   	return isValid;
} // end IsValid3Plus3DigitZip

/* ======================================================================
FUNCTION:  	IsValidEmail
RETURN:  	올바른 email포맷이면 true
CALLS:		IsBlank(), IsAlpha()
====================================================================== */
function IsValidEmail( str ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;
	
	var han = str.indexOf("hanmail");		
	var dau = str.indexOf("daum");
	var sum = eval(han+dau);
	if(sum != '-2')
	{
		alert('다음메일은 사용하실 수 없습니다.');
		return false;	
	}

	str += "";

	namestr = str.substring(0, str.indexOf("@"));  // everything before the '@'
	domainstr = str.substring(str.indexOf("@")+1, str.length); // everything after the '@'

	// Rules: namestr cannot be empty, or that would indicate no characters before the '@',
	// domainstr must contain a period that is not the first character (i.e. right after
	// the '@').  The last character must be an alpha.
   	if (IsBlank(str) || (namestr.length == 0) ||
			(domainstr.indexOf(".") <= 0) ||
			(domainstr.indexOf("@") != -1) ||
			!IsAlpha(str.charAt(str.length-1)))
		isValid = false;

   	return isValid;
} // end IsValidEmail
/* ======================================================================
FUNCTION:  	IsValidPhone
RETURN:  	국번이 없을경우는 incAreaCode를 false로 두거나 생략하고
                7자리의 숫자로만 이루어져야 true
		국번이 있을경우 incAreaCodes는 true로 두고
		9자리나 10자리의 숫자로만 이루어져야 true
CALLS:		StripNonNumeric()
====================================================================== */
function IsValidPhone( str, incAreaCode ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	// Set default value for incAreaCode to false, if undefined or null
	if (incAreaCode+"" == "undefined" || incAreaCode+"" == "null")
		incAreaCode = false;

	var isValid = true;

	str += "";

	// After stripping out non-numeric characters, such as dashes, the
	// phone number should contain 7 digits (no area code) or 10 digits (area code)
	str = StripNonNumeric(str+"");
	if (incAreaCode && (str.length ==9 || str.length ==10))
	       isValid = true;
	else isValid=false;


        if (!incAreaCode && str.length != 7)
		isValid = false;
alert(isValid);alert(str.length);
   	return isValid;
} // end IsValidPhone
/* ======================================================================
FUNCTION:  	IsValidSSN
RETURN:  	true, if the string contains digits and dashes in the form 111-12-3456;
				true, if the string contains a 9-digit number and incDashes is false;
				false, otherwise
CALLS:		IsInt()
====================================================================== */
function IsValidSSN( str, incDashes ) {
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	// Set default value for incDashes to true, if undefined or null
	if (incDashes+"" == "undefined" || incDashes+"" == "null")
		incDashes = true;

	str += "";	// make sure it's a string

	if (!incDashes && (!IsNum(str) || str.length != 9))
		isValid = false;

	var part1 = str.substring(0,3);
	var part2 = str.substring(4,6);
	var part3 = str.substring(7,str.length);

	// Ensure that the first part is a number and 3 digits long,
	// the second part is a number and 2 digits long,
	// the third part is a number and 4 digits long, e.g. 111-22-3333
	if (incDashes && ((!IsInt(part1, false) || part1.length != 3) ||
			(!IsInt(part2, false) || part2.length != 2) ||
			(!IsInt(part3, false) || part3.length != 4)) )
		isValid = false;

   	return isValid;
} // end IsValidSSN


/* ======================================================================
FUNCTION:	IsBlank
RETURN:  	문자가 null, undefined 이거나 공백 "" 미면 true
      		false, otherwise.
CALLS:		IsNull(), IsUndef()
====================================================================== */
function IsBlank( str ) {
	var isValid = false;

 	if ( IsNull(str) || IsUndef(str) || (str+"" == "") )
 		isValid = true;

	return isValid;
}  // end IsBlank
/* ======================================================================
FUNCTION:	IsNull
RETURN:  	값이 null이면 true
====================================================================== */
function IsNull( val ) {
	var isValid = false;

 	if (val+"" == "null")
 		isValid = true;

	return isValid;
}  // end IsNull
/* ======================================================================
FUNCTION:	IsUndef
RETURN:  	값이 undefined면 true
====================================================================== */
function IsUndef( val ) {
	var isValid = false;

 	if (val+"" == "undefined")
 		isValid = true;

	return isValid;
}  // end IsUndef

/* ======================================================================
FUNCTION:	StripNonNumeric
RETURN: 	0-9 사이의 숫자만 추출하여 스트링으로 리턴;
		잘못된 입력은 null 리턴
====================================================================== */
function StripNonNumeric( str ) {
	var 	resultStr = "";

	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str == null)
		return null;

	// Make sure the argument is a string
	str += "";

	// Loop through entire string, adding each character from the original
	// string if it is a number
	for (var i=0; i < str.length; i++)
	{
   	if ( (str.charAt(i) >= "0") && (str.charAt(i) <= "9") )
      			resultStr = resultStr + str.charAt(i);

   } // end for loop
   return resultStr;
}  // end StripNonNumeric


/* ======================================================================
FUNCTION:	DetermineCurrentBrowser
RETURN:		현재브라우저의 종류
====================================================================== */
function DetermineCurrentBrowser() {
	var current_browser = "";
	var bwr = navigator.appName;
	var ver = parseInt(navigator.appVersion, 10);

	if ( bwr == "Netscape" && ver == 4 ) current_browser = "Netscape 4.0";
	else if ( bwr == "Netscape" && ver == 3 ) current_browser = "Netscape 3.0";
	else if ( bwr == "Netscape" && ver == 2 ) current_browser = "Netscape 2.0";
	else if ( bwr == "Microsoft Internet Explorer" && ver == 3 ) current_browser = "MSIE 3.0";
	else if ( bwr == "Microsoft Internet Explorer" && ver == 4 ) current_browser = "MSIE 4.0";
	else current_browser = "Other";

	return current_browser;
} // end DetermineCurrentBrowser

/* ======================================================================
FUNCTION:	viewObject
INPUT:		obj (object): 볼 오브젝트
		objName (string): 오브젝트 명the name of the object that corresponds to obj
RETURN:  	A string containing HTML showing the list of object properties;
		returns null if invalid arguments were passed
DESC:		This function loops through any JavaScript/JScript object and
		and returns HTML that will display all properties of the object
		between two HTML horizontal rules.
====================================================================== */
	function viewObject (obj, objName) {
		var outputStr = "";

		// Return immediately if an invalid value was passed in
		if (obj+"" == "undefined" || obj+"" == "null")
			return null;
		// Set default object name if none is provided
		if (objName+"" == "undefined" || objName+"" == "null")
			objName = "[Object]";

	  	outputStr = "<BR><HR><BR>\n";
	  	outputStr += "\n<BR><B>"+objName+" Properties: </B><BR>";
	  	for (prop in obj) {
			outputStr += "\n<BR>"+objName+"."+prop+" = "+obj[prop];
	  	}
	  	outputStr += "<BR><HR><BR>\n";
	        document.writeln(outputStr);
	  	return outputStr;
	} // end viewObject

/* ======================================================================
FUNCTION:	IsIdValid
DESC:		주민번호체크
RETURN:		boolean
====================================================================== */

function IsIdValid(jumin){
	var  j=9
	var  id_chk=0
	tmp = false;
	var str=jumin;
	object =  new Array(13)
	for(var i=0;i < 13;i++) {
		object[i] = str.substring(i,i+1)
	}
	var chkdigit = str.substring(12, 13)
	for(var i=0;i < 12;i++){
	    if( i == 8 )
	    j = 9
	    object[i]=object[i]*j
	    j--
		id_chk +=object[i]
	}
    if(((id_chk%11 == 0) && (chkdigit == 1)) || ((id_chk%11 ==10)&& (chkdigit ==0))){
         return 1;
    }
    else if((id_chk %11 != 0) && (id_chk % 11 != 10 ) && (id_chk % 11 == chkdigit)){
         return 1;
    }
    else{
         return 0;
    }
}


/* ======================================================================
FUNCTION:	IsBupinId
DESC:		법인번호를 검사한다
RETURN:		boolean
====================================================================== */

function IsBupinId(str)
{
	var check = 1;
	var no = new Array(13);
	var sum = 0;
	var rem = 0;
	var m = 0;

	if(IsBlank(str)) return false;

	m = parseInt(str.charAt(12)); // 번호의 마지막 숫자 얻기

	for(var i=0; i<12; i++) no[i] = parseInt(str.charAt(i)); // 1~12까지 숫자 얻기

	for(var i=0; i<12; i++) {
		sum += (check * no[i]);

		check = (check==1) ? 2 : 1;
	}

	rem = sum % 10; // 나머지 구하기

	rem = 10 - rem;

	rem = (rem >= 10) ? rem - 10 : rem;

	// 마지막번째와 10-rem의 값을 비교

	if(m == rem) return true; // 정확
	else return false; // 부정확
}

/* ======================================================================
FUNCTION:	IsSaupId
DESC:		사업자등록번호를 검사한다
RETURN:		boolean
====================================================================== */
function IsSaupId(str)
{
	var check = 0;
	var no = new Array(10);
	var sum = 0;
	var tmpNo = 0;
	var tmpStr = 0;

	if(IsBlank(str)) return false;

	for(var i=0; i<10; i++) no[i] = parseInt(str.charAt(i)); // 1~10까지 숫자 얻기

	for(var i=0; i<10; i++) {
		if((i%3)==0)
			tmpNo = no[i] + 0;
		else if ( (i%3) == 1)
			tmpNo = no[i] * 3;
		else if ( (i%3) == 2)
			tmpNo = no[i] * 7;

		if(i==8)
		{
			tmpNo = no[i] * 5;

			if(tmpNo > 9) {
				tmpStr = tmpNo + "";
				tmpNo = parseInt(tmpStr.charAt(0)) + parseInt(tmpStr.charAt(1));
			}
		}

		sum += tmpNo;
	}

	if( (sum % 10) == 0) return true; // 정확
	else return false; // 부정확
}


/* ======================================================================
FUNCTION:	AgeCal
DESC:		주민번호로부터 나이계산
RETURN:		나이
====================================================================== */

function AgeCal(jumin1, str)
{   //나이계산하는 함수
   //  today = new Date();

     var toyy = document.hiddenform.toYear.value;
	 var tomm = document.hiddenform.toMonth.value;
	 var todd = document.hiddenform.curDate.value;


	 var datechk = false;
	 //if (toyy < 50 )
	 //   toyy = 100 + eval(toyy);
     var juyy = eval(jumin1.substring(0,2));
     var jumm = eval(jumin1.substring(2,4));
     var judd = eval(jumin1.substring(4,6));
     var juwm = eval(str);

	 if(juwm==1||juwm==2)
		juyy = juyy + 1900;
	 if(juwm==3||juwm==4)
		juyy = juyy + 2000;

	 if (((tomm ==1 || tomm == 3 || tomm == 5 || tomm==7 || tomm ==8 || tomm == 10 || tomm == 12 ) && todd == 31) || ((tomm ==4 || tomm ==6 || tomm == 9 || tomm == 11) && todd==30 ) || (tomm == 2 && (todd==28 || todd == 29 )))
	     datechk = true;
	 var caldd = eval(todd) - eval(judd);
	 if ( caldd < 0 && datechk == false)
	      tomm = tomm - 1
      var calmm = eval(tomm) - eval(jumm);
	  if (calmm < 0 ) {
	     toyy = toyy - 1 ;
		 calmm = calmm + 12;
	  }
	  calyy = eval(toyy) - eval(juyy);
	  if (calmm > 5 )
	     calyy = calyy + 1;
	 //  alert("calyy : " + calyy);
          return calyy;

}

/* ======================================================================
FUNCTION:	getSex
DESC:		주민번호 뒤자리로 성별 가져오기
RETURN:		남자   "1",  여자   "2"
====================================================================== */
function getSex(str){

	if(str.substring(0, 1)%2 != 0 )	return 1;
	if(str.substring(0, 1)%2 == 0 )	return 2;
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//str은 key를 포함한 문자열, key는 문자열을 나누는 문자, num은 나눈 나머지의 문자열 의 num째 문자열 리턴
function  cutoffString(str, key, num){
	var UsrString;
	UsrString = str;

	var  usrArray = UsrString.split(key);
	return usrArray[num-1];
}

/* ======================================================================
FUNCTION:	makeBirth
DESC:		주민번호 처음 6자리로 생년월일 만들기
RETURN:
====================================================================== */

function makeBirth(str){
	var birthday = "";
	var tmp = "";

	tmp = str.substring(6, 7);
	if( tmp > 2 ) birthday = "20" + str.substring(0, 2);
	else birthday = "19" + str.substring(0, 2);
	birthday += "/" + str.substring(2,4);
	birthday += "/" + str.substring(4,6);

	return birthday;
}

/* ======================================================================
FUNCTION:	checkBirth , LeafYearCheck
DESC:		19000909형태의 4자리연도 2자리월 2자리일의 형식이
		올바른지 체크
RETURN:		boolean
====================================================================== */

function checkBirth(str){
	var valid = true;
	var msg="";
	var birth = str;
	var yyyy = birth.substring(0,4);
	var mm = birth.substring(4,6);
	var dd = birth.substring(6,8);
	var months = new Array("", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12");

	if ((IsBlank(birth) || birth.length != 8) || !IsInt(birth, false)){
	msg+="예)19700101\n";
		valid= false;
		return valid;
	 }
	if(!(yyyy.substring(0,2)=="19" || yyyy.substring(0,2)=="20")){
	msg+="년도입력오류!\n";
		valid= false;
	}

	if(mm>12 || mm<1){
	msg+="월입력오류!(1~12)\n";
		valid =  false;
	}

	if ((mm != "02") && (mm == "04" || mm == "06" || mm == "09" || mm == "11") && dd > "30") {
	msg+= months[mm] + "월의 마지막 날은 30일 입니다.\n";
		valid = false;
	}else if ((mm != 02) && (dd > 31)) {
	msg+= months[mm] + "월의 마지막 날은  31일 입니다.\n";
		valid = false;
	}

	if(mm == 02)
	{
	  var leap;
	  leap = LeafYearCheck(yyyy);
	  if(leap == true && dd > 29)
	  {
	    msg+= yyyy + "년의  2월은 29일 까지 있습니다.";
	    valid = false;
	  }
	  else if(leap == false && dd > 28)
	  {
	    msg+= yyyy + "년의 2월은 28일 까지 있습니다.";
	    valid = false;
	  }
	}

	if(dd>31 || dd<1){
	msg+="일입력오류!(1~31)\n";
		valid= false;
	}
	if(valid==false){
		alert(msg);
	}
	return valid;
}

function LeafYearCheck(yyyy)
{
	if((yyyy % 4) == 0)
	{
		if((yyyy % 100) == 0)
		{
			if((yyyy % 400) == 0)  return true;
			else return false;
		}
		else return true;
	}

	return false;
}
/* ======================================================================
FUNCTION:	getCurrentBrowserStr

INPUT: 		none.

RETURN:		a string indicating the current browser

DESC:			This function is used with client-side JavaScript to detect
				the brand and version of the user's browser.  Detects only
				Netscape and Microsoft browsers.  Returns "Other" if a different
				brand is detected.

====================================================================== */
	function getCurrentBrowserStr() {

		var current_browser = "";
		var bwr = new String(navigator.appName);
		var ver = parseInt(navigator.appVersion, 10);

		if(ver+"" != "NaN")
		{
		  if ( bwr.toUpperCase() == "NETSCAPE" && ver == 5 ) current_browser = "Netscape 5.0";
		  else if ( bwr.toUpperCase() == "NETSCAPE" && ver == 4 ) current_browser = "Netscape 4.0";
		  else if ( bwr.toUpperCase() == "NETSCAPE" && ver == 3 ) current_browser = "Netscape 3.0";
		  else if ( bwr.toUpperCase() == "NETSCAPE" && ver == 2 ) current_browser = "Netscape 2.0";
		  else if ( bwr.toUpperCase() == "MICROSOFT INTERNET EXPLORER" && ver == 3 ) current_browser = "MSIE 3.0";
		  else if ( bwr.toUpperCase() == "MICROSOFT INTERNET EXPLORER" && ver == 4 ) current_browser = "MSIE 4.0";
		  else if ( bwr.toUpperCase() == "MICROSOFT INTERNET EXPLORER" && ver == 5 ) current_browser = "MSIE 5.0";
		  else current_browser = "Other";
	   }
		return current_browser;
	} // end getCurrentBrowserStr

/* ======================================================================
FUNCTION:  	IsDotAndInt
RETURN:  	0-9 사이 정수와 맨앞과 맨뒤를 제외한 위치의 마침표로
		이루어지면  true
====================================================================== */
function IsDotAndInt(str) {

	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return true;
	var isValid = true;


	str += "";

	for (i = 0; i < str.length; i++) {
	    	if (!((str.charAt(i) >= "0") && (str.charAt(i) <= "9") || (str.charAt(i) == "."))) {
	       		isValid = false;
	       		break;
		} else if (str.charAt(i) == "." && (i == 0 || i == str.length)) {
	       		isValid = false;
	       	break;
     		 }

  	} // END for

   	return isValid;
}
/* ======================================================================
FUNCTION:  	IsCommaAndInt
RETURN:  	0-9 사이 정수와 맨앞과 맨뒤를 제외한 위치의 콤마로
		이루어지면  true
====================================================================== */
function IsCommaAndInt(str) {

	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return true;
	var isValid = true;


	str += "";

	for (i = 0; i < str.length; i++) {
	    	if (!((str.charAt(i) >= "0") && (str.charAt(i) <= "9") || (str.charAt(i) == ","))) {
	       		isValid = false;
	       		break;
		} else if (str.charAt(i) == "," && (i == 0 || i == str.length)) {
	       		isValid = false;
	       	break;
     		 }

  	} // END for

   	return isValid;
}
/* ======================================================================
FUNCTION:  	IsCommaAndAge
RETURN:  	특정나이(age) 이하의 나이와 맨앞과 맨뒤를 제외한 위치의 콤마로
		이루어지면  true
====================================================================== */
function IsCommaAndAge(agestr,age){
	var valid = true;
	var temp = true;

	if(IsCommaAndInt(agestr)){
	    	var tokens = agestr.split(",");
	    	for(i=0;i<tokens.length;i++){

	    		if(!IsBlank(tokens[i])){
	    			if(tokens[i] < 0 || parseInt(tokens[i]) > age) {
	    				temp = false;
	    			}
	    		}
	    		if(temp==false) valid = false;
	    	}
	}else{
		valid = false;
	}
	return valid;
}

/* ======================================================================
FUNCTION:  	TrimString
RETURN:  	String속의 스페이스를 삭제한후 String을 리턴
====================================================================== */

function TrimString(str){
	var rtnStr="";
	for(i=0;i<str.length;i++){
		if(str.charAt(i) != " "){
		rtnStr = rtnStr +str.charAt(i);
		}
	}
	return rtnStr;
}
/* ======================================================================
FUNCTION:  	IsNum2
RETURN:  	정수이면(0~9) true 아니면 false -부동형,음수 불인정
작성자 :		고원택
====================================================================== */
function IsNum2( numstr )
{
	var isValid = true;

	// Return immediately if an invalid value was passed in
	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
		return false;

	// convert to a string for performing string comparisons.
	numstr += "";

	for (i = 0; i < numstr.length; i++)
	{
    	if (numstr.charAt(i) <"0" ||numstr.charAt(i)> "9" )
    	{
			isValid = false;
			break;
		}
   }

   	return isValid;
}

/* ======================================================================
FUNCTION:  	전화번호를 체크한다.
RETURN:  	지역번호/국번/번호 타입이면 true, 아니면 false
====================================================================== */
function IsValidTel(str){

	str = TrimString(str);	//str안의 space를 모두 없앤다.

	if(IsBlank(str)){ return false;	}

	var myToken = new Token(str, "-/,)");//지정된 문자를 seq을 참고해 Token으로 만든다.

	if(myToken.length != 3){
		return false;
	}else{//Token이 3개일 경우만(지역번호,국번,번호)

		for(j = 0; j < 3; j++){
			var numstr = myToken[j];
			if(numstr.length>4) return false;
			if(!IsInt(numstr)) return false;

   		}//end for
	}//end if

	return true;
}
/* ======================================================================
FUNCTION:  	전화번호를 신보포맷으로 리턴한다..
RETURN:  	지역번호/국번/번호
		ex) 02)213-2331 ==> '02  213 2331'의 12(4+4+4)자리 스트링 리턴
		위의 IsValidTel(str)에 의해 검증된 데이타만 넘길것
====================================================================== */
function shinboTelFormat( str ) {
	var resultStr = "";

	str += "";
	str = TrimString(str);	//str안의 space를 모두 없앤다.
	var myToken = new Token(str, "-"); //지정된 문자를 seq을 참고해 Token으로 만든다.

	for(t=0;t<myToken.length;t++){
		if(myToken[t].length<4){
			for(m=0;4-myToken[t].length;m++){
					myToken[t]+=" ";
			}
		}
		resultStr+=myToken[t];
	}
	return resultStr;
}

//--------------------------------------------------------------
// str으로 지정된 문자열을 문자열 seps의 문자들을 참고하여
// Token으로 만들어  배열로 반환한다.
//
// ex) var myToken = new Token("aa-bb,cc dd. ee\nff", "-, .\n")
//	myToken.length := 6
//	myToken[0] := "aa"
//	myToken[1] := "bb"
//	myToken[2] := "cc"
//	myToken[3] := "dd"
//	myToken[4] := "ee"
//	myToken[5] := "ff"
//


function Token(str, seps)
{
	var i;
	var start = -1;
	var end = -1;
	var num = 0;

	i = 0;

	do
	{
		for(; i<str.length; i++) // 토큰의 시작위치를 찾는다.
		{
			if(seps.indexOf(str.charAt(i), 0) == -1) // 해당문자가 패턴에 없을 경우 시작위치 지정
			{
				start = i;
				break;
			}
		}

		for(; i<str.length; i++)
		{
			if(seps.indexOf(str.charAt(i), 0) == -1) // 해당문자가 패턴에 없을 경우 위치 지정
			{
				end = i;
			}
			else
			{
				end = (end == -1) ? start : end;
				break;
			}

		}

		// 저장

		num++;
		this.length = num;
		this[num-1] = str.substr(start, (end-start+1));


		// 시작위치 지정

		start = end = -1;


	} while(i < str.length);

	return this;
}






//===============================================
// 날짜 관련 함수 Start
//===============================================
/** =============================================
Return : String (YYYYMMDD)
Comment: 현재날자를 구한다 (문자:YYYYMMDD)
Usage  :
---------------------------------------------- */
function fn_getDateNowToStr()
{
	var dNow = new Date();
	var yyyy = "";
	var mm   = "";
	var dd   = "";

	yyyy = dNow.getYear();
	mm   = dNow.getMonth()+1;
	dd   = dNow.getDate();

	yyyy = fn_setFillzeroByVal( yyyy, 4 );
	mm   = fn_setFillzeroByVal( mm,   2 );
	dd   = fn_setFillzeroByVal( dd,   2 );
	return (yyyy + mm + dd);
}
//===============================================

/** =============================================
Return : String (YYYYMMDD)
Comment: 현재날자와 시간을를 구한다 (문자:YYYYMMDD hhmmss)
Usage  :
---------------------------------------------- */
function fn_getDateTimeNowToStr()
{
	var dNow = new Date();
	var yyyy = "";
	var MM   = "";
	var dd   = "";
	var hh = "";
	var mm   = "";
	var sss   = "";

	yyyy = dNow.getYear();
	MM   = dNow.getMonth()+1;
	dd   = dNow.getDate();
	hh	 = dNow.getHours();
	mm   = dNow.getMinutes();
	sss  = dNow.getSeconds();

	yyyy = fn_setFillzeroByVal( yyyy, 4 );
	MM   = fn_setFillzeroByVal( MM,   2 );
	dd   = fn_setFillzeroByVal( dd,   2 );
	hh	 = fn_setFillzeroByVal( hh,   2 );
	mm   = fn_setFillzeroByVal( mm,   2 );
	sss  = fn_setFillzeroByVal( sss,  2 );

	return (yyyy + MM + dd + hh + mm + sss);
}
//===============================================

/** =============================================
Return : boolean
Comment: 입력받은 년도가 윤년이면 true
Usage  :
---------------------------------------------- */
function fn_isLeafYear(YYYY)
{
	if ( ( (YYYY%4 == 0) && (YYYY%100 != 0) ) || (YYYY%400 == 0) ) {
		return true;
	}
	return false;
}
//===============================================


/** =============================================
Return : int (해당 년,월의 날수)
Comment: 입력받은 년,월의 최대 일을 구한다.
Usage  :
---------------------------------------------- */
function fn_MaxdayYearMonth(yyyy, mm)
{
	var monthDD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	var iMaxDay = 0;

	if ( fn_isLeafYear(yyyy) ) {
		monthDD[1] = 29;
	}
	iMaxDay = monthDD[mm - 1];

	return iMaxDay;
}
//===============================================


/** =============================================
Return : boolean
Comment: 날짜 유효성 체크(분리된 yyyy, mm, dd 값)
Usage  :
---------------------------------------------- */
function fn_isYearMonthDay(yyyy, mm, dd)
{
	var isTrue  = false;

	var iMaxDay = fn_MaxdayYearMonth(yyyy, mm);

	if ( yyyy == "" && mm == "" && dd == "" ) {
		isTrue = true;
	} else {
		if ( (yyyy >= 1901) && (yyyy <= 9999) &&
			 (mm   >= 1)    && (mm   <= 12) &&
			 (dd   >= 1)    && (dd   <= iMaxDay) )
			isTrue = true;
	}

	return isTrue;
}
//===============================================


/** =============================================
Return : boolean
Comment: 날짜 유효성 체크(병합된 yyyymmdd 값)
Usage  :
---------------------------------------------- */
function fn_isDate(yyyymmdd)
{
	var isTrue  = false;

	if ( yyyymmdd.length == 8 && fn_isNumStr(yyyymmdd) ) {

		var yyyy = eval(yyyymmdd.substring(0,4));
		var mm   = eval(yyyymmdd.substring(4,6));
		var dd   = eval(yyyymmdd.substring(6,8));

		if ( fn_isYearMonthDay(yyyy,mm,dd) )
			isTrue = true;
	} else if (yyyymmdd == "") {
		isTrue = true;
	}

	return isTrue;
}
//===============================================


/** =============================================
Return : boolean
Comment: 날짜 유효성 체크(분리된 objYear, objMonth, objDay 객체) ;; 유효한 경우 각 객체의 값 설정(년도: 4자리, 월/일: 2자리)
Usage  :
---------------------------------------------- */
function fn_isDateByObj(objYear, objMonth, objDay)
{
	var isTrue = false;

	isTrue = fn_isYearMonthDay(objYear.value, objMonth.value, objDay.value);

	if ( isTrue && objYear.value != "" && objMonth.value != "" && objDay.value != "") {
		objYear.value  = fn_setFillzeroByVal(objYear.value,  4);
		objMonth.value = fn_setFillzeroByVal(objMonth.value, 2);
		objDay.value   = fn_setFillzeroByVal(objDay.value,   2);
	}

	return isTrue;
}
//===============================================


/** =============================================
Return : boolean
Comment: 날짜 유효성 체크(분리된 sYearObjName, sMonthObjName, sDayObjName 객체이름)
Usage  :
---------------------------------------------- */
function fn_isDateByObjName(sYearObjName, sMonthObjName, sDayObjName)
{
	var isTrue = false;

	objYear  = getObj(sYearObjName);
	objMonth = getObj(sMonthObjName);
	objDay   = getObj(sDayObjName);

	isTrue = fn_isYearMonthDay(objYear.value, objMonth.value, objDay.value);

	return isTrue;
}
//===============================================


/** =============================================
Return : boolean
Comment: 년월 유효성 체크(분리된 objYear, objMonth 객체) ;; 유효한 경우 각 객체의 값 설정(년도: 4자리, 월: 2자리)
Usage  :
---------------------------------------------- */
function fn_isYearMonthByObj(objYear, objMonth)
{
	var isTrue = false;

	isTrue = fn_isYearMonthDay(objYear.value, objMonth.value, "01");

	if ( isTrue && objYear.value != "" && objMonth.value != "") {
		objYear.value  = fn_setFillzeroByVal(objYear.value,  4);
		objMonth.value = fn_setFillzeroByVal(objMonth.value, 2);
	}

	return isTrue;
}
//===============================================


/** =============================================
Return : boolean
Comment: oYear, oMonth, oDay 값이 정상인경우 oDate 값을 세팅. (병합)
Usage  :
---------------------------------------------- */
function fn_isDateObj_Mgr(objYear, objMonth, objDay, objDate)
{
	var isDate  = false;

	if ( (objYear.value == "") && (objMonth.value == "") && (objDay.value == "") )
		isDate = true;

	if ( fn_isYearMonthDay (objYear.value, objMonth.value, objDay.value) ) {
		objMonth.value = fn_setFillzeroByVal(objMonth.value, 2);
		objDay.value   = fn_setFillzeroByVal(objDay.value,   2);

		isDate = true;
	}

	if (isDate)
		objDate.value = objYear.value + objMonth.value + objDay.value;

	return isDate;
}
//===============================================


/** =============================================
Return : boolean
Comment: oDate 값이 정상인경우 oYear, oMonth, oDay 값을 세팅. (분리)
Usage  :
---------------------------------------------- */
function fn_isDateObj_Sep(objYear, objMonth, objDay, objDate)
{
	var isDate  = false;

	if (objDate.value.length == 8) {
		if ( fn_isYearMonthDay(objDate.value.substr(0,4), objDate.value.substr(4,2), objDate.value.substr(6,2)) ) {
			isDate = true;
			objYear.value  = objDate.value.substr(0,4);
			objMonth.value = objDate.value.substr(4,2);
			objDay.value   = objDate.value.substr(6,2);
		}
	} else if (oDate.value == "") {
		isDate = true;
		objYear.value  = "";
		objMonth.value = "";
		objDay.value   = "";
	}

	return isDate;
}
//===============================================


/** =============================================
Return : String (증가된 8자리 날자(YYYYMMDD))
Comment: yyyy, mm, dd 로 받은 날짜에서 val만큼 뺀 날짜를 리턴
Usage  :
---------------------------------------------- */
function fn_date_add(yyyy, mm, dd, val)
{
	var iYear  = yyyy;
	var iMonth = mm;
	var iDay   = dd;
	var ival = val;
	ival = ival + dd;

	var iMaxDay = 0;

	while (true) {
		iMaxDay = fn_MaxdayYearMonth(iYear, iMonth);
		if (ival <= iMaxDay) {
			iDay = ival;
			break;
		} else {
			if (iMonth == 12) {
				iYear  = iYear + 1;
				iMonth = 1;
			} else {
				iMonth = iMonth + 1;
			}
			ival = ival - iMaxDay;
		}
	}

	return ( iYear.toString() + fn_setFillzeroByVal(iMonth.toString(), 2) + fn_setFillzeroByVal(iDay.toString(), 2) );
}
//===============================================


/** =============================================
Return : String (감소된 8자리 날자(YYYYMMDD))
Comment: yyyy, mm, dd 로 받은 날짜에서 val만큼 더한 날짜를 리턴
Usage  :
---------------------------------------------- */
function fn_date_minus(yyyy, mm, dd, val)
{
	var iYear  = yyyy;
	var iMonth = mm;
	var iDay   = dd;
	var ival = val;
	var iMaxDay = 0;

	var isTrue = true;
	if (dd > ival) {
		iDay = dd - ival;
		isTrue = false;
	} else if (ival == dd) {
		ival = 0;
	} else
		ival = ival - dd;

	while (isTrue) {
		if (iMonth == 1) {
			iYear  = iYear - 1;
			iMonth = 12;
		} else {
			iMonth = iMonth - 1;
		}

		iMaxDay = fn_MaxdayYearMonth(iYear, iMonth);

		if (ival == 0) {
			ival = iMaxDay;
			iDay = ival;
			break;
		} else if (ival < iMaxDay) {
			iDay = iMaxDay - ival;
			break;
		} else {
			ival = ival - iMaxDay;
		}
	}

	return ( iYear.toString() + fn_setFillzeroByVal(iMonth.toString(), 2) + fn_setFillzeroByVal(iDay.toString(), 2) );
}
//===============================================

/** =============================================
Return : String
Comment: sVal의 길이를 iLen으로 "0"으로 채워 맞춘 값을 리턴
Usage  :
---------------------------------------------- */
function fn_setFillzeroByVal(sVal, iVal)
{
	sStr = sVal + "";

	for (ii = sStr.length; ii < iVal; ii++) {
		sStr =  "0" + sStr;
	}

	return sStr;
}
//===============================================

// event.shiftKey : 키코드값
// event.shiftKey, event.altKey, event.ctrlKey : boolean
// event.srcElement : 이벤트가 발생된 객체
// 8: BackSpace, 46: Del
// ","=44, "-"=45, "."=46, "/"=47
// "0"=48, "9"=57
// "@"=64, "A"=65, "Z"=90, "a"=97, "z"=122
// 37:LeftArrow, 38:UpArrow, 39:RightArrow, 40:DownArrow **
/** =============================================
Return : event.returnValue = boolean
Comment: 키입력시 숫자만 입력 받게 한다.
Usage  : onKeyDown="fn_onKeyOnlyNumber();"
---------------------------------------------- */
function fn_onKeyOnlyNumber()
{
	var sValid = "0123456789";

	var sValue = event.srcElement.value;
		  sValue = sValue.replace(/,/gi,"");
	var iKey = event.keyCode;
	var isShift = event.shiftKey;
	var isMove = false;
	var isCut  = false
	var isTrue = true;

	event.srcElement.style.imeMode = "inactive"; //style.imeMode(active:한글, inactive:영문) 그러나, 동적으로는 반영 안된다. (html tag의 style="IME-MODE:inactive;" 로 지정하여야만..)

	var sReturnValue = "";
	for (var ii=0; ii < sValue.length; ii++) {
		if (sValid.indexOf(sValue.substring(ii, ii+1)) >= 0) {
			sReturnValue = sReturnValue + sValue.substring(ii, ii+1);
		}
	}
	if ( (iKey == 37 || iKey == 38 || iKey == 39 || iKey == 40) ||
		 (iKey == 13 || iKey == 8  || iKey == 46 || iKey == 9  || iKey == 16  || isShift) || (iKey >= 48 && iKey <= 57) || (iKey >= 95 && iKey <= 105)) {
		for (var ii=0; ii < sValue.length; ii++) {
			if (sValid.indexOf(sValue.substring(ii, ii+1)) < 0) {
				event.returnValue = false;
				isCut  = true;
				isTrue = false;
				break;
			}
		}
	} else {
		event.returnValue = false;
		isTrue = false;
	}

	if (isCut || isTrue == false)
		event.srcElement.value = sReturnValue;

	if (iKey == 13) {
		event.keyCode = 0;
		return sReturnValue;
	} else {
		return sReturnValue;
	}
}
//===============================================

/** =============================================
Return : boolean
Comment: 객체값의 최대길이 초과 여부 체크
Usage  :
---------------------------------------------- */
function fn_isLengthMaxByObj(obj, iLen, bMsgPop, sMsgHeader)
{
	var sVal = obj.value;

	if ( fn_isLengthMaxByVal(sVal, iLen, bMsgPop, sMsgHeader) ) {
		return true;
	} else {
		return false;
	}
}
//===============================================

/** =============================================
Return : boolean
Comment: 문자열의 최대길이 초과 여부 체크
Usage  :
---------------------------------------------- */
function fn_isLengthMaxByVal(sVal, iLen, bMsgPop, sMsgHeader)
{
	var iValLen = fn_getByteLengthByVal(sVal);

	if (iValLen <= iLen) {
		return true;
	} else {
		if (bMsgPop) {
			alert(sMsgHeader + "의 최대 입력 글자수를 초과했습니다.\n입력 데이터를 확인하세요!)");
//				  sMsgHeader + "의 입력가능 글자수는 " + iLen + "글자이며\n" +
//				  "현재 입력된 글자수는 " + iValLen + "글자입니다.\n\n" +
//				  "(글자수는 영문 기준이며 한글 1글자는 영문 2글자로 저장됩니다.)");
		}
		return false;
	}
}
//===============================================
/** =============================================
Return : number
Comment: 입력받은 문자열의 바이트 길이 RETURN
Usage  :
---------------------------------------------- */
function fn_getByteLengthByVal(sVal)
{
	var iMaxlength  = sVal.length;
	var sOneByteStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 !@#$%^&*(),./<>?;':\"=-_+";
	var iByteLength = 0;

	for(var ii = 0; ii < iMaxlength; ii++) {
		if (sVal.charCodeAt(ii) > 127) {
			iByteLength++;
			iByteLength++;
		} else {
			iByteLength++;
		}
	}
	return iByteLength;
}
//===============================================

/** =============================================
Return : String (세자리 마다 ","로 분리된 수; ex: "1,000,000")
Comment: 입력값을 읽어 숫자만을 취해서 금액형식으로 나타낸다. 숫자가 아닌 문자값 또는 0 입력시: bDefaultZeroSet이 존재하지 않거나 true이면 0, 존재하며 false이면 "" return
Usage  : onKeyUp="this.value=fn_formatThousandSep(this.value)"
---------------------------------------------- */
function fn_formatThousandSep(sNum, bDefaultZeroSet)
{
	sStr = new String(sNum);
	sStr = sStr.replace(/,/gi,"");

	var sign = "";

	if(isNaN(sStr)) {
		if (bDefaultZeroSet == null || bDefaultZeroSet == true)
			sStr = 0;
	}

	if (sStr < 0) {
		sStr = sStr * (-1);
		sign = "-";
	} else {
		sStr = sStr * 1;
	}

	if( sStr != 0) {
		sStr = new String(sStr)
		var temp = "";
		var pos = 3;
		sStr_len = sStr.length;

		while (sStr_len > 0){
			sStr_len = sStr_len - pos;
			if (sStr_len < 0) {
				pos = sStr_len + pos;
				sStr_len = 0;
			}
			temp="," + sStr.substr(sStr_len,pos) + temp;
		}

		sStr = sign + temp.substr(1);
	}

	if (bDefaultZeroSet != null || bDefaultZeroSet == false) {
		if (sStr == 0) {
			sStr = "";
		}
	}

	return sStr;
}
//===============================================

/** =============================================
Return : event.returnValue = boolean
Comment: 키입력시 숫자와 ','만 입력 받게 한다.
Usage  : onKeyDown="fn_onKeyOnlyNumberComma()" style="text-align:right; width=120;"
","=188
---------------------------------------------- */
function fn_onKeyOnlyNumberComma()
{
	var sValid = "0123456789,";

	var sValue = event.srcElement.value;
	var iKey = event.keyCode;
	var isShift = event.shiftKey;
	var isMove = false;
	var isCut  = false
	var isTrue = true;

	event.srcElement.style.imeMode = "inactive"; //style.imeMode(active:한글, inactive:영문) 그러나, 동적으로는 반영 안된다. (html tag의 style="IME-MODE:inactive;" 로 지정하여야만..)

	var sReturnValue = "";
	for (var ii=0; ii < sValue.length; ii++) {
		if (sValid.indexOf(sValue.substring(ii, ii+1)) >= 0) {
			sReturnValue = sReturnValue + sValue.substring(ii, ii+1);
		}
	}

	if ( (iKey == 37 || iKey == 38 || iKey == 39 || iKey == 40) ||
		 (iKey == 13 || iKey == 8  || iKey == 46 || iKey == 188  || iKey == 9  || iKey == 16  || isShift) || (iKey >= 48 && iKey <= 57) || (iKey >= 96 && iKey <= 105)) {
		for (var ii=0; ii < sValue.length; ii++) {
			if (sValid.indexOf(sValue.substring(ii, ii+1)) < 0) {
				event.returnValue = false;
				isCut  = true;
				isTrue = false;
				break;
			}
		}
	} else {
		event.returnValue = false;
		isTrue = false;
	}

	if (isCut || isTrue == false)
		event.srcElement.value = sReturnValue;

	if (iKey == 13) {
		event.keyCode = 0;
		return sReturnValue;
	} else {
		return sReturnValue;
	}
}
//===============================================

/** =============================================
Return : event.returnValue = boolean
Comment: 키입력시 숫자와 '-'만 입력 받게 한다.
Usage  : onKeyDown="fn_onKeyOnlyNumberDash()" style="text-align:right; width=120;"
"-"=109, 189
---------------------------------------------- */
function fn_onKeyOnlyNumberDash()
{
	var sValid = "0123456789-";

	var sValue = event.srcElement.value;
	var iKey = event.keyCode;
	var isShift = event.shiftKey;
	var isMove = false;
	var isCut  = false
	var isTrue = true;

	event.srcElement.style.imeMode = "inactive"; //style.imeMode(active:한글, inactive:영문) 그러나, 동적으로는 반영 안된다. (html tag의 style="IME-MODE:inactive;" 로 지정하여야만..)

	var sReturnValue = "";
	for (var ii=0; ii < sValue.length; ii++) {
		if (sValid.indexOf(sValue.substring(ii, ii+1)) >= 0) {
			sReturnValue = sReturnValue + sValue.substring(ii, ii+1);
		}
	}

	if ( (iKey == 37 || iKey == 38 || iKey == 39 || iKey == 40) ||
		 (iKey == 13 || iKey == 8  || iKey == 46 || iKey == 109  || iKey == 189 || iKey == 9  || iKey == 16  || isShift) || (iKey >= 48 && iKey <= 57) || (iKey >= 96 && iKey <= 105)) {
		for (var ii=0; ii < sValue.length; ii++) {
			if (sValid.indexOf(sValue.substring(ii, ii+1)) < 0) {
				event.returnValue = false;
				isCut  = true;
				isTrue = false;
				break;
			}
		}
	} else {
		event.returnValue = false;
		isTrue = false;
	}

	if (isCut || isTrue == false)
		event.srcElement.value = sReturnValue;

	if (iKey == 13) {
		event.keyCode = 0;
		return sReturnValue;
	} else {
		return sReturnValue;
	}
}
//===============================================

/** =============================================
Return : boolean
Comment: 입력된 객체이름에 해당하는 객체의 값의 앞/뒤 공백을 제거한 후 길이가 0 이면 false
Usage  : fn_isNotNullByObjName() 참조
---------------------------------------------- */
function fn_isNotNullByObjName()
{
	var isTrue = true;
	var sStr = "";
	for (var ii=0; ii < arguments.length; ii++) {
		obj = getObj(arguments[ii]);
		sStr = fn_trim(obj.value);
		if (sStr == "" || sStr == "null" || sStr == "undefined") {
			isTrue = false;
			break;
		}
	}
	return isTrue;
}
//===============================================
/** =============================================
Return : String
Comment: 입력받은 text 의 앞뒤에 붙은 Space, Tab, CRLF 를 제거
Usage  :
---------------------------------------------- */
function fn_trim(text)
{
	if (text == null) {
		return "";
	}

	var txt = text + "";
	var flag = false;

	// 앞쪽 트림
	var ii = 0;

	while (!flag) {
		var ch = txt.charAt(ii);
		if ( (ch == ' ') || (ch == '\t') || (ch == '\n') || (ch == '\r') ) {
			if (ii < txt.length)
				ii++;
			else
				flag = true;
		} else
			flag = true;
	}

	if (ii == (txt.length))
		return "";
	else
		txt = txt.substring(ii);

	// 뒤쪽 트림
	flag = false;
	var jj = txt.length - 1;

	while (!flag) {
		var ch = txt.charAt(jj);
		if ( (ch == ' ') || (ch == '\t') || (ch == '\n') || (ch == '\r') ) {
			if ( jj > 0 )
				jj--;
			else
				flag = true;
		} else
			flag = true;
	}

	txt = txt.substring(0, jj+1);
	return txt;
}
//===============================================

/** =============================================
Return : String (숫자)
Comment: 입력받은 값중 숫자만을 취한다.
Usage  : onKeyUp="this.value=fn_clearString(this.value)"
---------------------------------------------- */
function fn_clearString(sVal)
{
	var pstr, sstr, ii;
	sstr = sVal;
	pstr = "";
	for(ii=0; ii<sstr.length; ii++) {
		//isNaN() : 입력파라미터의 값이 숫자면 false,숫자가 아니면 true를 반환
		if( !isNaN(sstr.substr(ii, 1)) )
			pstr = pstr + sstr.substr(ii, 1);
	}
	return pstr;
}
//===============================================

/* ======================================================================
FUNCTION:  	날짜를 체크한다.
RETURN:  	2004-02-02 타입이면 true, 아니면 false
====================================================================== */
function IsValidDate( str ) {
	if (str+"" == "undefined" || str+"" == "null" || str+"" == "")
		return false;

	var isValid = true;

	str += "";

   	if ( IsBlank(str) || (str.length != 10) ||
			!IsInt(str.substring(0,4), false) || str.charAt(4) != '-' ||
			!IsInt(str.substring(5,7), false) || str.charAt(7) != '-' ||
			!IsInt(str.substring(8,10), false))
		isValid = false;
   	return isValid;
}
//===============================================

