﻿
/*
 * Form Validation Functions, version 1.0.0.0
 *
 * Date : 2009-01-21
 * Copyright 2008-2009 by LH Technology Group. All right reserved.
 *
 * http://www.lh.co.kr/
 *
 *
 * ------------------------------------------------------------------------------------------------------------------
 *
 * 반드시 Prototype.js version 1.6.0 이상이 필요합니다. 
 *
 * [Syntax]
 *   inputCheck(<form name>, <element name>, <ruleset>, <field title>, [min length], [max length]);
 *
 * [Sample Code]
 *   function form_submit() {
 *     if (!inputCheck("form1", "Text1", "required,range,numeric,alpha,alphanum,korean,socialnum,custom", "Text1")) { return false; }
 *     if (!inputCheck("form1", "Sson1", "socialnum", "Sso2")) { return false; }
 *     if (!inputCheck("form1", "Sson1", "socialnum")) { return false; }
 *     form.submit();
 *   }
 *
 * [Ruleset]
 *   required  : 값 입력 여부 체크
 *   range     : 최소, 최대 길이 지정
 *   numeric   : 숫자만 허용
 *   alpha     : 영문만 허용
 *   alphanum  : 영문,숫자만 허용
 *   korean    : 한글만 허용
 *   socialnum : 주민등록번호 검사
 *   custom    : 에러 문자열이 지정된 <field title>로 표현합니다.
 *
 * ------------------------------------------------------------------------------------------------------------------
 */

var allow_ext = "bmp;gif;jpg;jpeg;txt;zip;";
var reject_ext = "asp;aspx;cs;cmd;exe;js;vb;vbs;xml";

function inputCheck(arg0, arg1, arg2, arg3) {
  var form = $(arguments[0]);
  var element = $(arguments[1]);
  var ruleset = arguments[2].split(",");
  var field = arguments[3];

  if (!form) {
    alert("[스크립트오류]\n지정된 Form을 찾을 수 없습니다. \n" + arguments[0]);
    return false;
  }

  if (!element) {
    alert("[스크립트오류]\n지정된 Element를 찾을 수 없습니다. \n" + arguments[0] + "." + arguments[1]);
    return false;
  }

  var checkflag = true;
  var message = "";

  for (var i = 0; i < ruleset.length; i++) {
    switch(ruleset[i].trim()) {
      case "required" :
        if (element.type == "text" || element.type == "textarea" || element.type == "password" || element.type == "file") {
          if (element.value.isBlank()) {
            message = field + "을(를) 입력해 주세요. ";
            checkflag = false;
          } else {
            if (element.type == "file") {
              var allowflag = false;
              if (allow_ext) {
                var exts = allow_ext.split(";");
                for (var i = 0; i < exts.length; i++) {
                  if (element.value.ext() == exts[i]) {
                    allowflag = true;
                  }
                }
                if (!allowflag) {
                  message = field + " 에 등록할 수 없는 형식의 파일입니다. ";
                  checkflag = false;
                } else {
                  if (reject_ext) {
                    var exts = reject_ext.split(";");
                    for (var i = 0; i < exts.length; i++) {
                      if (element.value.ext() == exts[i]) {
                        message = field + " 에 등록할 수 없는 형식의 파일입니다. ";
                        checkflag = false;
                      }
                    }
                  }
                }
              }
            }
          }
        } else if (element.type == "radio" || element.type == "checkbox") {
          var nodes = $(form.name).getInputs(element.type, element.name);
          var count = 0;
          for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].checked) {
              count++;
            }
          }
          if (count < 1) {
            message = field + "을(를) 선택해 주세요. ";
            checkflag = false;
          }
        } else if (element.type.indexOf("select") != -1) {
          if (element.selectedIndex != -1) {
            if (element.options[element.selectedIndex].value == "") {
              message = field + "을(를) 선택해 주세요. ";
              checkflag = false;
            }
          } else {
            message = field + "을(를) 선택해 주세요. ";
            checkflag = false;
          }
        }
        break;
      case "range" :
        var minL = arguments[4] ? arguments[4].num() : null;
        var maxL = arguments[5] ? arguments[5].num() : null;

        if (minL && maxL) {
          if (!element.value.isByteLength(minL,maxL)) {
            if (minL == maxL) {
              message = field + "은(는) " + minL + "자로 입력하셔야 합니다.";
            } else {
              message = field + "은(는) " + minL + "자 이상, " + maxL + "자 이하로 입력하셔야 합니다.";
            }
            checkflag = false;
          }
        } else if (!minL && maxL) {
          if (!element.value.isByteLength("",maxL)) {
            message = field + "은(는) " + maxL + "자 이하로 입력하셔야 합니다.";
            checkflag = false;
          }
        } else if (minL && !maxL) {
          if (!element.value.isByteLength(minL,"")) {
            message = field + "은(는) " + minL + "자 이상으로 입력하셔야 합니다.";
            checkflag = false;
          }
        } else if (!minL && !maxL) {
          alert("[스크립트오류]\n파라미터 입력이 충분하지 않습니다. \n" + arguments[0] + "." + arguments[1]);
          return false;
        }
        break;
      case "numeric" :
        if (!element.value.isBlank() && !element.value.isNum()) {
          message = field + "은(는) 숫자만 입력하세요. ";
          checkflag = false;
        }
        break;
      case "alpha" :
        if (!element.value.isBlank() && !element.value.isEng()) {
          message = field + "은(는) 영어만 입력하세요. ";
          checkflag = false;
        }
        break;
      case "alphanum" :
        if (!element.value.isBlank() && !element.value.isEngNum()) {
          message = field + "은(는) 영어와 숫자만 입력하세요. ";
          checkflag = false;
        }
        break;
      case "alphaandnum" :
        if (!element.value.isBlank() && !element.value.isEngAndNum()) {
          message = field + "은(는) 영문과 숫자를 혼용해서 입력해 주세요. ";
          checkflag = false;
        }
        break;
      case "korean" :
        if (!element.value.isBlank() && !element.value.isKor()) {
          message = field + "은(는) 한글만 입력하세요. ";
          checkflag = false;
        }
        break;
      case "socialnum" :
        var socialnum = arguments[4] ? element.value + $(arguments[4]).value : element.value;
        if (!socialnum.isBlank() && !socialnum.isNum()) {
          message = field + "는 숫자만 입력하세요. ";
          checkflag = false;
        } else if (!socialnum.isBlank() && !socialnum.isJumin()) {
          message = field + "를 바르게 입력하세요. ";
          checkflag = false;
        }
        break;
    }

    if (!checkflag) {
      element.focus();
      if (ruleset.indexOf("custom") != -1) {
        alert(field);
      } else {
        alert(message);
      }
      return false;
    }
  }

  return true;
}
