﻿/********************************************************************
 *
 * Form 관련 스크립트 함수 모음
 *
 *******************************************************************/
 	//숫자만 입력받는 폼 체크
	function isNum(field, name) { 
	 var valid = '0123456789-.';
	 var temp; 
	
	 for (var i=0; i<field.value.length; i++) { 
	  temp = '' + field.value.substring(i, i+1); 
	  if (valid.indexOf(temp) == "-1") {
	   alert(name + '란은 숫자로만 입력해 주세요.'); 
	   field.value='';
	   field.focus(); 
	   return false; 
	  }
	 } 
	 return true; 
	}
	

	/* --- 숫자만 입력 가능 (onKeyDown 이벤트) --- */
	/* 사용법 <input type="text" name="***" onKeyPress="onlyNumberInput();"  style="text-align:right; ime-mode:disabled;" /> */
	/* 주의 : ime-mode:disabled; 를 style로 꼭 줘야 한글 입력이 안됨*/
	function onlyNumberInput(){
		if (event.keyCode >= 48 && event.keyCode <= 57) { //숫자키만 입력
			return true;
		} else {
			event.returnValue = false;
		}
	}

	/* --- 숫자만 입력 가능 (onKeyDown 이벤트) --- */
	/* 문자 입력시 경고창 {사용 : onBlur="CheckNumber('11',this);" ) val은 경고창 뛰운 후 디펄트값 반환*/
	function CheckNumber(val, fl) {
		t = fl.value ;
		
		for(i=0;i<t.length;i++) 
		if (t.charAt(i)<'0' || t.charAt(i)>'9') {
			alert("숫자만 입력해주세요.") ;
			fl.value=val;
			fl.focus() ;
			return false ;
		}
	}
 
	var initFormName = null; // initForm에 사용될 폼 이름 (추후 content페이지에서 재정의됨)

	// 폼 검증 함수
	function checkForm(f) {
		var fLen = f.elements.length;
		var fObj;	// 폼 요소
		var fTyp;	// 폼 요소 Type
		var fVal;	// 폼 요소 Value
		var fMsg;	// 경고 메시지 속성
		var fNum;	// 숫자만 입력 속성
		var fMax;	// 최대 길이 지정
		var fMin;	// 최소 길이 지정
		var fMxN;	// 최대값 지정
		var fMnN;	// 최소값 지정
		var fMal;	// 메일 FORMAT
		var fLab;   // for 태그의 이름을 가져오기 위한

		for (i=0;i<fLen;i++) {
			fObj = f.elements[i];
			fTyp = toUpperCase(fObj.getAttribute("type"));
			fVal = fObj.value;
			fMsg = fObj.getAttribute("required");	// 경고 메시지
			fNum = fObj.getAttribute("chknum");		// 숫자만 기입 가능하도록
			fMax = fObj.getAttribute("maxlen");		// 최대 입력글자수 제한
			fMin = fObj.getAttribute("minlen");		// 최소 입력글자수 제한
			fMxN = fObj.getAttribute("maxnum");		// 최대 숫자 제한
			fMnN = fObj.getAttribute("minnum");		// 최소 숫자 제한
			fMal = fObj.getAttribute("chkmail");	// 이메일 체크
			fTit = fObj.getAttribute("title");	// 이메일 체크


			if (fMsg != null && (fTyp == "TEXT" || fTyp == "HIDDEN" || fTyp == "TEXTAREA" || fTyp == ""  || fTyp == "PASSWORD") && fVal.replace(/ /gi,"") == "") {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목은 ";
				alert(fMsg + "필수 입력 사항입니다.");
					fObj.style.backgroundColor = "#FFFFCC";
				if (fTyp != "HIDDEN") {fObj.focus();}
				return false;
			}
			if (fMsg != null && (fTyp == "SELECT-ONE" || fTyp == "SELECT-MULTIPLE") && fVal =="") {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목은 ";
				alert(fMsg + "필수 입력 사항입니다.");
				//fObj.elements[ss[j]].style.backgroundColor = "#cccccc";
				fObj.focus(); return false;
			}
			if (fMsg != null && (fTyp == "RADIO" || fTyp == "CHECKBOX") && checkChecked(fObj) == false) {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목은 ";
				alert(fMsg + "필수 입력 사항입니다.");
				//fObj.elements[ss[j]].style.backgroundColor = "#cccccc";
				fObj.focus(); return false;
			}
			if (fNum != null && isNaN(fVal)) {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목은 ";
				alert(fMsg + "숫자로만 입력해 주세요");
				fObj.focus(); return false;
			}
			if (fMax != null && fMax < getLen(fVal)) {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				alert(fMsg + "에 입력된 글자수가 "+fMax+"자보다 작아야합니다.\n(영문 "+fMax+"자, 한글 "+Math.floor(fMax/2)+"자 까지 가능합니다.)");
				fObj.focus(); return false;
			}
			if (fMin != null && fMin > getLen(fVal)) {
				fNnm = validLabelName(fObj.id);
				fMsg = fNnm=="" ? fMsg : fNnm;
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목에 ";
				alert(fMsg + "입력된 글자수가 "+fMin+"자보다 커야합니다.");
				fObj.focus(); return false;
			}
			if (fMxN != null && parseInt(fMxN) < parseInt(fVal)) {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목에 ";
				alert(fMsg + "입력된 숫자는 "+fMxN+"보다 작아야합니다.");
				fObj.focus(); return false;
			}
			if (fMnN != null && parseInt(fMnN) > parseInt(fVal)) {
				fNnm = validLabelName(fObj.id);
				fMsg = getNm(fMsg,fTit,fNnm);
				fMsg = fMsg==null || fMsg=="" ? "" : "[" + fMsg + "] 항목에 ";
				alert(fMsg + "입력된 숫자는 "+fMnN+"보다 커야합니다.");
				fObj.focus(); return false;
			}
			if (fMal != null && checkEmail(fVal) == false && fVal != "") {
				alert("이메일 주소가 올바르지 않습니다");
				fObj.focus(); return false;
			}
		}
		return true;
	}

	function getNm(fMsg, fTit, fNnm){
		// title 속성이 있으면 title 속성이 우선 다음은 Label 태그에서 찾는다. 그것도 없으면 해당 속성(requied)의 Value값을 사용
		var rtStr ="";
		if (fTit!=""){ return fTit;}
		if (fNnm!=""){ return fNnm;}
		return fMsg;
	}

	// 폼에 해당하는 컨트롤들의 기본값 쉽게 셋팅해 주기
	function initForm(f)	{
		var nLen;	// form 요소의 갯수
		var ival;	// 각 요소의 default value 값 즉! 초기화하고자 하는값
		var fTyp;	// form 요소의 타입(select, radio, checkbox...)

		for (var i = 0; i < f.elements.length; i++) {
			fTyp = toUpperCase(f.elements[i].type);
			ival = f.elements[i].ival;

			if (ival && fTyp == "SELECT-ONE") {
				nLen = f.elements[i].options.length;
				for (var j = 0; j < nLen; j++) {
					if (f.elements[i].options[j].value == ival)
						f.elements[i].options[j].selected = true;
				}
			}
			if (fTyp == "SELECT-MULTIPLE") {
				nLen = f.elements[i].options.length;
				for (var j = 0; j < nLen; j++) {
					if (f.elements[i].options[j].value == f.elements[i].options[j].ival)
						f.elements[i].options[j].selected = true;
				}
			}
			if (ival && (fTyp == "RADIO" || fTyp == "CHECKBOX")) {
				if (f.elements[i].value == ival)
					f.elements[i].checked = true;
			}
		}
		return true;
	}
	// 배열 요소일 경우 checked 된것이 있는지 확인
	function checkChecked(obj) {
		var objnm = obj.name;
		var oElem = eval("document.all."+objnm);
		var oElem = eval(fname+"."+objnm);
		var ret = false;

		if (typeof(oElem.length) == "undefined") {
			if (oElem.checked) {
				ret = true;
			}
		} else {
			for (var i=0;i<oElem.length;i++) {
				if (oElem[i].checked) {
					ret = true;
				}
			}
		}
		return ret;
	}
	// 이메일 유효성 체크
	function checkEmail(str){
	    var reg = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
	    if (str.search(reg) != -1) {
			return true;
		}
		return false;
	}
	// 문자 길이 반환 (영문 1byte, 한글 2byte 계산)
	function getLen(str) {
		var len;
	    var temp;

	    len = str.length;
	    var tot_cnt = 0;

	    for(k=0;k < len;k++){
	    	temp = str.charAt(k);
	    	if(escape(temp).length > 4)
	    		tot_cnt += 2;
	    	else
	    		tot_cnt++;
	    }
	    return tot_cnt;
	}
	// 대문자 변환 ex) toUpperCase(문자)
	function toUpperCase(str) {
		var ret;
		str != null ? ret = str.toUpperCase() : ret = "";
		return ret;
	}



	// LABEL 태그에서 해당 ID에대한 이름을 return 함
	function validLabelName(str){
		var tagArray = document.getElementsByTagName("LABEL");
		var objName = "";
		var flag = false;
		for(i=0;i<tagArray.length;i++){
			var obj = tagArray[i];
			if (obj.htmlFor && flag==false && obj.htmlFor==str)
			{
				objName = obj.innerText;
				flag = true;
				return objName;
			}
		}
		return "";
	}