  /**
   * 폼 데이터 유효성을 체크한다.
   *
   * @param	form
   * @return boolean
   */
  function validate(form) {

    var inputs = document.getElementsByTagName("input");
    var textareaArray = document.getElementsByTagName("textarea");
    
    for (var i = 0; i < inputs.length; i++) {
      if(!validateObj(form, inputs[i])) return false;
    }
    for( var j = 0; j < textareaArray.length; j++ ){
      if(!validateObj(form, textareaArray[j])) return false;
    }
    return	true;
  }

  /**
   * 폼 내 특정 오브젝트의 데이터 유효성을 체크한다.
   *
   * @param form
   * @param	obj
   * @return boolean
   */
  function validateObj(form, obj) {
      // 해당 element가 disabled 되었을 경우 항상 true를 리턴함
      if(obj.disabled) return true;

      var caption;
      var dataType;
      var fontType;
      var minValue;
      var maxValue;
      var isValid;
      var value;

      var example = "";
      var msg = "";

      if( obj.type != 'file' ){
        obj.value = trim(obj.value);
      }
      
      caption = obj.getAttribute("caption");
      dataType = obj.getAttribute("dataType");
      fontType = obj.getAttribute("fontType");
      minValue = obj.getAttribute("minValue");
      maxValue = obj.getAttribute("maxValue");
      len = obj.getAttribute("len");
      value = obj.value;

      //   alert(obj.name + ";");
      if (caption == null) {
          caption = obj.name;
      }

      // 필수 입력 항목 체크
      if (obj.getAttribute("notEmpty") != null) {
          isValid = false;

          if (obj.type == "radio" || obj.type == "checkbox") {
              if (document.getElementsByName(obj.name).length) {
                  for (var j = 0; j < document.getElementsByName(obj.name).length; j++) {
                      if (document.getElementsByName(obj.name)[j].checked) {
                          isValid = true;
                          break;
                      }
                  }
              } else {
                  if (obj.checked) {
                      isValid = true;
                  }
              }
          } else {
              if (value != "") {
                  isValid = true;
              }
          }

          if (!isValid) {
              alert(caption + "は必須入力項目でございます。入力してください。");
              obj.focus();
              selectTextField(obj);
              if (window.event) {
                  window.event.returnValue = false;
              }
              return	false;
          }
      }

      // 데이터 길이 체크
      if (len != null && value != "") {
          if (value.length != eval(len)) {
              alert(caption + "は" + len + "桁を入力しなけらばいけません。");
              obj.focus();
              selectTextField(obj);
                if (window.event) {
                    window.event.returnValue = false;
                }
              return	false;
          }
      }

      if (obj.type == "text" || obj.type == "password") {
          // 데이터 타입 체크
          if ((value != "") && (dataType != null)) {
              isValid = true;
              checkValue = false;

              if (dataType == "date") {
                  value = deleteDateFormatStr(value);
                  isValid = isDate(value);
                  checkValue = true;
              } else if (dataType == "month") {
                  value = deleteMonthFormatStr(value);
                  isValid = isDate(value + "01");
                  checkValue = true;
              } else if (dataType == "email") {
                  isValid = isEmail(value);
              } else if (dataType == "float") {
                  value = deleteCommaStr(value);
                  isValid = isFloat(value);
                  checkValue = true;
              } else if (dataType == "integer") {
                  value = deleteCommaStr(value);
                  isValid = isInteger(value);
                  checkValue = true;
              } else if (dataType == "number") {
                  value = deleteCommaStr(value);
                  isValid = isNumber(value);
                  checkValue = true;
              } else if (dataType == "phone") {
                  isValid = isValidPhone(value);
                  example = "\n例) 02-929-8272";
              } else if (dataType == "phone3") {	//-가 없는 형태 체크
                  value = deleteHyphen(value);
                  isValid = isValidPhone3(value);
                  example = "\n例) 029298272";
              } else if (dataType == "phone1") {
                  isValid = isValidPhone1(value); //지역번호만 체크
                  example = "\n例) 02";
              } else if (dataType == "pcs") {
                  isValid = isValidPcs(value); //휴대폰 번호 체크
                  example = "\n例) 011"; 
              } else if (dataType == "pcs3") {
                  value = deleteHyphen(value);                    
                  isValid = isValidPcs3(value); //휴대폰 번호 체크
                  example = "\n例) 01199275956";                   
              } else if (dataType == "pcs1") {
                  isValid = isValidPcs1(value); //휴대폰 이통사 번호만 체크
                  example = "\n例) 011";
              } else if (dataType == "jumin") {
                  value = deleteHyphen(value);
                  isValid = isValidJumin(value);
                  example = "";
              } else if (dataType == "office") {
                  value = deleteHyphen(value);
                  isValid = isValidOfficeNum(value);
                  example = "";
              } else if (dataType == "juffice") {
                  value = deleteHyphen(value);
                  isValid = isValidJuffice(value);
                  example = "";
              } else if ( dataType == "zip") {
                  value = deleteHyphen(value);
                  isValid = isValidZip(value);
                  example = "\n例) 100100";
              } else if ( dataType == "24hr") {
                  value = deleteSemicolon(value);
                  isValid = isValid24hr(value);
                  example = "\n例) 1300";
              }
              
              if (!isValid) {
                  alert(caption + "が正しくありません。." + example);
                  /*
                  if (dataType == "float" || dataType == "integer" || dataType == "number") {
                      obj.value = "0";
                  }
                  */
                  obj.focus();
                  obj.select();
                  selectTextField(obj);
                  if (window.event) {
                      window.event.returnValue = false;
                  }
                  return	false;
              }
              if (checkValue) {
                  if (minValue != null) {
                      if (eval(minValue) > eval(value)) {
                          alert(caption + "　値が最初値(" + minValue + ")の未満です。");
                          obj.focus();
                          selectTextField(obj);
                          if (window.event) {
                              window.event.returnValue = false;
                          }
                          return	false;
                      }
                  }
                  if (isValid && (maxValue != null)) {
                      if (eval(maxValue) < eval(value)) {
                          alert(caption + " 値が最大値(" + maxValue + ")を超過します。");
                          obj.focus();
                          selectTextField(obj);
                          if (window.event) {
                              window.event.returnValue = false;
                          }
                          return	false;
                      }
                  }
              }
          }
          // 일본어 글자크기 체크
          if ((value != "") && (fontType != null)) {
              isValid = true;

              if (fontType == "halfAlpha") {
                  isValid = isHalfAlphabet(value);
                  msg = "は半角の英字しか入力できません。";
              }else if(fontType == "halfNum") {
            	  isValid = isHalfNumber(value);
                  msg = "は半角の数字しか入力できません。";
              }else if(fontType == "halfAlphaNum"){
            	  isValid = isHalfAlphabetNumber(value);
            	  msg = "は半角の英数字しか入力できません。";
              }else if(fontType == "halfMark"){
            	  isValid = isHalfKigo(value);
            	  msg = "は半角の記号しか入力できません。";
              }else if(fontType == "halfKana"){
            	  isValid = isHalfKana(value);
            	  msg = "は半角のカタカナしか入力できません。";
              }else if(fontType == "allHalf"){
            	  isValid = isHalf(value);
            	  msg = "は半角しか入力できません。";
              }else if(fontType == "allFull"){
            	  isValid = isFull(value);
            	  msg = "は全角しか入力できません。";
              }else if(fontType == "halfUppercase"){
            	  isValid = isHalfUpperCase(value);
            	  msg = "は半角の大文字しか入力できません。";
              }else if(fontType == "halfLowerCase"){
            	  isValid = isHalfLowerCase(value);
            	  msg = "は半角の小文字しか入力できません。";
              }
              
              if (!isValid) {
                  alert(caption + msg);
                  obj.focus();
                  selectTextField(obj);
                  if (window.event) {
                      window.event.returnValue = false;
                  }
                  return	false;
              }
          }
      }
      return	true;
  }

  /**
   * Form element object중 <input type="text" || "password" > 일 경우 select를 수행한다.
   *
   * @param obj
   * @retrun
   */
  function selectTextField(obj){
      if(obj.tagName == "INPUT" && (obj.type == "text" || obj.type == "password")){
          obj.select();
      }
  }
  
  /**
   * trim
   *
   * @param	text
   * @return	string
   */
  function trim(text) {
      if (text == "" || text==null) {
          return	text;
      }

      var len = text.length;
      var st = 0;

      while ((st < len) && (text.charAt(st) <= ' ')) {
          st++;
      }

      while ((st < len) && (text.charAt(len - 1) <= ' ')) {
          len--;
      }

      return	((st > 0) || (len < text.length)) ? text.substring(st, len) : text;
  }

      /**
     * 날짜에서 "/"를 없앤다.
     *
     * @param	str
     */
    function deleteDateFormatStr(str) {
        var temp = '';

        for (var i = 0; i < str.length; i++) {
            if (str.charAt(i) == '/' || str.charAt(i) == '-') {
                continue;
            } else {
                temp += str.charAt(i);
            }
        }

        return	temp;
    }

    /**
     * 월분에 "/"를 붙인다.
     *
     * @param	obj
     */
    function addMonthFormat(obj) {
        var value = trim(obj.value);

        if (value == "") {
            return;
        }

        value = deleteMonthFormatStr(value);

        if ( !isNumber(value) || value.length != 6 || !isValidMonth(value.substring(4, 6))) {
            caption = obj.getAttribute("caption");

            if (caption == null) {
                caption = "";
            }

            alert(caption + " 形式が正しくない。あるいは正しい月ではありません。\n(例, 200201 )");
            obj.focus();

            return;
        }

        obj.value = addMonthFormatStr(value);
    }

    /**
     * 월분에 "/"를 붙인다.
     */
    function addMonthFormat2() {
        var obj = window.event.srcElement;
        addMonthFormat(obj);
    }

    /**
     * 날짜에 "/"를 붙인다.
     *
     * @param	str
     */
    function addMonthFormatStr(str) {
        return	str.substring(0, 4) + "-" + str.substring(4, 6);
    }

    /**
     * 날짜에서 "/"를 없앤다.
     *
     * @param	obj
     */
    function deleteMonthFormat(obj) {
        obj.value = deleteMonthFormatStr(obj.value);
    }

    /**
     * 날짜에서 "/"를 없앤다.
     */
    function deleteMonthFormat2() {
        var obj = window.event.srcElement;
        deleteMonthFormat(obj);
        obj.select();
    }

    /**
     * 날짜에서 "/"를 없앤다.
     *
     * @param	str
     */
    function deleteMonthFormatStr(str) {
        var temp = '';

        for (var i = 0; i < str.length; i++) {
            if (str.charAt(i) == '-') {
                continue;
            } else {
                temp += str.charAt(i);
            }
        }

        return	temp;
    }


	/*************************************************************************
	/**
     * 전화번호에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addPhoneFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidPhone3(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 形式が正しくない電話番号です。 例)029291661");
            obj.focus();

        }else{
            setPhoneHyphen(obj);
        }
    }
    
    /**
     *  전화번호에  '-'넣기
     */
     function setPhoneHyphen(obj) {
        var str = deleteHyphen(obj.value);

        if(str.substring(0, 2) == '02') {	// 02-9999-1212
            if(str.length == 10) {
	            str = str.substring(0, 2) + "-" + str.substring(2,6)+ "-" + str.substring(6);
	        }else if(str.length == 9) {
	            str = str.substring(0, 2) + "-" + str.substring(2,5)+ "-" + str.substring(5);
			}
        }else{ // 번호 3-2-5
            if(str.length == 11) {
	            str = str.substring(0, 3) + "-" + str.substring(3,7)+ "-" + str.substring(7);
	        }else if(str.length == 10) {
	            str = str.substring(0, 3) + "-" + str.substring(3,6)+ "-" + str.substring(6);
			}
        }

         obj.value = str;
     }

	/**
     * 전화번호에 "-"를 붙인다.
     */
    function addPhoneFormat2() {
        var obj = window.event.srcElement;
        addPhoneFormat(obj);	//add
    }

    /**
     * 전화번호에 "-"를 없앤다.
     */
    function deletePhoneFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteHyphen(obj.value);
        obj.select();
    }
    
    
/**
     * pcs에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addPcsFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidPcs3(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 形式が正しくない形態電話番号です。 例)01129291661");
            obj.focus();

        }else{
            setPcsHyphen(obj);
        }
    }
    
    /**
     *  pcs에 '-'넣기
     */
     function setPcsHyphen(obj) {
        var str = deleteHyphen(obj.value);

            if(str.length == 11) {
	            str = str.substring(0, 3) + "-" + str.substring(3,7)+ "-" + str.substring(7);
	        }else if(str.length == 10) {
	            str = str.substring(0, 3) + "-" + str.substring(3,6)+ "-" + str.substring(6);
			}
         obj.value = str;
     }    
    
    /**
     * pcs에 "-"를 붙인다.
     */
    function addPcsFormat2() {
        var obj = window.event.srcElement;
        addPcsFormat(obj);	//add
    }

    /**
     * pcs에 "-"를 없앤다.
     */
    function deletePcsFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteHyphen(obj.value);
        obj.select();
    }

/*************************************************************************

    /**
     * 주민등록번호에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addJuminFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidJumin(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 형식이 올바르지 않거나, 올바른 주민등록번호가 아닙니다.");
            obj.focus();

        }else{
            setJuminHyphen(obj);
        }
    }

    /**
     * 주민등록번호에 "-"를 붙인다.
     */
    function addJuminFormat2() {
        var obj = window.event.srcElement;
        addJuminFormat(obj);
    }

    /**
     * 주민등록번호에서 "-"를 없앤다.
     */
    function deleteJuminFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteHyphen(obj.value);
        obj.select();
    }


    /**
     * 사업자등록번호에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addOfficeFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidOfficeNum(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 형식이 올바르지 않거나, 올바른 사업자등록번호가 아닙니다.");
            obj.focus();

        }else{
            setJuminHyphen(obj);
        }
    }

    /**
     * 사업자등록번호에 "-"를 붙인다.
     */
    function addOfficeFormat2() {
        var obj = window.event.srcElement;
        addOfficeFormat(obj);
    }

    /**
     * 사업자등록번호에서 "-"를 없앤다.
     */
    function deleteOfficeFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteHyphen(obj.value);
        obj.select();
    }

    /**
     * 24hr시간에 ":"를 붙인다.
     *
     * @param	obj
     */
    function add24hrFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteSemicolon(value);

        if ( !isValid24hr(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 형식이 올바르지 않거나, 올바른 시간(24시간)이 아닙니다.");
            obj.focus();

        }else{
            set24hrSemicolon(obj);
        }
    }

    /**
     * 24hr시간에 ":"를 붙인다.
     */
    function add24hrFormat2() {
        var obj = window.event.srcElement;
        add24hrFormat(obj);
    }

    /**
     * 24hr시간에서 ":"를 없앤다.
     */
    function delete24hrFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteSemicolon(obj.value);
        obj.select();
    }

    /**
     * 사업자번호 혹은 주민등록번호 혹은 법인등록번호에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addJufficeFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidJuffice(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 형식이 올바르지 않거나, 올바른 (주민/사업자/법인)등록번호 (이)가 아닙니다.");
            obj.focus();

        }else{

            setJuminHyphen(obj);
        }
    }

    /**
     * 사업자번호 혹은 주민등록번호에 "-"를 붙인다.
     */
    function addJufficeFormat2() {
        var obj = window.event.srcElement;
        addJufficeFormat(obj);
    }

    /**
     * 사업자번호 혹은 주민등록번호에서 "-"를 없앤다.
     */
    function deleteJufficeFormat2() {
        var obj = window.event.srcElement;


        obj.value = deleteHyphen(obj.value);
        obj.select();
    }

    /**
     * 우편번호에 "-"를 붙인다.
     *
     * @param	obj
     */
    function addZipFormat(obj) {
        var value = trim(obj.value);

        if (value == "") return;

        value = deleteHyphen(value);

        if ( !isValidZip(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) caption = "";

            alert(caption + " 형식이 올바르지 않거나, 올바른 우편번호가 아닙니다.");
            obj.focus();

        }else{
            setZipHyphen(obj);
        }
    }

    /**
     * 우편번호에 "-"를 붙인다.
     */
    function addZipFormat2() {
        var obj = window.event.srcElement;
       addZipFormat(obj);
    }

    /**
     * 우편번호에서 "-"를 없앤다.
     */
    function deleteZipFormat2() {
        var obj = window.event.srcElement;
        obj.value = deleteHyphen(obj.value);
        obj.select();
    }


    /**
     * 자리수 체크 후 자리수 일치하면 다음 객체로 focusing
     *
     * @param chkObj
     * @param dstObj
     * @param intLen
     */
    function passFocus(chkObj, dstObj, intLen){
        var str = chkObj.value;

        if(str.length == intLen) dstObj.focus();
        else return;
    }

    /**
     * 발생된 이벤트의 keycode가 "13" 일 경우 target 객체로 focus를 이동한다.
     * 엔터키 후 포커스 이동
     * @param o_target
     */
    function focus_to_obj(o_target){
        var e = window.event;
        if(!e) return;
        if(e.keyCode != "13" ) return;

        e.returnValue = false;
        o_target.focus();
    }




    /**
     *
     * 특정 form의 element들을 tabIndex 속성값에 따라 정렬하여 전역 Array에 담아 리턴한다..
     *
     * @param objForm
     */
    function sortFormByTabIndex(objForm){
        if(!objForm.elements ) return null;

        var arrTarget = new Array();
        var idx =0;
        for(var i=0; i<objForm.elements.length; i++){
            objForm.elements(i).setAttribute("_idx", i);
            if( objForm.elements(i).type != "hidden" && !objForm.elements(i).readOnly
                && objForm.elements(i).tabIndex != 0 && objForm.elements(i).tagName != "TEXTAREA"
                && objForm.style.display != "none" && !objForm.elements(i).disabled){
                arrTarget[idx] = objForm.elements(i);
                idx++;
            }
        }

        var temp;
        for(var i=0; i<arrTarget.length - 1; i++){
            for(var j=0; j<arrTarget.length -1; j++){
                if(arrTarget[j].tabIndex > arrTarget[j+1].tabIndex){
                    temp = arrTarget[j];
                    arrTarget[j] = arrTarget[j+1]
                    arrTarget[j+1] = temp;
                }
            }
        }
        return arrTarget;
    }

    /**
     * 날짜 체크
     *
     * @param	date
     * @return	boolean
     */
    function isDate(date) {
        if (date == null || date.length != 8) {
            return	false;
        }

        if (!isNumber(date)) {
            return	false;
        }

        var year = eval(date.substring(0, 4));
        var month = eval(date.substring(4, 6));
        var day = eval(date.substring(6, 8));

        if ( month > 12 || month < 1 ) {
            return	false;
        }
        if ( day > 31 || day < 1){
            return	false;
        }

        var totalDays;

        switch (eval(month)){

            case 1 :
                totalDays = 31;
                break;
            case 2 :
                if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
                    totalDays = 29;
                else
                    totalDays = 28;
                break;
            case 3 :
                totalDays = 31;
                break;
            case 4 :
                totalDays = 30;
                break;
            case 5 :
                totalDays = 31;
                break;
            case 6 :
                totalDays = 30;
                break;
            case 7 :
                totalDays = 31;
                break;
            case 8 :
                totalDays = 31;
                break;
            case 9 :
                totalDays = 30;
                break;
            case 10 :
                totalDays = 31;
                break;
            case 11 :
                totalDays = 30;
                break;
            case 12 :
                totalDays = 31;
                break;
        }

        if (day > totalDays) {
            return	false;
        }

        return	true;
    }

    /**
     * 주민등록번호 체크
     *
     * @param obj
     * @return boolean
     */
    function isValidJuminObj(obj) {
        var str = deleteHyphen(obj.value);	// 필드에 있는 주민번호에서 '-'제거

        if( !isValidJumin(str) ) {
            alert(" 유효하지 않은 주민등록번호입니다. ");
            obj.focus();
            if (window.event) {
                window.event.returnValue = false;
            }
            return	false;
        }
        obj.value = str;
        return	true;
    }

    /**
     * 사업자번호 혹은 주민등록번호 혹은 법인등록번호 체크
     *
     * @param obj
     * @return boolean
     */
    function isValidJufficeObj(obj) {
        var str = deleteHyphen(obj.value);	// 필드에 있는 주민번호에서 '-'제거
        if( !isValidJuffice(str)){
            alert("유효하지 않은 번호입니다.");
            if(obj.getAttribute('type') == "text"){
            	obj.focus();
            }
            if (window.event) {
                window.event.returnValue = false;
            }
            return	false;
        }
        obj.value = str;
     
        return	true;
    }

    /**
     * 사업자번호 혹은 주민등록번호 혹은 법인등록번호 체크
     *
     * @param str '-'를 뺀 번호
     * @return boolean
     */
    function isValidJuffice(str) {
        if(isValidJumin(str) || isValidOfficeNum(str) || isValidBubinNum(str)){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 주민등록번호 체크
     *
     * @param	str '-'를 뺀 주민등록번호
     * @return boolean
     */
    function isValidJumin(str) {
        var tmp = 0;
        var sex = str.substring(6, 7);
        var birthday;

        if (str.length != 13) {
            return	false;
        }

        if (sex == 1 || sex == 2) {
            birthday = "19" + str.substring(0, 6);
        } else if (sex == 3  || sex == 4) {
            birthday = "20" + str.substring(0, 6);
        } else {
            return	false;
        }

        if (!isDate(birthday)) {
            return	false;
        }

        for (var i = 0; i < 12 ; i++) {
            tmp = tmp + ((i%8+2) * parseInt(str.substring(i,i+1)));
        }

        tmp = 11 - (tmp %11);
        tmp = tmp % 10;

        if (tmp != str.substring(12, 13)) {
            return	false;
        }

        return	true;
    }

    /**
     *  사업자번호 체크.
     *
     * @param  tempStr '-'를 뺀 사업자 번호
     * @return boolean
     */
    function isValidOfficeNum(tmpStr)
    {
        tmpSum			= new Number(0);
        tmpMod			= new Number(0);
        resValue		= new Number(0);
        var intOffNo 	= new Array(0,0,0,0,0,0,0,0,0,0);
        var strChkNum 	= new Array(1,3,7,1,3,7,1,3,5);

        for(var i = 0 ; i < 10 ; i ++){
            intOffNo[i] = new Number(tmpStr.substring(i, i+1));
        }

        for(var i = 0 ; i < 9 ; i ++){
            tmpSum = tmpSum + (intOffNo[i]*strChkNum[i]);
        }

        tmpSum = tmpSum + ((intOffNo[8]*5)/10);

        tmpMod = parseInt(tmpSum%10, 10);

        if(tmpMod == 0){
            resValue = 0;
        }
        else{
            resValue = 10 - tmpMod;
        }

        if(resValue == intOffNo[9]){
            return true;

        }
        else{
            return false;
        }
    }
    
    /**
     *  법인등록번호 유효성 체크.
     *
     * @param  tempStr '-'를 뺀 법인등록 번호
     * @return boolean
     */
    function isValidBubinNum(tmpStr)
    {
        var format = /^(\d{6})(-{0,1})(\d{7})$/;
        if(isValidFormat(tmpStr, format)){

            var n_chk = 0;
        
        	var n1  = tmpStr.substring(0,1);
        	var n2  = tmpStr.substring(1,2);
        	var n3  = tmpStr.substring(2,3);
        	var n4  = tmpStr.substring(3,4);
        	var n5  = tmpStr.substring(4,5);
        	var n6  = tmpStr.substring(5,6);
        	var n7  = tmpStr.substring(6,7);
        	var n8  = tmpStr.substring(7,8);
        	var n9  = tmpStr.substring(8,9);
        	var n10 = tmpStr.substring(9,10);
        	var n11 = tmpStr.substring(10,11);
        	var n12 = tmpStr.substring(11,12);
        	var n13 = tmpStr.substring(12,13);
            
        	n_chk += n1 * 1;
        	n_chk += n2 * 2;
        	n_chk += n3 * 1;
        	n_chk += n4 * 2;
        	n_chk += n5 * 1;
        	n_chk += n6 * 2;
        	n_chk += n7 * 1;
        	n_chk += n8 * 2;
        	n_chk += n9 * 1;
        	n_chk += n10 * 2;
        	n_chk += n11 * 1;
        	n_chk += n12 * 2;
        	n_chk = n_chk % 10;
        	n_chk = 10 - n_chk;
        	
        	if(n_chk > 9 ){n_chk = 10 - n_chk;}      	
        	n_chk = Math.abs(n_chk);
        	if(n_chk == n13){
        		return true;
        	}else{
        		return false;
        	}
        	
        
        }else{
        	return false;
        }
    }

    /**
     * 유효한 우편번호인지 체크
     * @param str '-'을 뺀 우편번호
     * @return boolean
     */
    function isValidZip(str){
        re = /^(\d{6})$/;
        if (re.test(str)) {
            return	true;
        }
        return	false;
    }

    /**
     * 유효한 24hr 시간임을 체크
     * @param str ':'을 뺀 24hr - 예)0100
     * @return boolean
     */
    function isValid24hr(str){
        re = /^(\d{4})$/;
        return (isValidFormat(str,re) && isValidHour(str.substring(0,2)) && isValidMin(2,4));
    }

    /**
     * 오직 숫자로만 이루어져 있는지 체크
     *
     * @param	num 임의의 문자열
     * @return boolean
     */
    function isNumber(num) {
        re = /^[0-9]*[0-9]$/;

        if (re.test(num)) {
            return	true;
        }

        return	false;
    }

    /**
     * 정수 체크
     *
     * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
     * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
     * 3. 마지막은 숫자로 끝나야 한다 : [0-9]$
     *
     * @param	num 임의의 문자열
     * @return	boolean
     */
    function isInteger(num) {
        re = /^[\+-]?[0-9]*[0-9]$/;

        if (re.test(num)) {
            return	true;
        }

        return	false;
    }

    /**
     * 부동소수 체크
     *
     * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
     * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
     * 3. 소수점을 넣을 수 있다 : [.]?
     * 4. 소수점 이하 자리에 0에서 9까지 숫자가 올 수 있다 : [0-9]*
     * 5. 마지막은 숫자로 끝나야 한다 : [0-9]$
     *
     * @param	num 임의의 문자열
     * @return	boolean
     */
    function isFloat(num) {
        re = /^[\+-]?[0-9]*[.]?[0-9]*[0-9]$/;

        if (re.test(num)) {
            return	true;
        }

        return	false;
    }

    /**
     * 이메일 체크
     * 2009.09.23 
     * @param	email
     * @return	boolean
     *
     * Deprecated at 2003/10/27
     */
    function isEmail2(email) {

        re = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z]+/;

        if (re.test(email)) {
            return	true;
        } else {
          alert("正しいメールアドレスではありません。");
          return	false;
        }
    }

    /**
     * 이메일 체크
     *
     * @param strEmail 임의의 문자열
     * @return  boolean
     */
    function isEmail (strEmail) {
        var checkTLD = 1;
        var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
        var emailPat = /^(.+)@(.+)$/;
        var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
        var validChars = "\[^\\s" + specialChars + "\]";
        var quotedUser = "(\"[^\"]*\")";
        var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
        var atom = validChars + '+';
        var word = "(" + atom + "|" + quotedUser + ")";
        var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
        var matchArray = strEmail.match(emailPat);

        if ( matchArray == null ) {
          alert("適当なメールアドレスではありません。(チェック @ and .'s)");
          return false;
        }
        var user = matchArray[1];
        var domain = matchArray[2];
        for ( i = 0; i < user.length; i++ ) {
          if ( user.charCodeAt(i) > 127 ) {
            alert("誤ったメールアドレスを入力しました。");
            return false;
           }
        }
        for ( i = 0; i < domain.length; i++) {
          if ( domain.charCodeAt(i) > 127 ) {
             alert("ドメインの名前が間違いました。");
            return false;
           }
        }

        if ( user.match(userPat) == null ) {
    		  alert("メールアドレスではありません。");
            return false;
        }
        var IPArray = domain.match(ipDomainPat);
        if ( IPArray != null ) {

        for ( var i = 1; i <= 4; i++) {
    	      if (IPArray[i]>255) {
    	      alert("IPが間違いました。");
    	      return false;
          }
        }
        return true;
        }

        var atomPat = new RegExp("^" + atom + "$");
        var domArr = domain.split(".");
        var len = domArr.length;
        for ( i = 0; i < len; i++ ) {
    	      if ( domArr[i].search(atomPat) == -1 ) {
    	         alert("ドメインが存在しません。");
    	         return false;
    	      }
        }

        if ( checkTLD && domArr[domArr.length-1].length!=2 &&
          domArr[domArr.length-1].search(knownDomsPat)==-1) {
          alert("知られた形式で終りが出なければなりません。");
          return false;
        }

        if ( len < 2 ) {
          alert("Hostnameが誤りました。");
          return false;
        }
        return true;
    }

    //특수문자 체크
    function isSpecialChar(id) {
    	  var re = /[ ~!@\#$%?^&*\()\-=+_;<>\']/gi;
    	  id = "#"+id;
    	  if( re.test( $(id).val() ) ) {
    	    alert("特殊文字は入力ができません。");
    	    $(id).val("");
    	    $(id).focus();
    	    return true;
    	  } else {
    	    return false;
    	  }
    }

  /**
     * 한글로만 이루어져 있는지 체크 한다.
     *
     * @param	han
     * @return	boolean
     */
  function isHangul(han) {
        var inText = han.value;
        var ret;

        ret = inText.charCodeAt();
        if (ret > 31 && ret < 127) {
            //alert("한글만 입력 가능합니다.");
            han.value = "";
            han.focus();
            return false;
        }
        return true;
    }
  /**
   * 빈문자열 검증
   * @param inputStr
   * @return boolean
   */
function isEmpty(inputStr){ 
	if ( null == inputStr || "" == inputStr ) { 
		return true;
	} 
	return false; 
}

    /**
     * 영문자 검증
     * @param str
     * @return boolean
     */
    function isAlpha(obj){
        var str = obj.value;
        if(isEmpty(str)) return false;

        for(var idx=0;idx < str.length;idx++){
            if(!((str.charAt(idx) >='a' && str <= 'z') || (str.charAt(idx) >= 'A' && str <= 'Z'))){
                return false;
            }
        }
        return true;
    }

    /**
     * 숫자에 comma를 붙인다.
     *
     * @param	obj
     */
    function addComma(obj) {
        var value = trim(obj.value);

        if (value == "") {
            return;
        }
        value = deleteCommaStr(value);

        if (!isFloat(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) {
                caption = "";
            }
	
            alert(caption + " 형식이 올바르지 않습니다.");
            //obj.value = "0";
            //obj.focus();
            obj.select();
            if (window.event) {
                window.event.returnValue = false;
            }
            return;
        }

        obj.value = addCommaStr(value);
    }

    /**
     * 숫자에 comma를 붙인다.
     */
    function addComma2() {
        var obj = window.event.srcElement;
        addComma(obj);
    }

    /**
     * 숫자에 comma를 붙인다.
     *
     * @param	str
     */
    function addCommaStr(str) {
        var num = "";
        var sign = "";

        if (str.charAt(0) == "+" || str.charAt(0) == "-") {
            sign = str.charAt(0);
            str = str.substr(1);
        }

        var index = str.indexOf('.');

        if (index != -1) {
            num = str.substr(index);
        } else {
            index = str.length;
        }

        for (var i = index - 3; i > 0; ) {
            num = ',' + str.substr(i, 3) + num;
            index = i;
            i -= 3;
        }

        num = sign + str.substr(0, index) + num;

        return	num;
    }

    /**
     * 숫자에서 comma를 없앤다.
     *
     * @param	obj
     */
    function deleteComma(obj) {
        obj.value = deleteCommaStr(obj.value);
    }

    /**
     * 숫자에서 comma를 없앤다.
     */
    function deleteComma2() {
        var obj = window.event.srcElement;
        deleteComma(obj);
        obj.select();
    }

    /**
     * 숫자에서 comma를 없앤다.
     *
     * @param	str
     */
    function deleteCommaStr(str) {
        var temp = '';

        for (var i = 0; i < str.length; i++) {
            if (str.charAt(i) == ',') {
                continue;
            } else {
                temp += str.charAt(i);
            }
        }

        return	temp;
    }

    /**
     * 날짜에 "/"를 붙인다.
     *
     * @param	obj
     */
    function addDateFormat(obj) {
        var value = trim(obj.value);

        if (value == "") {
            return;
        }

        value = deleteDateFormatStr(value);

        if (!isDate(value)) {
            caption = obj.getAttribute("caption");

            if (caption == null) {
                caption = "";
            }

            alert(caption + " 형식이 올바르지 않거나, 올바른 날짜가 아닙니다.\n( 예, 20020101 )");
            obj.focus();

            return;
        }

        obj.value = addDateFormatStr(value);
    }


    /**
     * 날짜에 "/"를 붙인다.
     */
    function addDateFormat2() {
        var obj = window.event.srcElement;
        addDateFormat(obj);
    }

    /**
     * 날짜에 "/"를 붙인다.
     *
     * @param	str
     */
    function addDateFormatStr(str) {
        return	str.substring(0, 4) + "/" + str.substring(4, 6) + "/" + str.substring(6, 8);
    }

    /**
     * 날짜에서 "/"를 없앤다.
     *
     * @param	obj
     */
    function deleteDateFormat(obj) {
        obj.value = deleteDateFormatStr(obj.value);
    }

    /**
     * 날짜에서 "/"를 없앤다.
     */
    function deleteDateFormat2() {
        var obj = window.event.srcElement;
        deleteDateFormat(obj);
        obj.select();
    }
    


    




    /**
     * 이메일 체크
     *
     * @param	email
     * @return	boolean
     *
     * Deprecated at 2003/10/27
     */
     /*
    function isEmail(email) {

        re = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z]+/;

        if (re.test(email)) {
            return	true;
        }

        return	false;
    }
    */



    /**
      * 숫자만 입력
      *
      */
    function checkDouble(){
      var key = event.keyCode;
      if(!(key==8||key==9||key==13||key==37||key==39||key==46||key==144||(key>=48&&key<=57)||(key>=96&&key<=105)||key==110||key==190)){
      event.returnValue = false;
      }
    }
    /**
      * 문자 바이트 체크
      *
      */
    function char_length(obj, iSize, sId) {
      var tmpStr;
      var temp=0;
      var onechar;
      var tcount;
      tcount = 0;
      aquery = obj.value;
      tmpStr = new String(aquery);
      temp = tmpStr.length;
      
      for (k=0;k<temp;k++)
      {
        onechar = tmpStr.charAt(k);
        if (escape(onechar) =='%0D') { } else if (escape(onechar).length > 4) { tcount += 2; } else { tcount++; }
      }
      
      document.getElementById(sId).innerHTML = tcount;
      
      if(tcount>iSize) {
        reserve = tcount-iSize;
        alert(iSize+"Btye以上は入力できません。");
        cutText(obj, iSize, sId);
        return;
      }
    }
    function cutText(obj, iSize, sId)
    {
      var tmpStr;
      var temp=0;
      var onechar;
      var tcount;
      tcount = 0;
      aquery = obj.value;
      tmpStr = new String(aquery);
      temp = tmpStr.length;
      
      for(k=0;k<temp;k++)
      {
        onechar = tmpStr.charAt(k);
        
        if(escape(onechar).length > 4) {
          tcount += 2;
        } else {
          // 엔터값이 들어왔을때 값(\r\n)이 두번실행되는데 첫번째 값(\n)이 들어왔을때 tcount를 증가시키지 않는다.
          if(escape(onechar)=='%0A') {
          } else {
            tcount++;
          }
        }
      
        if(tcount>iSize) {
          tmpStr = tmpStr.substring(0,k);
          break;
        }
      }
      obj.value = tmpStr;
      char_length(obj, iSize, sId);
    }
    
    /**
     * 문자에서 Hyphen을 없앤다.
     *
     * @param str
     */
    function deleteHyphen(str) {

        var temp = '';
        if(str == "") return temp;
        for (var i = 0; i < str.length; i++) {
            if (str.charAt(i) == '-') {
                continue;
            } else {
                temp += str.charAt(i);
            }
        }
        return temp;
    }

    /**
     * 입력값이 사용자가 정의한 포맷 형식인지 체크
     * 자세한 format 형식은 자바스크립트의 'regular expression'을 참조
     */
    function isValidFormat(inputStr,re) {
         //alert ('re:'+re);
         if (re.test(inputStr)) {
              //alert ('true:');
              return true; //올바른 포맷 형식
         }
         //alert ('false:');
         return false;
    }
    
    
   /**
    * 문자열이 전부 반각영어로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfAlphabet(StrSrc) {

   	return /^[a-zA-Z ]+$/.test(StrSrc);
   }

   /**
    * 문자열이 전부 반각영자로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfNumber(StrSrc) {
   	var ObjReg = /[^0-9\-]/;

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전부 반각영자 또는 반각숫자로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfAlphabetNumber(StrSrc) {

   	var ObjReg = /[^a-zA-Z0-9\- ]/;

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전체 반각기호로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfKigo(StrSrc) {

   	var StrReg = "[^";
   	StrReg += unescape("%u0021"); /* 0021 = "!" */
   	StrReg += "-\\" + unescape("%u002F"); /* 002F = "/" */
   	StrReg += unescape("%u003A"); /* 003A = ":" */
   	StrReg += "-" + unescape("%u0040"); /* 0040 = "@" */
   	StrReg += "\\" + unescape("%u005B"); /* 005B = "[" */
   	StrReg += "-" + unescape("%u0060"); /* 0060 = "`" */
   	StrReg += unescape("%u007B"); /* 007B = "{" */
   	StrReg += "-" + unescape("%u007E"); /* 007E = "~" */
   	StrReg += " ]";
   	var ObjReg = new RegExp(StrReg);

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전체 반각카타카나로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfKana(StrSrc) {

   	var StrReg = "[^";
   	StrReg += unescape("%uFF61"); /* FF61 = "? */
   	StrReg += "-" + unescape("%uFF9F"); /* FF9F = "? */
   	StrReg += " ]";
   	var ObjReg = new RegExp(StrReg);

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 모두 반각문자로 구성되어있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalf(StrSrc) {

   	var StrReg = "[^";
   	StrReg += unescape("%u0001"); /* 0001 = */
   	StrReg += "-" + unescape("%u007E"); /* 007E = "~" */
   	StrReg += unescape("%uFF61"); /* FF61 = "? */
   	StrReg += "-" + unescape("%uFF9F"); /* FF9F = "? */
   	StrReg += " ]";
   	var ObjReg = new RegExp(StrReg);

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전부 전각문자로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isFull(StrSrc) {

   	var StrReg = "[";
   	StrReg += unescape("%u0001"); /* 0001 = */
   	StrReg += "-" + unescape("%u007E"); /* 007E = "~" */
   	StrReg += unescape("%uFF61"); /* FF61 = "? */
   	StrReg += "-" + unescape("%uFF9F"); /* FF9F = "? */
   	StrReg += " ]";
   	var ObjReg = new RegExp(StrReg);

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전부 반각대문자로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfUpperCase(StrSrc) {

   	var ObjReg = /[^A-Z ]/;

   	return !ObjReg.test(StrSrc);
   }

   /**
    * 문자열이 전부 반각소문자로 구성되어 있는지 판단한다.
    * 
    * @param StrSrc
    *            입력값
    * @return {boolean}
    */
   function isHalfLowerCase(StrSrc) {

   	var ObjReg = /[^a-z ]/;

   	return !ObjReg.test(StrSrc);
   }
    
