/***************************************************************************************
 * shUtility
 *
 *
 *
 **************************************************************************************/


//메세지 다국어화
var MSG_NATIONAL="KOR";
var MSG_ARRAY = new Array();

// KOR(한글), ENG(영문), CHI(중문) 순으로 입력
MSG_ARRAY["CHECK_FIELDS"] = new Array("아래의 항목을 입력하십시오."
										,"We either had trouble understanding those fields\n, or need more information."
										,"");
MSG_ARRAY["CHECK_EMAIL"] = new Array("Email 형식에 맞지 않습니다. 다시 입력하여 주십시오."
										,"Not allowed Email address. Please, check again."
										,"");
MSG_ARRAY["CHECK_NUMBER"] = new Array("숫자만 입력하실 수 있습니다."
										,"Should be typed in numbers."
										,"");
MSG_ARRAY["CHECK_DATE"] = new Array("올바른 날짜가 아닙니다. 다시 입력해주십시오."
										,"Not allowed date. Please, check again."
										,"");



/**
 * 해당 언어에 해당하는 메세지를 반환
 * @
 */
function shGetMsg(msgId){
	var national = 0;
	if(MSG_NATIONAL == "ENG") national = 1;
	else if(MSG_NATIONAL == "CHI") national = 2;

	var returnStr = "";
	if(MSG_ARRAY[msgId]!=undefined && MSG_ARRAY[msgId][national]!=undefined){
		returnStr = MSG_ARRAY[msgId][national];
	}

	if(returnStr && returnStr == null) returnStr = "";

	return returnStr;
}

function shSetNational(national){
	MSG_NATIONAL = national;
}


/// 폼체크
function shFormCheck(formName){
	//alert('test');
	inputs = Form.getElements(formName);

	var rtnStr = new Array();
	var rtnObject = new Array();


	for( i=0; i < inputs.length; i++){

		///문자열 길이 체크
		if(inputs[i].textlimit != undefined && $F(inputs[i]) != "" ){
			if(!shTextSizeLimit(inputs[i],  inputs[i].value))
			{
				rtnObject.push(inputs[i]);
			}
		}

		/// 필수 체크
		if(inputs[i].hname != undefined && inputs[i].hname != ""){

			if( inputs[i].type != "checkbox" && ($F(inputs[i]) == undefined || $F(inputs[i]) == "" || $F(inputs[i]) == " " || $F(inputs[i]) == "선택") ){
				//alert(inputs[i].hname + ' type:' + inputs[i].type + ' value:' + $F(inputs[i]) + ' length:' + inputs[i].length + ' value_org:' + inputs[i].value);
				if(inputs[i].type != "file"){
					rtnStr.push(inputs[i].hname);
					rtnObject.push(inputs[i]);
				}else if(inputs[i].type == "file" && inputs[i].value == ""){
					rtnStr.push(inputs[i].hname);
					rtnObject.push(inputs[i]);
				}

			}

			//// checkbox
			if(inputs[i].type == "checkbox"){
				//// 만일체크박스이고 체크박스가배열이라면 전체중 체크되어있는값이 있는지 확인

			}


		}

		/// 이메일 유효성 체크
		if(inputs[i].email != undefined && $F(inputs[i]) != "" ){
			if( !shCheckEmail($F(inputs[i])) ){
				rtnStr.push("유효하지 않은 이메일");
				rtnObject.push(inputs[i]);
			}
		}
		/// 전화번호  체크
		if(inputs[i].phone != undefined && $F(inputs[i]) != "" ){
			if( !shCheckPhone($F(inputs[i])) ){
				rtnStr.push("유효하지 않은 전화 번호 - 입력예)02-123-1234");
				rtnObject.push(inputs[i]);
			}

		}
		/// 핸드폰 체크
		if(inputs[i].hphone != undefined && $F(inputs[i]) != "" ){
			if( !shCheckHPhone($F(inputs[i])) ){
				rtnStr.push("유효하지 않은 핸드폰 번호 - 입력예)010-0123-1234");
				rtnObject.push(inputs[i]);
			}

		}
		/// 주민번호 체크
		if(inputs[i].ssn != undefined && $F(inputs[i]) != "" ){

            if( !shJuminNoCheck($F(inputs[i])) ){
				rtnStr.push("유효하지 않은 주민등록번호");
				rtnObject.push(inputs[i]);
            }


		}
		/// 사업자번호 체크
		if(inputs[i].csn != undefined && $F(inputs[i]) != "" ){

		}

		/// 숫자 체크
		if(inputs[i].number != undefined && $F(inputs[i]) != "" ){

		}
		/// 한글체크
		if(inputs[i].koren != undefined && $F(inputs[i]) != "" ){

		}
		/// 영숫자 체크
		if(inputs[i].engnum != undefined && $F(inputs[i]) != "" ){

		}

		//// 금액변환
		if(inputs[i].won != undefined && $F(inputs[i]) != "" ){

			if(inputs[i].type == "text" && $F(inputs[i]) == "0" && inputs[i].hname != undefined && inputs[i].hname != ""){
					rtnStr.push(inputs[i].hname);
					rtnObject.push(inputs[i]);
			}else{
				var value = $F(inputs[i]);
				var replaceNumber = value.replace(/^\$|,/g, "");

				//// 만일 숫자가 아니면 체크
				if(isNaN(replaceNumber)){
					replaceNumber = "";

					if(inputs[i].hname != undefined && inputs[i].hname != ""){
						rtnStr.push(inputs[i].hname);
						rtnObject.push(inputs[i]);
					}
				}else{
					replaceNumber = parseFloat(replaceNumber)+"";
				}
				inputs[i].value = replaceNumber;


			}
		}


	}

	if(shFormCheck.arguments[2] != undefined && shFormCheck.arguments[2] == "obj") return rtnObject;

	return rtnStr;
}

/// 폼체크 리턴 메세지
function shIsFormCheck(formName){
	var checkArray = shFormCheck(formName);
	var checkSize = checkArray.length;

	if(checkSize > 0){
		alertStr = shGetMsg("CHECK_FIELDS") + "\n\n";
		alertStr += shArray2StrEval( "- ", checkArray, "\n", "");
		alert(alertStr);
	}else{
		if(checkSize == 0){
			return true;
		}
	}
	return false;
}

/// 폼 체크후 전송
function shFormSubmit(formName){
	var checkArray = shFormCheck(formName);
	var checkSize = checkArray.length;

	if(checkSize > 0){
		alertStr = shGetMsg("CHECK_FIELDS") + "\n\n";
		alertStr += shArray2StrEval( "- ", checkArray, "\n", "");
		alert(alertStr);
	}else{
		if(checkSize == 0){
			var sConfirmMsg = "";
			var arg = shFormSubmit.arguments;
			if(arg != undefined && arg != null && arg.length > 1&& arg[1] != "") sConfirmMsg = arg[1];

			if(sConfirmMsg != ""){
				if(confirm(sConfirmMsg)) formName.submit();
			}else formName.submit();
		}
	}

}




/// 문서가 모두 로딩시 초기화
function shOnLoadInit(){

    var frm = document.forms;
    var fsize = frm.length;

    for( f = 0 ; f < fsize ; f++ ){
		var inputs = Form.getElements(frm[f]);
		for( i=0; i < inputs.length; i++){

			//// 날짜변환
			if(inputs[i].date != undefined ){
				inputs[i].style.behavior = "url(/js/common/htc/htc_calendar2.htc)";
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.1, shDateDash );
			}

			//// 이메일체크
			if(inputs[i].email != undefined ){
				new Form.Element.EventObserver( inputs[i].name, shEmail );
			}

			//// 전화번호체크
			if(inputs[i].phone != undefined ){
				new Form.Element.Observer( inputs[i].name, 0.1, shPhone );
			}


			//// 핸드폰체크
			if(inputs[i].hphone != undefined ){
				new Form.Element.Observer( inputs[i].name, 0.1, shHphone );
			}


			//// 숫자체크
			if(inputs[i].number != undefined ){
				inputs[i].style.textAlign = "right";
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.1, shNumber );
			}

			//// 숫자체크 (왼쪽정렬)
			if(inputs[i].textnum != undefined ){
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.1, shNumber );
			}

			//// 숫자체크 (왼쪽정렬)
			if(inputs[i].textwon != undefined ){
				shNumberComma( inputs[i], $F(inputs[i]) );
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.1, shNumberComma );
			}

			//// 금액변환
			if(inputs[i].won != undefined ){
				inputs[i].style.textAlign = "right";
				shNumberComma( inputs[i], $F(inputs[i]) );
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.1, shNumberComma );
			}

			//// 문자열 길이 체크
			if(inputs[i].textlimit != undefined ){
				new Form.Element.Observer( inputs[i].name, 0.1, shTextSizeLimit );
			}

			//// 읽기전용
			if(inputs[i].readmode != undefined ){
				//inputs[i].style.overflow = "hidden";

				inputs[i].style.border = "none";
				inputs[i].style.cursor = "default";
				inputs[i].blur();
				Try.these( inputs[i].readOnly="true");

				//if(inputs[i].type == "text" && inputs[i].size != undefined){
					//alert($F(inputs[i]).length);
					//alert(inputs[i].size + ":" + $F(inputs[i]).length);
					//inputs[i].size = 10;
					//$(inputs[i]).size = $F(inputs[i]).length;
				//}


			}

			//// 체크박스,라디오버튼 테두리 삭제
			if(inputs[i].type == "checkbox" || inputs[i].type == "radio"){
				inputs[i].style.border = "none";
			}

			//// 텍스트필드에서 숫자의 크기를 제한
			if(inputs[i].limit != undefined ){
				if( inputs[i].name != "") new Form.Element.Observer( inputs[i].name,0.3, shNumberLimit );
			}

			//// 텍스트필드에서 숫자의 크기를 제한
			if(inputs[i].over != undefined ){
				Event.observe( inputs[i], 'blur', shNumberOver(inputs[i], inputs[i].value)  ,true );
			}

			/// 합계
			if(inputs[i].sum != undefined && inputs[i].sum != "" ){
				shSum(inputs[i], inputs[i].sum);
			}

			//// 주민등록번호 체크
			if(inputs[i].ssn != undefined ){
				new Form.Element.EventObserver( inputs[i].name, shCheckSSN );
			}



			if(inputs[i].type != undefined && inputs[i].type == "text" ){
				if( inputs[i].name != undefined && inputs[i].name != ""){
					new Form.Element.Observer( inputs[i].name, 0.1, shTextReplaceApostrophe );
				}
			}


		}
	}

}

/// 온로드시 초기화
Event.observe(window, 'load', shOnLoadInit, false);






/// 배열에 속성값을 스트링으로 반환
function shArray2StrEval(preInsertion, array , postInsertion, evalStr ){
	var rtn = "";
	var size = array.length;
	for( i = 0 ; i < size ; i++ ){
		var addStr = array[i];
		if(evalStr != undefined && evalStr != "") addStr = eval("array[i]"+evalStr);
		if(addStr != undefined && addStr != ""){
			rtn += preInsertion + addStr + postInsertion;
		}
	}
	return rtn;
}

/// 배열의 값을 반환
function shArray2Str(preInsertion, array , postInsertion ){
	var rtn = "";
	rtn += shArray2StrEval(preInsertion, array , postInsertion, ".hname" );
	rtn += shArray2StrEval(preInsertion, array , postInsertion, ".email" );
	return rtn;
}


/// 이메일 체크
function shCheckEmail(ObjMail){
 if (ObjMail.search(/^\s*[\w\~\-\.]+\@[\w\~\-]+(\.[\w\~\-]+)+\s*$/g) == -1 ){
     return false;
 }
 return true;
}

/// 이메일 체크 함수
function shEmail(element, numberValue){
	if(numberValue != ""){
		if(!shCheckEmail(element.value)){
			alert(shGetMsg("CHECK_EMAIL"));
		    element.value = "";
		    element.focus();
		}
	}
}



/// 전화번호 체크 000-000-0000
function shCheckPhone(ObjMail){
 if (ObjMail.search(/^\s*[0-9]+\-[0-9]+\-[0-9]+\s*$/g) == -1 ){
     return false;
 }
 return true;
}
/// 핸드폰  체크 000-000-0000
function shCheckHPhone(objForm){
	var temp_value = objForm.substring(0, 3);
	if(temp_value.search(/01[0|1|6|7|8|9]/) == -1){
		//alert("011/010/016/017/018/019 중의 핸드폰 번호를 입력하여야 합니다.");
		temp_value = "01";
	    return false;
	}
	if (objForm.search(/^\s*[0-9]+\-[0-9]+\-[0-9]+\s*$/g) == -1 ){
	    return false;
	}
 return true;
}




/// 전화번호 체크
function shPhone(element, numberValue){

	var delimiter1 = "-";
	var delimiter2 = "-";

	var telNo = numberValue;
	var telLen = telNo.length;

	var maxLen = 13;
	if(telLen > 3){
		var l2 = telNo.substring(0, 2);
		var l3 = telNo.substring(0, 3);

		if (l2 == "02") maxLen = 12;
		else if (l3 == "050") maxLen = 14;
		else if (l2 == "15") maxLen = 9;
	}

	if( telLen <= maxLen ){

		var pattern = /(^02|0(?:[3-6][1-5])|[0|1]5(?:[0-9]{2}))([0-9]+$)/;
		var pattern2 = /(^02|0(?:[3-6][1-5])|[0|1]5(?:[0-9]{2}))([0-9]+)([0-9]{4}$)/;

		telNo = telNo.replace(/[^0-9]/g,"");
		if(telLen > 5 && telLen < 9){
			if(telNo.search(pattern) != -1 ){
				element.value =  telNo.replace(pattern,"$1-$2");
			}else{
				alert("전화번호형식에 맞지 않습니다.");
				element.value = "";
			}
		}

		if(telLen >= 9){

			if(telNo.search(pattern2) != -1 ){
				element.value =  telNo.replace(pattern2,"$1-$2-$3");
			}else{
				alert("전화번호형식에 맞지 않습니다.");
				element.value = "";
			}
		}

	}else{

		element.value = telNo.substring(0,maxLen);
	}

}

/// 핸드폰 체크
function shHphone(element, numberValue){
    temp_value = numberValue.toString();

    if(temp_value != ""){
    	temp_len = temp_value.length;
	    if(temp_len == 3){
			if(temp_value.search(/01[0|1|6|7|8|9]/) == -1){
				alert("011/010/016/017/018/019 중의 핸드폰 번호를 입력하여야 합니다.");
				 temp_value = "01";
			}
	    }

		temp_value = temp_value.replace(/[^0-9]/g,"");
		temp_len = temp_value.length;
		if(temp_len >= 4 && temp_len <= 7){
	    	temp_value = temp_value.replace(/(0(?:2|[0-9]{2}))([0-9]+$)/,"$1-$2");
	    }else if(temp_len >= 8 && temp_len <= 9){
	    	temp_value = temp_value.replace(/(0(?:2|[0-9]{2}))([0-9]{3})([0-9]+$)/,"$1-$2-$3");
	    }else if(temp_len == 10){
	    	temp_value = temp_value.replace(/(0(?:2|[0-9]{2}))([0-9]{3})([0-9]{4}$)/,"$1-$2-$3");
	    }else if(temp_len == 11){
	    	temp_value = temp_value.replace(/(0(?:2|[0-9]{2}))([0-9]{4})([0-9]{4}$)/,"$1-$2-$3");
	    }else{
	    	temp_value = temp_value.substring(0,11);
	    	temp_value = temp_value.replace(/(0(?:2|[0-9]{2}))([0-9]{4})([0-9]{4}$)/,"$1-$2-$3");
	    }
	}

    element.value = temp_value;
}


/// 숫자만 입력
function shNumber(element, numberValue) {
	//입력 숫자의 첫번째가 0으로 시작하면 메세지후 삭제
    //if(numberValue.length > 1 && numberValue.substr(0,1) == "0"){
       // alert("입력숫자는 0 으로 시작할 수 없습니다.");
		//element.value = "";
    //}



  	if(numberValue != ""){
	    if (isNaN(numberValue)) {
	    	//숫자인가 비교
		    alert(shGetMsg("CHECK_NUMBER"));
		    element.value = "";
		    element.focus();
	    }else{


			/// 소수점 이하 자리수 셋팅
			if(element.number != undefined){

				if(numberValue.indexOf(".") != -1){
					 var arrNumberValue = numberValue.split('.');
					 var digitNum = "";
					 var digitCount = 0;

					 /* 소숫점 변동 */
					 //alert(digitCount+":"+digitNum+":"+element.won+":"+element.name);
					 if(arrNumberValue.length == 2 && arrNumberValue[1].length > 1){
						 if(!isNaN(element.number) && parseFloat(element.number) > 0){
							digitCount = parseFloat(element.number);
						 }
						 //alert(digitCount +":"+element.name);
						 if(arrNumberValue[1].length > digitCount) //digitCount = arrNumberValue[1].length;
						 	digitNum = arrNumberValue[1].substring(0,digitCount);

/*						 if(digitNum != ""){
							 replaceNumber = arrNumberValue[0] + "." + digitNum;
						 }else replaceNumber = arrNumberValue[0];*/
						if(digitNum != ""){
							element.value = arrNumberValue[0] + "." + digitNum;
						}

					 }
				}

			}

		}
	}
}


/// 통화나 수량에 , 추가
function shNumberComma(element, numberValue) {
	//입력 숫자의 첫번째가 0으로 시작하면 메세지후 삭제
    //if(numberValue.length > 1 && numberValue.substr(0,1) == "0"){
       // alert("입력숫자는 0 으로 시작할 수 없습니다.");
		//element.value = "";
    //}

	//콤마 삭제
    var replaceNumber = numberValue.replace(/^\$|,/g, "") + "";

	var iTemp = replaceNumber.indexOf(".");
	if(replaceNumber.length > 1 && (iTemp == -1 || iTemp != (replaceNumber.length-1))){
		//alert(replaceNumber.indexOf(".") + " " + replaceNumber.length);
		if(isNaN(replaceNumber)) element.value = "";
		else replaceNumber = parseFloat(replaceNumber)+"";
	}

	/// 소수점 이하 자리수 셋팅
	if(element.won != undefined || element.textwon != undefined ){

		if(replaceNumber.indexOf(".") != -1){
			 var arrNumberValue = replaceNumber.split('.');
			 var digitNum = "";
			 var digitCount = 0;

			 /* 소숫점 변동 */
			 //alert(digitCount+":"+digitNum+":"+element.won+":"+element.name);
			 if(arrNumberValue.length > 1 && arrNumberValue[1].length > 0){

				 if(!isNaN(element.textwon) && parseFloat(element.textwon) > 0){
					digitCount = parseFloat(element.textwon);
				 }


				 if(!isNaN(element.won) && parseFloat(element.won) > 0){
					digitCount = parseFloat(element.won);
				 }

				 //alert(digitCount +":"+element.name);
				 if(arrNumberValue[1].length < digitCount) digitCount = arrNumberValue[1].length;
				 digitNum = arrNumberValue[1].substring(0,digitCount);


				 if(digitNum != ""){
					 replaceNumber = arrNumberValue[0] + "." + digitNum;
				 }else replaceNumber = arrNumberValue[0];
			 }

		}

	}


  	//3자리마다 콤마 추가
  	if(replaceNumber != ""){
	    if (isNaN(replaceNumber)) {
	    	//숫자인가 비교
		    alert(shGetMsg("CHECK_NUMBER"));
		    element.value = "";
		    element.focus();
	    } else {
	        var comma = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	        var digit = replaceNumber.split('.');
	        digit[0] += '.';

	        do {
	            digit[0] = digit[0].replace(comma, '$1,$2');
	        } while (comma.test(digit[0]));

	        if (digit.length > 1) {
	        	element.value =  digit.join('');
	        } else {
	        	element.value =  digit[0].split('.')[0];
	       	}

	    }

	}
}

/// 날짜변환함수 : '2006-03-03'을 자바스크립트 Date로 변환
function shToDate(dateStr){
	if(dateStr.length == 10 && dateStr.indexOf("-") != -1 && dateStr.split("-").length == 3){

		if( shDateCheck(dateStr) ){
			var arrDate = dateStr.split("-");
			var rtnDate = new Date(arrDate[0], (parseInt(arrDate[1].replace(/^0/, ""))-1), arrDate[2]);

			return rtnDate;
		}
	}
	return "";
}



/// 날짜체크 함수
function shDateCheck(date){
	if(date.length == 10 && date.indexOf("-") != -1 && date.split("-").length == 3){
		var arrDate = date.split("-");
		var compDate = new Date(arrDate[0], (parseInt(arrDate[1].replace(/^0/, ""))-1), arrDate[2]);
		var month = (compDate.getMonth() < 9 ? "0" + (compDate.getMonth() + 1) : (compDate.getMonth() +1) ) ;
		var day = (compDate.getDate() < 10 ? "0" + compDate.getDate() : compDate.getDate() ) ;
		var compDateStr = compDate.getYear() + "-" + month + "-" + day;
		//alert("compDateStr "+compDateStr+" date"+ date);

		if(date != compDateStr){

			/// 메세지 변경가능하도록 추가 파라메터를 "" 으로 입력하면 메세지없음
			var sConfirmMsg = shGetMsg("CHECK_DATE");
			var arg = shDateCheck.arguments;
			if(arg != undefined && arg != null && arg.length > 1) sConfirmMsg = arg[1];

			if(sConfirmMsg != ""){
				alert(sConfirmMsg);
			}
			return false;
		}
	}
	return true;
}


function shDateToStr(date){
	if( date != null && date.getYear != undefined ){

		var month = (date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : (date.getMonth() +1) ) ;
		var day = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate() ) ;
		var sDate = date.getYear() + "-" + month + "-" + day;

		return sDate;
	}
	return "";
}

/// 날짜에 - 추가
function shDateDash(element, numberValue) {
	//입력 숙자의 첫번째가 0으로 시작하면 메세지후 삭제
    if(numberValue.substr(0,1) == "0"){
        alert("입력숫자는 0 으로 시작할 수 없습니다.");
		element.value = "";
    }

	//대시 삭제
    var replaceNumber = numberValue.replace(/^\$|-/g, "") + "";

  	//대시 추가
  	if(replaceNumber != ""){
	    if (isNaN(replaceNumber)) {
	    	//숫자인가 비교
		    alert(shGetMsg("CHECK_NUMBER"));
		    element.value = "";
		    element.focus();
	    } else {

	    	var rnSize = replaceNumber.length;
	    	var rtn = "";

	    	if( rnSize > 4){
	    		if( rnSize < 7 ){
	    			rtn = replaceNumber.substring(0,4)
	    				+ "-"
	    				+ replaceNumber.substring(4,rnSize);
	    		}else{
	    			if( rnSize > 8 ) rnSize = 8;
	    			rtn = replaceNumber.substring(0,4)
	    				+ "-"
	    				+ replaceNumber.substring(4,6)
	    				+ "-"
	    				+ replaceNumber.substring(6,rnSize);
					if( rtn.length == 10 && !shDateCheck(rtn)) rtn = "";

					//// 날짜를 비교하여 이전,이후값만 입력되도록 한다
					if( rtn.length == 10 ){

						if( element.date != undefined && element.date.indexOf(":") != -1 ){

							var arElement = element.date.split(":");
							if( arElement.length == 2 && arElement[0] != "" && arElement[1] != "" ){
								if( arElement[1] == "today" || shDateCheck(arElement[1],"") ){

									var vCompareDate = new Date();
									if( arElement[1] != "today" ) vCompareDate = shToDate(arElement[1], "");
									if( arElement[1] == "tomorrow" ) vCompareDate = new Date(Date.parse(new Date()) + 24*60*60*1000);
									if( arElement[1] == "yesterday" ) vCompareDate = new Date(Date.parse(new Date()) - 24*60*60*1000);


									//alert((vCompareDate-24*60*60*1000) +" > "+ shToDate(numberValue) + " : " + (vCompareDate > shToDate(numberValue))   );
									var sCompareDate = shDateToStr(vCompareDate);
									if( arElement[0] == "before" && vCompareDate < shToDate(numberValue) ){
										alert( sCompareDate + " 이전으로 날짜를 입력해주십시오.");
										element.value = "";
										return;
									}else if( arElement[0] == "after" && ((vCompareDate - 24*60*60*1000) > shToDate(numberValue)) ){
										alert( sCompareDate + " 이후로 날짜를 입력해주십시오.");
										element.value = "";
										return;
									}

								}



							}

						}
					}


	    		}

	    	}else{
	    		rtn = replaceNumber;
	    	}

	        element.value =  rtn;

	    }
	}
}




function shTextReplaceApostrophe(element, value){
	if(value.indexOf("'") != -1 || value.indexOf("\"") != -1){
		element.value = value.replace(/^\$|['"]/g, "`");
	}
}


/// 체크상태 반전 obj = form.ckeckbox
var checkBoxStatus = true;
function shCheckAll(obj){
	if(checkBoxStatus){
		checkFiled(obj,checkBoxStatus);
		checkBoxStatus = false;
	}else{
		checkFiled(obj,checkBoxStatus);
		checkBoxStatus = true;
	}
}

// 그룹단위로 지정된 여러개의 체크박스를 체크 및 체크해제
var arCheckBoxStatus = new Array();
function shCheckAllGroup(obj){
	var objName = "";
	if(obj.name == undefined) objName = obj[0].name;
	else objName = obj.name;

	var checkedCnt = -1;

	// 배열에 있는지 검색하여 있으면 index값을 저장
	for( chkCnt = 0; chkCnt < arCheckBoxStatus.length; chkCnt++ ){
		if(arCheckBoxStatus[chkCnt] == objName) checkedCnt = chkCnt;
	}

	if(checkedCnt == -1){
		checkFiled(obj,true);
		arCheckBoxStatus[arCheckBoxStatus.length] = objName;
	}else{
		checkFiled(obj,false);
		arCheckBoxStatus.splice(checkedCnt--, 1);
	}
}

// 체크상태변화 (rev:반전,true=전체선택,false=전체해제)
function checkFiled(obj,flag) {
        var obj_len=(typeof(obj.length) == 'undefined') ? 1 : obj.length;
        var obj_type=(typeof(obj.type) == 'undefined')? obj[0].type : obj.type;
        var opt=''; // 선택
        switch(obj_type)
        {
                case 'select-one': case 'select-multiple' : opt='selected'; break;
                case 'checkbox' : case 'radio' : opt='checked'; break;
        }
        if (obj_len > 1) {
                for (var i=0; i < obj_len; i++) {

                        if (obj_type == 'select-one' || obj_type=='radio' ) {
                                return;
                        }else if (obj_type == 'checkbox') {
                                if (flag == 'rev') {
									if( obj[i].disabled != undefined && !obj[i].disabled ) {
                                        if (eval("obj["+i+"]."+opt) ) eval("obj["+i+"]."+opt+"=false");
                                        else eval("obj["+i+"]."+opt+"=true");
									}
                                }else {
                                       if( obj[i].disabled != undefined && !obj[i].disabled )  eval("obj["+i+"]."+opt+"="+flag);
                                }
                        }else{
                                if (flag == 'rev') {
                                        if (eval("obj.options["+i+"]."+opt) ) eval("obj.options["+i+"]."+opt+"=false");
                                        else eval("obj.options["+i+"]."+opt+"=true");
                                }else {
                                        eval("obj.options["+i+"]."+opt+"="+flag);
                                }
                        }
                }
        }else{
                if (obj_type == 'select-one' || obj_type=='radio' ) {
                        return;
                }else if (obj_type == 'checkbox') {
                        if (flag == 'rev') {
							if( obj.disabled != undefined && !obj.disabled ) {
                                if (eval("obj."+opt) ) eval("obj."+opt+"=false");
                                else eval("obj."+opt+"=true");
							}
                        }else {
                            if( obj.disabled != undefined && !obj.disabled )  eval("obj."+opt+"="+flag);
                        }
                }else{
                        if (flag == 'rev') {
                                if (eval("obj.options[0]."+opt) ) eval("obj.options[0]."+opt+"=false");
                                else eval("obj.options[0]."+opt+"=true");
                        }else {
                                eval("obj.options[0]."+opt+"="+flag);
                        }
                }
        }
}

//체크박스, 라디오, 셀렉트 선택값 가져오기 - 전체 배열의 값을 리턴
function shGetMultiField(obj) {
        var arr=(typeof(obj.length) == 'undefined')? '' : new Array();
        var obj_len=(typeof(obj.length) == 'undefined') ? 1 : obj.length;
        var obj_type=(typeof(obj.type) == 'undefined')? obj[0].type : obj.type;
        var opt=''; // 선택
        switch(obj_type)
        {
                case 'select-one': case 'select-multiple' : opt='selected'; break;
                case 'checkbox' : case 'radio' : opt='checked'; break;
        }

        if (obj_len > 1) {
                for (var i=0; i < obj_len; i++) {
                        if (eval("obj["+i+"]."+opt))
                        {
                                if (obj_type == 'select-one' || obj_type == 'radio')
                                {
                                        return obj[i].value;
                                }else{
                                        arr[i]=obj[i].value;
                                }
                        }else arr[i]='';
                }
                return arr;
        }else{
                if (obj_type == 'checkbox' || obj_type == 'radio') {
                        if (eval("obj."+opt)) return obj.value;
                }else{
                        if (eval("obj.options[0]."+opt)) return obj.value;
                }
        }
        return '';
}

//체크박스, 라디오, 셀렉트 모든값 가져오기 - 전체 배열의 값을 리턴
function shGetMultiFieldAll(obj) {
        var arr=(typeof(obj.length) == 'undefined')? '' : new Array();
        var obj_len=(typeof(obj.length) == 'undefined') ? 1 : obj.length;
        var obj_type=(typeof(obj.type) == 'undefined')? obj[0].type : obj.type;
        var opt=''; // 선택
        switch(obj_type)
        {
                case 'select-one': case 'select-multiple' : opt='selected'; break;
                case 'checkbox' : case 'radio' : opt='checked'; break;
        }

        if (obj_len > 1) {
                for (var i=0; i < obj_len; i++) {

						if (obj_type == 'select-one' || obj_type == 'radio'){
								return obj[i].value;
						}else{
								arr[i]=obj[i].value;
						}
                }
                return arr;
        }else{
                if (obj_type == 'checkbox' || obj_type == 'radio') {
                       return obj.value;
                }else{
                       return obj.value;
                }
        }
        return '';
}

/// 체크박스, 라디오, 셀렉트 선택값 가져오기 - 빈값 삭제
function shGetMultiFieldValues(obj){
		var array =  shGetMultiField(obj);
		for( i = 0 ; i < array.length ; i++ ) {
			if( array[i] == "" )  array.splice(i--, 1);

		}
		return array;
}


/// 배열에서 중복내용 삭제
function jsDupDel(vaSrc, vaChkSrc){
	alert("src:" + vaSrc + "\n chksrc: " + vaChkSrc);
	//var vaSrc = new Array();
	//var vaChkSrc = new Array();

	if( vaSrc != "" && vaChkSrc != "" ){

		//if( src.indexOf(",") == -1 ) vaSrc[0] = src;
		//else vaSrc = src.split(",");

		//if( src.indexOf(",") == -1 ) vaChkSrc[0] = chksrc;
		//else vaChkSrc = chksrc.split(",");

		for( i = 0; i < vaSrc.length; i++ ){

			for( j = 0; j < vaChkSrc.length; j++ ){

				if( vaSrc[i] == vaChkSrc ) vaSrc.splice(i--, 1);
			}
		}

		return vaSrc.join(",");
	}
	return src;
}

/// 셀렉트박스에 값을 선택
function shSelectSelected(selectObj, value){
	if(selectObj != undefined && selectObj != null ){
		var obj_type=( selectObj.type == undefined)? selectObj[0].type : selectObj.type;

		//// 셀렉트박스
		if(obj_type == "select-one"){
			var iSize = selectObj.options.length;
			for( i = 0 ; i < iSize ; i++ ) {
				if( selectObj.options[i].value == value){
					selectObj.options[i].selected = "true";
				}
			}
		}
		//// 라디오, 체크박스
		if(obj_type == "checkbox" || obj_type == "radio"){
			if(selectObj.length != undefined){
				var iSize = selectObj.length;
				for( i = 0 ; i < iSize ; i++ ) {
					if( selectObj[i].value == value){
						selectObj[i].checked = "true";
					}
				}
			}else{


			}

		}


	}

}


/// 텍스트박스의 내용을 모두 바꾼다.
function shTextBoxChangeAll(inputValue, changeInputName) {
	var objs = Form.getInputs(frm,"text");
	for( i = 0 ; i < objs.length ; i++ ) {
		if(objs[i].name.indexOf(changeInputName) != -1)
			objs[i].value = inputValue;
	}
}

/// input타입의 배열의 값들을 콤마로구분된 스트링으로 리턴
function shArrayValueString(inputObj){
	if(inputObj.value != undefined){
		return inputObj.value;
	}else{
		var inputSize = inputObj.length;
		var returnValue = new Array();
		for( i = 0 ; i < inputSize ; i++ ){
			returnValue[i] = inputObj[i].value;
		}
	}
	return returnValue.join(",");
}

/// 텍스트필드에서 숫자의 크기를 제한
function shNumberLimit(element, numberValue){

	//콤마 삭제
    var numberValue = numberValue.replace(/^\$|,/g, "") + "";

	//입력 숫자가 지정된 숫자보다 크면 값초기화
	//alert(numberValue + " > " + element.limit + " " +(parseInt(numberValue) > parseInt(element.limit)) );
    //if(element.limit != undefined &&  (parseInt(numberValue) > parseInt(element.limit)) ){
    //numberValue: 사용자가 입력한 값  element.limit: 길이제한
    if(element.limit != undefined &&  (numberValue.length > parseInt(element.limit)) ){

		element.value = numberValue.substring(0,element.limit);
        alert("입력숫자는 "+ element.limit+" 자리 이하로 입력하여야 합니다.");

    }
}

/// 텍스트필드에서 숫자의 크기를 제한
function shNumberOver(element, numberValue){

	//콤마 삭제
    var numberValue = numberValue.replace(/^\$|,/g, "") + "";

	//입력 숫자가 지정된 숫자보다 크면 값초기화
	//alert(numberValue + " > " + element.limit + " " +(parseInt(numberValue) > parseInt(element.limit)) );
    if(element.over != undefined &&  (numberValue.length <= parseInt(element.over)) ){

        alert("입력숫자는 "+ element.over+" 자리 이상으로 입력하여야 합니다.");
		//element.value = "";
    }
}

function shDelComma(value){
	return value.replace(/^\$|,/g, "") + "";
}

//<!--오른쪽 버튼 사용 못하게 함-->
function click() {
	 if((event.button==2) || (event.button==3)) {
	  //alert("오른쪽 버튼은 사용하실 수 없습니다");
	  return false;
	 }
}
function keypressed() {
	 var key=event.keyCode;
	 if(key==16) { alert('Shift키는 사용 불가능합니다.'); return false; }
	 if(key==17) { alert('Ctrl키는 사용 불가능합니다.'); return false; }
	 if(key==18) { alert('Alt키는 사용 불가능합니다.'); return false; }
	 if(key==93) { alert('메뉴키는 사용 불가능합니다.'); return false; }
	 if(key==41) { alert('메뉴키는 사용 불가능합니다.'); return false; }
}
//document.onmousedown=click;
//document.onkeydown=keypressed;
//<!--/오른쪽 버튼 사용 못하게 함-->

/// 합계
function shSum(targetObj, sourceObjName){

	var jTotalSum = 0;

    var frm = document.forms;
    var fsize = frm.length;

    for( f = 0 ; f < fsize ; f++ ){

		var objs = frm[f].elements;



		for( iObj = 0 ; iObj < objs.length ; iObj++ ) {

			if( objs[iObj].name != undefined && objs[iObj].name == sourceObjName){

				var sValue = objs[iObj].value.replace(/^\$|,/g, "") + "";
				if(isNaN(sValue) || sValue == "") sValue = "0";

				jTotalSum += parseFloat(sValue);

			}
		}

	}

	if( targetObj.value != undefined ) targetObj.value = jTotalSum;

}



/**
* string String::cut(int len)
* 글자를 앞에서부터 원하는 바이트만큼 잘라 리턴합니다.
* 한글의 경우 2바이트로 계산하며, 글자 중간에서 잘리지 않습니다.
*/
String.prototype.cut = function(len) {
		var str = this;
		var l = 0;
		for (var i=0; i<str.length; i++) {
				l += (str.charCodeAt(i) > 128) ? 2 : 1;
				if (l > len) return str.substring(0,i);
		}
		return str;
}

/**
* bool String::bytes(void)
* 해당스트링의 바이트단위 길이를 리턴합니다. (기존의 length 속성은 2바이트 문자를 한글자로 간주합니다)
*/
String.prototype.bytes = function() {
		var str = this;
		var l = 0;
		for (var i=0; i<str.length; i++) l += (str.charCodeAt(i) > 128) ? 2 : 1;
		return l;
}


function shTextSizeLimit(element, value){

	if( value != "" && element.textlimit != "" && !isNaN(element.textlimit) ){
		var iLimit = parseInt(element.textlimit);

		//UTF-8인경우 한글영문 모두 3바이트로 처리되므로 한글,영문처리를 동일하게 한다.
		/*
		if( value.bytes() > iLimit ){

			alert("최대 한글 " + Math.floor(iLimit/2) + "자 또는 영문" + iLimit + "까지 입력할 수 있습니다.");
			element.value = value.cut(iLimit);

		}
		*/
		if( value.length > iLimit ){
			if( MSG_NATIONAL == "ENG" ) alert("Should be typed less than "+iLimit);
			else alert("최대 " + iLimit + "까지 입력할 수 있습니다.");
			element.value = value.substring(0, iLimit);
		}

	}
}

/// 체크박스 선택
function shCheckBoxChecked( obj, value ){
	if( value != "" && obj != undefined && obj != null ){
		if(obj.value == undefined){
			for( i = 0; i < obj.length; i++ ){
				if(obj[i].value == value) obj[i].checked = true;
			}
		}else{
			if(obj.value == value) obj.checked = true;
		}
	}
}

//한글입력여부 검사
function nonkr(str) {

	onvalue = str.value;

	 if (onvalue.search(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힝]/) != -1) {
		return true;
	}
	else {
		return false;
	}
}

//	정규식 체크
function getBlnRegExp(strPattern, strString){
	var pattern = strPattern;
	return pattern.test(strString);
}

//문자열 앞뒤 공백 제거
function trim(s){
	s = s.replace(/^\s*/,'').replace(/\s*$/, '');
	return s;
}

function shCheckSSN(element, numberValue){
        var juminno = numberValue;
        juminno = juminno.replace(/[^0-9]/g,"");

        if(shJuminNoCheck(juminno) ) {
            element.value = juminno.substring(0,6) + "-" + juminno.substring(6,juminno.length);
        }else{
            if(juminno.length > 6){
                element.value = juminno.substring(0,6) + "-" + juminno.substring(6,juminno.length);
            }else{
                element.value = numberValue;
            }
            alert("유효하지 않은 주민등록번호입니다. 다시 입력해주십시요.");
        }

}


// 주민번호 체크
function shJuminNoCheck(juminno) {

        juminno = juminno.replace(/[^0-9]/g,"");

        if(juminno=="" || juminno==null || juminno.length!=13) {
                return false;
        }
        var jumin1 = juminno.substr(0,6);
        var jumin2 = juminno.substr(6,7);
        var yy     = jumin1.substr(0,2);     // 년도
        var mm     = jumin1.substr(2,2);     // 월
        var dd     = jumin1.substr(4,2);     // 일
        var genda = jumin2.substr(0,1);     // 성별
        var msg, ss, cc;


        // 길이가 6이 아닌 경우
        if (jumin1.length != 6) {
                return false;
        }
        // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
        if (yy < "00" || yy > "99" ||
                mm < "01" || mm > "12" ||
                dd < "01" || dd > "31") {
                return false;
        }


        // 길이가 7이 아닌 경우
        if (jumin2.length != 7) {
                return false;
        }

        // 성별부분이 1 ~ 4 가 아닌 경우
        if (genda < "1" || genda > "4") {
                return false;
        }

        // 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대
        cc = (genda == "1" || genda == "2") ? "19" : "20";
        // 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
        if (isYYYYMMDD(parseInt(cc+yy), parseInt(mm), parseInt(dd)) == false) {
                return false;
        }


         // Check Digit 검사
        if (!isSSN(jumin1, jumin2)) {
                return false;
        }

        return true;
}



function isYYYYMMDD(y, m, d) {
        switch (m) {
        case 2:     // 2월의 경우
                if (d > 29) return false;
                if (d == 29) {
                     // 2월 29의 경우 당해가 윤년인지를 확인
                        if ((y % 4 != 0) || (y % 100 == 0) && (y % 400 != 0))
                                return false;
                }
                break;
        case 4:     // 작은 달의 경우
        case 6:
        case 9:
        case 11:
                if (d == 31) return false;
        }
        // 큰 달의 경우
        return true;
}


function isLeapYear(y) {
        if (y < 100)
        y = y + 1900;
        if ( (y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0) ) {
                return true;
        } else {
                return false;
        }
}

function getNumberOfDate(yy, mm) {
        var month = new Array(29,31,28,31,30,31,30,31,31,30,31,30,31);
        if (mm == 2 && isLeapYear(yy)) mm = 0;
        return month[mm];
}

function isSSN(s1, s2) {
        var n = 2;
        var sum = 0;

        for (var i=0; i<s1.length; i++){
            sum += parseInt(s1.substr(i, 1)) * n++;
        }


        for (var i=0; i<s2.length-1; i++) {
                sum += parseInt(s2.substr(i, 1)) * n++;
                if (n == 10) n = 2;
        }

        var c = 11 - sum % 11;
        if (c == 11) c = 1;
        if (c == 10) c = 0;
        if (c != parseInt(s2.substr(6, 1))){
            return false;
        }else{
            return true;
        }




}


function onlyNumberInput(code){

		for (i=0 ; i <code.length ; i++) {

			var str = code.substring(i,i+1);

			if ((code > 34 && code < 41) || (code > 47 && code < 58) || (code > 95 && code < 106) || code == 8 || code == 9 || code == 13 || code == 46){
				return false;
			}


		}

		return true;

	}

