/******************************************************
 * Function명 : NUonlyNo()
 * 설      명 : 입력필드에서 오직 숫자만 입력가능하게 한다.
 *							호출은 OnKeyDown으로 한다.(OnKeyPress는
 *							한글입력시 적용이 안된다.)
 * Return     : void
 ******************************************************/
function NUonlyNo() {
	var keycode = event.keyCode;

	if( (keycode>=48&&keycode<=57) ||
			(keycode==8||keycode==9||keycode==46) ||
			(keycode>=96&&keycode<=105) ||
			(keycode>=35&&keycode<=40) ||
			(event.ctrlKey)||(keycode==67||keycode==86) ) {
		if(!(event.ctrlKey) && (keycode==67||keycode==86))	//ctrl키를 누르지 않은 상태에서 c또는 v키를 누르는 경우
			event.returnValue=false;
		else
			event.returnValue=true;	//그외의 정상적인 입력상황
	} else {
		event.returnValue=false;
	}
}

/******************************************************
 * Function명 : NHonlyNo()
 * 설      명 : 입력필드에서 오직 숫자와 -만 입력가능하게 한다.
 *							호출은 OnKeyDown으로 한다.(OnKeyPress는
 *							한글입력시 적용이 안된다.)
 * Return     : void
 ******************************************************/
function NHonlyNo() {
	var keycode = event.keyCode;

	if( (keycode>=48&&keycode<=57) ||
			(keycode==8||keycode==9||keycode==46) ||
			(keycode>=96&&keycode<=105) ||
			(keycode>=35&&keycode<=40) ||
			(keycode==109||keycode==189 ) ||
			(event.ctrlKey)||(keycode==67||keycode==86) ) {
		if(!(event.ctrlKey) && (keycode==67||keycode==86))	//ctrl키를 누르지 않은 상태에서 c또는 v키를 누르는 경우
			event.returnValue=false;
		else
			event.returnValue=true;	//그외의 정상적인 입력상황
	} else {
		event.returnValue=false;
	}
}


/******************************************************
 * Function명 : NUkeyNo()
 * 설      명 : 입력필드에서 ., - 포함한 숫자만 입력가능하게 한다.
 *							호출은 OnKeyDown으로 한다.(OnKeyPress는
 *							한글입력시 적용이 안된다.)
 * Return     : void
 ******************************************************/
function NUkeyNo(obj) {
	var keycode = event.keyCode;

	if(keycode==9) return;

	var txtNumber = NUremoveComma(obj);
	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,][.])');
	var arrNumber = txtNumber.split('.');
	arrNumber[0] += '.';

	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	//alert(keycode);

	if( (keycode>=48&&keycode<=57) ||
		(keycode==8||keycode==9||keycode==46) ||
		(keycode>=96&&keycode<=105) ||
		(keycode>=35&&keycode<=40) ||
		(keycode==190||keycode==110||keycode==109||keycode==188||keycode==189) ) {

		event.returnValue=true;
	} else {
		event.returnValue=false;
		return;
	}

	//소숫점 2자리 이하의 입력은 무효화 처리
	if(arrNumber.length > 1) {
		if((arrNumber[1].length>1) && (keycode!=8))
			event.returnValue=false;
			return;
	}

	//현재의 숫자가 0인 상태에서 0을 또 입력하는 경우
	if(txtNumber=="0") {
		if(keycode==96 || keycode==48) {
			event.returnValue=false;
		} else if(!(keycode==190||keycode==110)) {
			txtNumber = "";
			obj.value = "";
		}

		return;
	}

	//맨 앞의 기호가 (-)이고, 그 다음 기호가 0인 경우
	if(txtNumber=="-0") {
		if(!(keycode==190||keycode==110||keycode==8)) {
			event.returnValue=false;
		}

		return;
	}

	//현재 입력한 어떠한 기호가 존재하는 가운데, 음수기호(-)을 입력하는 경우
	if( (txtNumber!="") && (keycode==109||keycode==189) ) {
		event.returnValue=false;
		return;
	}
}

/******************************************************
 *  Function명 : NUcheckDigit(obj)
 *  설      명 : 입력받은 객체의 숫자가 정확한지 체크한다.
 *  Parameter  : obj : 숫자입력 객체 or 숫자스트링
 *  Return     : Boolean
 ******************************************************/
function NUcheckDigit(obj) {
	var tValue = '';

	if (obj.toString().indexOf('[object') > -1)
		tValue = obj.value;
	else
		tValue = obj;

	var cLastIdx = tValue.lastIndexOf(",");
	var cFirstIdx = tValue.indexOf(",");
	var dIdx = tValue.indexOf(".");


	if(cFirstIdx == 0 || (dIdx > -1 && cLastIdx > dIdx)|| cLastIdx == (dIdx - 1)) {
		document.writeln("cIdx == " + cIdx + "<br>");
		document.writeln("dIdx == " + dIdx + "<br>");
		return false;
	}

	var txtNumber = NUremoveComma(tValue);
	var arrNumber = txtNumber.split('.');

	if (arrNumber.length > 2)  // 소숫점(.)이 2개 이상
		return false;

	var checkValue = arrNumber.join('');

	return !isNaN(checkValue);
}

/******************************************************
 *  Function명 : NUaddCommaPrint2(tValue)
 *  설      명 : 입력받은 값에다 콤마를 넣는다.(화면 출력
 *  Parameter  : tValue : 숫자 or 숫자스트링
 *  Return     : 콤마 포함 스트링
 *  비      고 : 12345.22 --> 12,345.22형태로 변경
 ******************************************************/
function NUaddCommaPrint2(tValue) {
	var txtNumber = "" + tValue;

	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');

	//숫자인지 check
	if( !NUcheckDigit(arrNumber.join('')) ) {
		document.write(tValue);
		return;
	}

	arrNumber[0] += '.';

	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
		return arrNumber.join('');
	} else {
		return arrNumber[0].split('.')[0];
	}
}

/******************************************************
 *  Function명 : NUaddCommaPrint(tValue)
 *  설      명 : 입력받은 값에다 콤마를 넣는다.(화면 출력
 *  Parameter  : tValue : 숫자 or 숫자스트링
 *  Return     : 콤마 포함 스트링
 *  비      고 : 12345.22 --> 12,345.22형태로 변경
 ******************************************************/
function NUaddCommaPrint(tValue) {
	var txtNumber = "" + tValue;

	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');

	//숫자인지 check
	if( !NUcheckDigit(arrNumber.join('')) ) {
		document.write(tValue);
		return;
	}

	arrNumber[0] += '.';

	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
		document.write(arrNumber.join(''));
	} else {
		document.write(arrNumber[0].split('.')[0]);
	}
}

/******************************************************
 *  Function명 : NUaddComma2(obj)
 *  설      명 : 입력받은 값에다 콤마를 넣는다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : 콤마 포함 스트링
 *  비      고 : 12345.22 --> 12,345.22형태로 변경
 ******************************************************/
function NUaddComma2(obj) {

	var txtNumber = NUremoveComma(obj);

	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');

	arrNumber[0] += '.';

	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
		if(obj.toString().indexOf('[object') > -1) {
			obj.value = arrNumber.join('');
		}
		return arrNumber.join('');
	} else {
		if(obj.toString().indexOf('[object') > -1) {
			obj.value = arrNumber[0].split('.')[0];
		}
		return arrNumber[0].split('.')[0];
    }
}

/******************************************************
 *  Function명 : NUaddComma(obj)
 *  설      명 : 입력받은 값에다 콤마를 넣는다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : 콤마 포함 스트링
 *  비      고 : 12345.22 --> 12,345.22형태로 변경
 ******************************************************/
function NUaddComma(obj) {
	var keycode = event.keyCode;
	if(keycode==9) return;

	var txtNumber = NUremoveComma(obj);

	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');

	arrNumber[0] += '.';

	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
		if(obj.toString().indexOf('[object') > -1) {
			obj.value = arrNumber.join('');
		}
		return arrNumber.join('');
	} else {
		if(obj.toString().indexOf('[object') > -1) {
			obj.value = arrNumber[0].split('.')[0];
		}
		return arrNumber[0].split('.')[0];
    }
}

/******************************************************
 *  Function명 : NUremoveComma(obj)
 *  설      명 : 입력받은 값에다 콤마를 삭제한다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : 콤마 뺀 스트링
 *  비      고 : 12,345.22 --> 12345.22 형태로 변경
 ******************************************************/
function NUremoveComma(obj) {
	var want_val = '';

	var resultVal = '';

	if(obj.toString().indexOf('[object') > -1)      // obj가 Object면
		resultVal = obj.value;
	else
		resultVal = obj;

	if (resultVal.length < 1) {
		if(obj.toString().indexOf('[object') > -1)      // obj가 Object면
		obj.value = '0';

		return '0';
	}

	//값이 존재하여야만 연산을 수행함

	if (resultVal.length != 0) {
		//<,>단위의 표기법을 연산 형식으로 변환
		for(var i=0; i < resultVal.length; i++) {
			var digit = resultVal.charAt(i);   //i 이전의 문자를 반영한다

			if(digit != ",")                   //<,>가 아닌 문자는 누적
			want_val = want_val + digit;
		}
	}

	if(obj.toString().indexOf('[object') > -1) {      // obj가 Object면
		obj.value = want_val;
	}

	return want_val;
}

/******************************************************
 *  Function명 : NUremoveComma2(tValue)
 *  설      명 : 입력받은 값에다 콤마를 삭제한다.
 *  Parameter  : tValue : 숫자 or 숫자스트링
 *  Return     : 콤마 뺀 스트링
 *  비      고 : 12,345.22 --> 12345.22 형태로 변경
 ******************************************************/
function NUremoveComma2(tValue) {
	var want_val = '';

	if (tValue.length < 1) {
		return '0';
	}

	//값이 존재하여야만 연산을 수행함

	if (tValue.length != 0) {
		//<,>단위의 표기법을 연산 형식으로 변환
		for(var i=0; i < tValue.length; i++) {
			var digit = tValue.charAt(i);   //i 이전의 문자를 반영한다

			if(digit != ",")                   //<,>가 아닌 문자는 누적
			want_val = want_val + digit;
		}
	}

	return want_val;
}

/******************************************************
 *  Function명 : NUlzeroRemove(obj)
 *  설      명 : 입력받은 값에다 필요없는 '0'을 삭제한다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : '0'을 뺀 스트링
 *  비      고 : 000012300 ---> 12300 형태로 변환
 *             : 00,001,2300 --> 1,2300 형태로 변환
 *             : 입력 값이 숫자인 경우만 가능
 ******************************************************/
function NUlzeroRemove(obj) {
	var tVal = '';

	if(obj.toString().indexOf('[object') > -1)      // obj가 Object면
		tVal = obj.value;
	else
		tVal = obj;

	var resultVal = '';

	var cIdx = tVal.indexOf(',');

	if(cIdx == -1) {
		resultVal = String(parseFloat(tVal));
	} else {
		resultVal = NUremoveComma(tVal);
		resultVal = String(parseFloat(resultVal));
		resultVal = NUaddComma(resultVal);
	}

	if (resultVal == 'NaN')
		resultVal = tVal;


	if(obj.toString().indexOf('[object') > -1)      // obj가 Object면
		obj.value = resultVal;
	return resultVal;
}

/******************************************************
 *  Function명 : NUCheckNI(sCheck)
 *  설      명 : 숫자값만 입력받는지 체크한다.
 *  Parameter  : sCheck : 숫자스트링
 *  Return     : Boolean
 *  비      고 : '1234567890' 값만 입력 가능
 ******************************************************/
function NUCheckNI(sCheck){
	var Digit = '1234567890'

	if (SUltrimCheck(SUrtrimCheck(sCheck)) != "") {
		for (i=0; i<sCheck.length; i++){
			if(Digit.indexOf(sCheck.substring(i,i+1))<0) {
				return false
			}
		}
	}
	return true
}

/******************************************************
 *  Function명 : NUnextObjNI(obj, nextObj, maxLen)
 *  설      명 : 탭 처리 함수(정수 숫자열 자리수에 맞으면 다음 포커스로 이동)
 *  Parameter  : obj     : 현재 숫자 객체
 *             : nextObj : 탭 이동할 객체
 *             : maxLen  : 입력받을 수 있는 최대 길이
 *  Return     : 위치 값
 *  비      고 : 내부에서 StringUtil을 이용한다.
 ******************************************************/
function NUnextObjNI(obj, nextObj, maxLen) {
	var objstr = obj.value;
	objstr = NUremoveComma(objstr);
	var objLen = SUgetLength(objstr);

	if(!NUCheckNI(objstr)) {
		alert("숫자만 입력하십시요.");
		obj.value = objstr.substr(0, objLen - 1);
		NUaddComma(obj);
		obj.focus();
	} else {
	    if(objLen == maxLen) {
			nextObj.focus();
	    } else if (objLen > maxLen) {
			alert("최대입력값은 " + maxLen + "입니다.");
			obj.value = objstr.substr(0, objLen - 1);
			obj.focus();
	    }
		NUaddComma(obj);
	}
}

/******************************************************
 *  Function명 : NUCheckND(sCheck)
 *  설      명 : 숫자값과 '.' 만 입력받는지 체크한다.
 *  Parameter  : sCheck : 숫자스트링
 *  Return     : Boolean
 *  비      고 : '1234567890.' 값만 입력 가능
 ******************************************************/
function NUCheckND(sCheck){
	var Digit = '1234567890.'

	if (SUltrimCheck(SUrtrimCheck(sCheck)) != "") {
		for (i=0; i<sCheck.length; i++){
			if(Digit.indexOf(sCheck.substring(i,i+1))<0) {
				return false
			}
		}
	}
	return true
}


/******************************************************
 *  Function명 : NUCheckNDC(sCheck)
 *  설      명 : 숫자값과 '.'과 ',' 만 입력받는지 체크한다.
 *  Parameter  : sCheck : 숫자스트링
 *  Return     : Boolean
 *  비      고 : '1234567890.' 값만 입력 가능
 ******************************************************/
function NUCheckNDC(sCheck){
	var Digit = '1234567890.,'

	if (SUltrimCheck(SUrtrimCheck(sCheck)) != "") {
		for (i=0; i<sCheck.length; i++){
			if(Digit.indexOf(sCheck.substring(i,i+1))<0) {
				return false
			}
		}
	}
	return true
}

/******************************************************
 *  Function명 : NUnextObjND(obj, maxLen)
 *  설      명 : 소수 숫자열 자리수의 Max값 비교
 *  Parameter  : obj     : 현재 숫자 객체
 *             : maxLen  : 입력받을 수 있는 최대 길이(두자리수면 2)
 *  Return     : 값
 *  비      고 : 내부에서 StringUtil을 이용한다.
 ******************************************************/
function NUnextObjND(obj, maxLen) {
	var objstr = obj.value;
	objstr = NUremoveComma(objstr);
	var objLen = SUgetLength(objstr);

	if(!NUCheckND(objstr)) {
		alert("소수숫자만 입력하십시요.");
		obj.value = objstr.substr(0, objLen - 1);
		NUaddComma(obj);
		obj.focus();
	} else {
		var objval = parseFloat(objstr);
		var maxval = 0.99999999999999;
		maxval = maxval * (Math.pow(10, maxLen));

		if(objval > maxval) {
			alert("최대입력값은 " + maxval + "입니다.");
			obj.value = objstr.substr(0, objLen - 1);
			obj.focus();
		}
		NUaddComma(obj);
	}
}

/******************************************************
	*  Function명 : checkDigit()
	*  설      명 : 입력 사번의 유효성 검사
	*  Parameter  :
	*  Return     : boolean : 승인시 return false
	******************************************************/
function checkDigit(obj) {
	var digit = eval(obj.value.substring(0, 6)) % 7;
	if(eval(obj.value.charAt(6))==digit) {
		return true;
	} else {
		alert("유효한 형식의 사번이 아닙니다.");
		obj.select();
		return false;
	}
}

/******************************************************
 *  Function명 : NHaddHyphen(obj)
 *  설      명 : 입력받은 값에다 -를 넣는다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : 하이픈 포함 스트링
 *  비      고 : 20060601 --> 2006-06-07형태로 변경
 ******************************************************/
function NHaddHyphen(obj) {

	var resultVal = NHremoveHyphen(obj);

	if(resultVal.length > 4 && resultVal.length < 7 ) resultVal = resultVal.substring(0,4) +"-"+ resultVal.substring(4);
	else if(resultVal.length >= 7) resultVal = resultVal.substring(0,4) +"-"+ resultVal.substring(4,6) +"-"+ resultVal.substring(6);

	obj.value = resultVal;
	return;
}

/******************************************************
 *  Function명 : NHremoveHyphen(obj)
 *  설      명 : 입력받은 값에다 하이픈을 삭제한다.
 *  Parameter  : obj : 숫자스트링 or 스트링 객체
 *  Return     : 하이픈을 뺀 스트링
 *  비      고 : 2006-06-07 --> 20060601 형태로 변경
 ******************************************************/
function NHremoveHyphen(obj) {
	var want_val = '';

	var resultVal = '';

	if(obj.toString().indexOf('[object') > -1){      // obj가 Object면
		resultVal = obj.value;
    } else
		resultVal = obj;


	if (resultVal.length < 1) {
		if(obj.toString().indexOf('[object') > -1)      // obj가 Object면
		obj.value = want_val;

		return want_val;
	}


	//값이 존재하여야만 연산을 수행함

	if (resultVal.length != 0) {
		//<,>단위의 표기법을 연산 형식으로 변환
		for(var i=0; i < resultVal.length; i++) {
			var digit = resultVal.charAt(i);   //i 이전의 문자를 반영한다

			if(digit != "-")                   //<,>가 아닌 문자는 누적
			want_val = want_val + digit;
		}
	}

	if(obj.toString().indexOf('[object') > -1) {      // obj가 Object면
		obj.value = want_val;
	}

	return want_val;
}

/******************************************************
 *  Function명 : SUltrim(str)
 *  설      명 : 입력받은 값의 좌측공백을 삭제한다.
 *  Parameter  : 문자입력 객체
 *  Return     : 좌측공백을 제외한 스트링
 ******************************************************/
function SUltrimCheck(str) {

	while (str.length != 0) {
		if (str.substring(0, 1) == " ") {
			str = str.substring(1, str.length);
			continue;
		} else {
			break;
		}
	}

	return str ;
}

/******************************************************
 *  Function명 : SUrtrimCheck(str)
 *  설      명 : 입력받은 값의 우측공백을 삭제한다.
 *  Parameter  :  문자입력 객체
 *  Return     : 우측공백을 제외한 스트링
 ******************************************************/
function SUrtrimCheck(str) {

	while (str.length != 0) {
		blank = str.lastIndexOf(" ");
		if ((str.length - 1) == blank) {
			str = str.substring(0, str.length - 1);
			continue;
		} else {
			break;
		}
	}

	return str ;
}
