if (REQUIRE_ONCE == null)
{
    // 한번만 실행되게
    var REQUIRE_ONCE = true;

    var wrestMsg = "";
    var wrestFld = null;
    var wrestFldDefaultColor = "f5ffff";
    var wrestFldBackColor = "ffe4e1";
    var arrAttr  = new Array ("required", "trim", "minlength", "email", "nospace");

    // subject 속성값을 얻어 return, 없으면 tag의 name을 넘김
    function wrestItemname(fld)
    {
        var itemname = fld.getAttribute("itemname");
        if (itemname != null && itemname != "")
            return itemname;
        else
            return fld.name;
    }

    // 양쪽 공백 없애기
    function wrestTrim(fld) 
    {
        var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
        fld.value = fld.value.replace(pattern, "");
        return fld.value;
    }

    // 필수 입력 검사
    function wrestRequired(fld)
    {
        if (wrestTrim(fld) == "") {
            if (wrestFld == null) {
								if(fld.type == "select-one")
//                	wrestMsg = wrestItemname(fld) + "을(를) 선택해주세요.\n";
					wrestMsg = wrestItemname(fld) + "を選択してください。\n";

								else
//                	wrestMsg = wrestItemname(fld) + "는(은) 필수 입력사항입니다.\n";
                	wrestMsg = wrestItemname(fld) + "は必須入力項目です。\n";

				wrestFld = fld;
            }
        }
    }

    // 최소 길이 검사
    function wrestMinlength(fld)
    {
        var len = fld.getAttribute("minlength");
        if (fld.value.length < len) {
            if (wrestFld == null) {
//                wrestMsg = wrestItemname(fld) + "는(은) 최소 " + len + "자 이상 입력하세요.\n";
				wrestMsg = wrestItemname(fld) + "が取り消し " + len + "字以上入力してください.\n";

                wrestFld = fld;
            }
        }
    }

    // 전자메일주소 형식 검사
    function wrestEmail(fld) 
    {
        if (!wrestTrim(fld)) return;

        //var pattern = /(\S+)@(\S+)\.(\S+)/; 전자메일주소에 한글 사용시
        var pattern = /([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/;
        if (!pattern.test(fld.value)) {
            if (wrestFld == null) {
//                wrestMsg = wrestItemname(fld) + "는(은) 전자메일주소 형식이 아닙니다.\n";
				wrestMsg = wrestItemname(fld) + "は電子メールの形式ではありません。\n";

                wrestFld = fld;
            }
        }
    }

    // 공백 검사후 공백을 "" 로 변환
    function wrestNospace(fld)
    {
        var pattern = /(\s)/g; // \s 공백 문자
        if (pattern.test(fld.value)) {
            if (wrestFld == null) {
//                wrestMsg = wrestItemname(fld) + "는(은) 공백이 없어야 합니다.\n";
				wrestMsg = wrestItemname(fld) + "は空白がなければなりません。\n";


                wrestFld = fld;
            }
        }
    }

    // submit 할 때 속성을 검사한다.
    function wrestSubmit()
    {
        wrestMsg = "";
        wrestFld = null;

        var attr = null;

        // 해당폼에 대한 요소의 갯수만큼 돌려라
        for (var i = 0; i < this.elements.length; i++) {
            // Input tag 의 type 이 text, file, password 일때만
            if (this.elements[i].type == "text" || 
                this.elements[i].type == "file" || 
                this.elements[i].type == "password" ||
				this.elements[i].type == "select-one" || 
                this.elements[i].type == "textarea") {
                // 배열의 길이만큼 돌려라
                for (var j = 0; j < arrAttr.length; j++) {
                    // 배열에 정의한 속성과 비교해서 속성이 있거나 값이 있다면
                    if (this.elements[i].getAttribute(arrAttr[j]) != null) {
                        // 기본 색상으로 돌려놓고
//                        this.elements[i].style.backgroundColor = wrestFldDefaultColor;
                        switch (arrAttr[j]) {
                            case "required"  : wrestRequired(this.elements[i]); break;
                            case "trim"      : wrestRequired(this.elements[i]); break;
                            case "minlength" : wrestMinlength(this.elements[i]); break;
                            case "email"     : wrestEmail(this.elements[i]); break;
                            case "nospace"   : wrestNospace(this.elements[i]); break;
                            default : break;
                        }
                    }
                }
            }
        }

        // 필드가 null 이 아니라면 오류메세지 출력후 포커스를 해당 오류 필드로 옮김
        // 오류 필드는 배경색상을 바꾼다.
        if (wrestFld != null) {
            alert(wrestMsg);
//            wrestFld.style.backgroundColor = wrestFldBackColor;
            wrestFld.focus();
            return false;
        }

        if (this.oldsubmit && this.oldsubmit() == false)  {
            return false;
        }

        return true;
    }

    function wrestSubmitChk(obj)
    {
        wrestMsg = "";
        wrestFld = null;

        var attr = null;

        // 해당폼에 대한 요소의 갯수만큼 돌려라
        for (var i = 0; i < obj.elements.length; i++) {
            // Input tag 의 type 이 text, file, password 일때만
            if (obj.elements[i].type == "text" || 
                obj.elements[i].type == "file" || 
                obj.elements[i].type == "password" ||
				obj.elements[i].type == "select-one" || 
                obj.elements[i].type == "textarea") {
                // 배열의 길이만큼 돌려라
                for (var j = 0; j < arrAttr.length; j++) {
                    // 배열에 정의한 속성과 비교해서 속성이 있거나 값이 있다면
                    if (obj.elements[i].getAttribute(arrAttr[j]) != null) {
                        // 기본 색상으로 돌려놓고
//                        obj.elements[i].style.backgroundColor = wrestFldDefaultColor;
                        switch (arrAttr[j]) {
                            case "required"  : wrestRequired(obj.elements[i]); break;
                            case "trim"      : wrestRequired(obj.elements[i]); break;
                            case "minlength" : wrestMinlength(obj.elements[i]); break;
                            case "email"     : wrestEmail(obj.elements[i]); break;
                            case "nospace"   : wrestNospace(obj.elements[i]); break;
                            default : break;
                        }
                    }
                }
            }
        }

        // 필드가 null 이 아니라면 오류메세지 출력후 포커스를 해당 오류 필드로 옮김
        // 오류 필드는 배경색상을 바꾼다.
        if (wrestFld != null) {
            alert(wrestMsg);
//            wrestFld.style.backgroundColor = wrestFldBackColor;
            wrestFld.focus();
            return false;
        }

        if (obj.oldsubmit && obj.oldsubmit() == false)  {
            return false;
        }

        return true;
    }
    // 초기에 onsubmit을 가로채도록 한다.
    function wrestInitialized()
    {
        for (var i = 0; i < document.forms.length; i++) {
            // onsubmit 이벤트가 있다면 저장해 놓는다.
            if (document.forms[i].onsubmit) document.forms[i].oldsubmit = document.forms[i].onsubmit;
            document.forms[i].onsubmit = wrestSubmit;
            for (var j = 0; j < document.forms[i].elements.length; j++) {
                // 필수 입력일 경우는 * 배경이미지를 준다.
                if (document.forms[i].elements[j].getAttribute("required") != null) {
//                    document.forms[i].elements[j].style.backgroundColor = wrestFldDefaultColor;
                    /*
                    document.forms[i].elements[j].className = "wrest_required";
                    document.forms[i].elements[j].style.backgroundPosition = "top right";
                    document.forms[i].elements[j].style.backgroundRepeat = "no-repeat";
                    */
                }
            }
        }
    }


  wrestInitialized();
}