﻿//-----------------------------------------------------------------------------//
/** 스크립트 설명
<input 에 들어가는 항목들
hname="아이디"                  : 항목의 한글이름(에러메시지를 보여줄때 등) 
option="hangul"                 : 특수한 검사를 수행할 옵션(email, phone, userid, hangul, engonly, jumin, bizno) 
required="true/false"           : 필수항목인지 여부를 나타내는 속성 (true or false, 값이 없을 경우 true로 인식함)
maxbyte="10"                    : maxlength와 달리 한글 2글자는 4바이트로 인식
ValidateType="sequence/allshow" : 속성값을 주지 않으면 sequence
*/
//-----------------------------------------------------------------------------//


//-------------------- 필드 컬러 정의 --------------------------------------------//
var RequiredFieldBackColor = "#EEEEEE";
var ErrorFieldBackColor = "#FFC352";
var ValidateType = "sqeuence"; // sequence / allshow
var ValidateErrorItems = "";
var ValidateErrorFocusItem = null;
var ValidationLanguage = "ko"; // ko / en

//-------------------- 필드 컬러 정의 --------------------------------------------//



//------------- 에러메시지 포멧 정의 --------------------------------------------//
var NO_BLANK        = 1;
var NOT_VALID       = 2;
var TOO_LONG        = 3;
var NOT_PASS_CHECK  = 4;
var NOT_DOMAIN      = 5;
var NOT_USERID      = 6;
var NOT_DATE        = 7;
var NUMERIC_ONLY    = 8;
var KOREAN_INCLUDE  = 9;
var KOREAN_NOT      = 10;
var KOREAN_ONLY     = 11;
var FLOAT_ONLY      = 11;


var NO_BLANK_KO         = "{name+은는} 필수항목입니다.";
var NOT_VALID_KO        = "{name+이가} 올바르지 않습니다.";
var TOO_LONG_KO         = "{name}의 길이가 초과되었습니다.";
var NOT_PASS_CHECK_KO   = "{name+은는} 입력하신 비밀번호와 동일하지 않습니다.";
var NOT_DOMAIN_KO       = "{name+은는} 특수문자를 사용하실 수 없습니다. 도메인이름은 영문자 (a-z),숫자,하이픈(-) 만 사용가능합니다. 단,하이픈(-)은 문자사이에만 사용하실 수 있습니다.";
var NOT_USERID_KO       = "{name+은는} 4자이상 12자 미만이어야 하고,\n 영문,숫자, _ 문자만 사용할 수 있습니다.";
var NOT_DATE_KO         = "{name+은는} 10자리 날짜형식만 사용할 수 있습니다.\n예: 2008-09-01";
var NUMERIC_ONLY_KO     = "{name+은는} 반드시 숫자로만 입력해야 합니다.";
var KOREAN_INCLUDE_KO   = "{name+은는} 반드시 한글을 포함해야 합니다.";
var KOREAN_NOT_KO       = "{name+은는} 한글은 입력하실 수 없습니다.";
var KOREAN_ONLY_KO      = "{name+은는} 반드시 한글로 입력해야 합니다.";
var FLOAT_ONLY_KO       = "{name+은는} 반드시 실수형으로 입력해야 합니다.";

// 2010-01-27 박용진 - 추가
// 영문 유효성 검사시 사용
var NO_BLANK_EN         = "The {name} is not allowed for blank.";
var NOT_VALID_EN        = "The {name} is not valid.";
var TOO_LONG_EN         = "The {name} is too long.";
var NOT_PASS_CHECK_EN   = "The {name} is different from your password";
var NOT_DOMAIN_EN       = "The {name} cannot use special characters.";
var NOT_USERID_EN       = "The {name} must between 4~12 characters and you can use only english, numbers, and _ character.";
var NOT_DATE_EN         = "The {name} use only 10 characters date format.\nEx: 2008-09-01";
var NUMERIC_ONLY_EN     = "The {name} use only numeric.";
var KOREAN_INCLUDE_EN   = "You must include korean in {name}.";
var KOREAN_NOT_EN       = "You cannot include korean in {name}.";
var KOREAN_ONLY_EN      = "You must enter korean for {name}.";
var FLOAT_ONLY_EN       = "You must enter float number for {name}.";


//------------- 특수 패턴 검사 함수 매핑(option 검사) ---------------------------//
var funcs = new Array();
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['userid'] = isValidUserid;
funcs['hangul'] = hasHangul;              //한글입력
funcs['hasHangul_number'] = hasHangul_number;   //한글+숫자입력 [KJS]
funcs['number'] = isNumeric;       //숫자만 입력
funcs['float'] = isFloat;         //실수만 입력
funcs['engonly'] = alphaOnly;       //영문만 입력
funcs['engname'] = alphaName;       //영문이름
funcs['jumin'] = isValidJumin;    //주민번호
funcs['bizno'] = isValidBizNo;    //사업자등록번호
funcs['engaddress'] = notHangul;
funcs['domain'] = isValidDomain;   //영문도메인
funcs['ipaddress'] = isValidIPaddr;   //ip주소
funcs['dnsname'] = isValidDNS;      //ip주소
funcs['domaincheck'] = isValidDomaina;  //도메인형식
funcs['banknumber'] = isValidBank;     //계좌번호형식
funcs['date'] = isDate;          //날짜형식(8자리 숫자만 입력)

// 2009-12-30 박용진, 이강일
funcs['websitecheck'] = isValidWebPage;  //웹사이트 형식

// 2010-01-04 박용진, 천생렬
funcs['websitecheck'] = isValidWebPage;  //통화 단위

//------------- START 패턴 검사 함수들 ---------------------------------------//

function isValidDomaina(el) {

    // 2009-12-30 박용진, 이강일 - 수정
    // 도메인 Depth가 4인 경우도 있어 수정
    var pattern = /^([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})$/;
    //var pattern = /^([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

// 2009-12-30 박용진, 이강일
function isValidWebPage(el) {

    //var pattern = /^([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})$/;
    var pattern = /^([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9]{1,})\.?([a-zA-Z0-9\/._-]{1,})$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

// 2010-01-04 박용진, 천생렬
function isMoney(el) {//반드시 통화 단위 (예: 1,000,000)

    var pattern = /^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1})?$/;
    return (pattern.test(el.value)) ? true : doError(el, NUMERIC_ONLY);
}

function isValidBank(el) {

    var pattern = /^[0-9\-]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

function isValidDNS(el) {

    var pattern = /^([a-zA-Z0-9]{1,50})\.?([a-zA-Z0-9]{1,50})\.?([a-zA-Z0-9]{1,50})$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

function isValidIPaddr(el) {

    var pattern = /^([0-9]{1,3})\.?([0-9]{1,3})\.?([0-9]{1,3})\.?([0-9]{1,3})$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}


function isValidEmail(el) {

    var pattern = /^[_a-zA-Z0-9-\.\-]+@[\.a-zA-Z0-9-\-]+\.[a-zA-Z\-]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

function isValidUserid(el) {     //유저아이디

    var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_\-]{3,11}$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_USERID);
}

function hasHangul(el) {

    var pattern = /^[가-힣]/;
    return (pattern.test(el.value)) ? true : doError(el, KOREAN_INCLUDE);
}

function notHangul(el) {//한글 입력 안됨

    var pattern = /[가-힣]/;
    return (!pattern.test(el.value)) ? true : doError(el, KOREAN_NOT);
}

function hasHangul_number(el) {//한글 과 숫자

    var pattern = /^[0-9가-힣]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}


function alphaOnly(el) {//반드시 영문만

    var pattern = /^[a-zA-Z]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

function alphaName(el) {//영문과 띄어쓰기

    var pattern = /^[a-zA-Z ]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_VALID);
}

function isNumeric(el) {//반드시 숫자만

    var pattern = /^[0-9]+$/;
    return (pattern.test(el.value)) ? true : doError(el, NUMERIC_ONLY);
}

function isFloat(el) {//실수형

    var pattern = /^[0-9.]+$/;
    return (pattern.test(el.value)) ? true : doError(el, FLOAT_ONLY);
}

function isValidDomain(el) {//영문 도메인 관련

    var pattern = /^[a-z|A-Z|0-9]+[a-z|A-Z|0-9|\-]+[a-z|A-Z|0-9]$/;
    return (pattern.test(el.value)) ? true : doError(el, NOT_DOMAIN);
}

function isValidHanDomain(el) {//한글 도메인 관련

    var pattern = /[가-힣]+[가-힣]$/;
    return (pattern.test(el.value)) ? true : doError(el, KOREAN_ONLY);
}

function isValidJumin(el) {

    var pattern = /^([0-9]{6})-?([0-9]{7})$/;
    var num = el.value;
    if (!pattern.test(num)) return doError(el, NOT_VALID);
    num = RegExp.$1 + RegExp.$2;

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (i = 0; i < 12; i++) {
        if (isNaN(num.substring(i, i + 1))) return doError(el, NOT_VALID);
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    return ((11 - mod) % 10 == last) ? true : doError(el, NOT_VALID);

}

function isValidJumin2(el) {


    var pattern = /^([0-9]{6})([0-9]{7})$/;
    var num = el.value;
    if (!pattern.test(num)) return false;
    num = RegExp.$1 + RegExp.$2;

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (i = 0; i < 12; i++) {
        if (isNaN(num.substring(i, i + 1))) return false;
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    return ((11 - mod) % 10 == last) ? true : false;

}

function isValidBizNo(el) {

    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
    var num = el.value;
    if (!pattern.test(num)) return doError(el, NOT_VALID);
    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var cVal = 0;
    for (var i = 0; i < 8; i++) {
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : (_tmp == 1) ? 3 : 7);
        cVal += (parseFloat(num.substring(i, i + 1)) * cKeyNum) % 10;
    }
    var li_temp = parseFloat(num.substring(i, i + 1)) * 5 + '0';
    cVal += parseFloat(li_temp.substring(0, 1)) + parseFloat(li_temp.substring(1, 2));
    return (parseInt(num.substring(9, 10)) == 10 - (cVal % 10) % 10) ? true : doError(el, NOT_VALID);
}

function isValidBizNo2(el) {

    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
    var num = el.value;
    if (!pattern.test(num)) return false;
    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var cVal = 0;
    for (var i = 0; i < 8; i++) {
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : (_tmp == 1) ? 3 : 7);
        cVal += (parseFloat(num.substring(i, i + 1)) * cKeyNum) % 10;
    }
    var li_temp = parseFloat(num.substring(i, i + 1)) * 5 + '0';
    cVal += parseFloat(li_temp.substring(0, 1)) + parseFloat(li_temp.substring(1, 2));
    return (parseInt(num.substring(9, 10)) == 10 - (cVal % 10) % 10) ? true : false;
}

function isValidPhone(el) {

    var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
    if (pattern.exec(el.value)) {
        if (RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019") {
            el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
        }
        return true;
    } else {
        return doError(el, NOT_VALID);
    }
}

function isDate(el) {
    //var pattern = /^([12][0-9]{3}[01][0-9][0-3][0-9])$/;
    var pattern = /^([0-9]{4}\-[0-9]{2}\-[0-9]{2})$/;
    var num = el.value;
    if (!pattern.test(num)) return doError(el, NOT_DATE);

    var year = 0;
    var month = 0;
    var date = 0;
    if (num.substring(0, 4)) {
        if (parseInt(num.substring(0, 4)))
            year = parseInt(num.substring(0, 4)) - 1900;
    }
    if (num.substring(5, 7)) {
        if (parseInt(zeroDefect(num.substring(5, 7))))
            month = parseInt(zeroDefect(num.substring(5, 7)));
    }
    if (num.substring(8, 10)) {
        if (parseInt(zeroDefect(num.substring(8, 10))))
            date = parseInt(zeroDefect(num.substring(8, 10)));
    }

    if (isDateInt(year, month, date)) {
        return true;
    }
    else {
        return doError(el, NOT_DATE);
    }
}
function isDateFormat(d) {
    var df = /[0-9]{4}-[0-9]{2}-[0-9]{2}/;
    alert(d.match(df));
    return d.match(df);
}



//입력한 문자열의 앞의 '0'을 제거한다.
function zeroDefect(str) {
    var length = str.length;
    for (var i = 0; i < length; i++) {
        if (str.charAt(0) == '0')
            str = str.substring(1, str.length);
        else
            continue;
    }
    if (str.length == 0) str = '0';
    return str;
}

//일자의 형식이 맞는지 비교한다.
function isDateInt(year, month, date) {
    var maxDate = getDayCountInt(year, month);
    if (year < 0)
        return false;
    if (!(1 <= month && month <= 12))
        return false;
    if (!(1 <= date && date <= maxDate))
        return false;
    return true;
}


//지정한 달의 일자수를 가져온다.
function getDayCountInt(year, month) {
    var yyyy = 0;
    var mm = 0;
    var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    if (parseInt(year))
        yyyy = parseInt(year);
    if (parseInt(month))
        mm = parseInt(month);
    if ((yyyy % 4 == 0) && (mm == 2))
        return 29;
    return days[month - 1];
}

//- END 패턴 검사 함수들 -------------------------------------------------



// 에러메시지 처리
function doError(el, type, action) {
    if (ValidationLanguage == "ko") {
        switch (type) {
            case NO_BLANK:
                doError_Ko(el, NO_BLANK_KO, action);
                break;
            case NOT_VALID:
                doError_Ko(el, NOT_VALID_KO, action);
                break;
            case TOO_LONG:
                doError_Ko(el, TOO_LONG_KO, action);
                break;
            case NOT_PASS_CHECK:
                doError_Ko(el, NOT_PASS_CHECK_KO, action);
                break;
            case NOT_DOMAIN:
                doError_Ko(el, NOT_DOMAIN_KO, action);
                break;
            case NOT_DOMAIN:
                doError_Ko(el, NOT_DOMAIN_KO, action);
                break;
            case NOT_USERID:
                doError_Ko(el, NOT_USERID_KO, action);
                break;
            case NOT_DATE:
                doError_Ko(el, NOT_DATE_KO, action);
                break;
            case NUMERIC_ONLY:
                doError_Ko(el, NUMERIC_ONLY_KO, action);
                break;
            case KOREAN_INCLUDE:
                doError_Ko(el, KOREAN_INCLUDE_KO, action);
                break;
            case KOREAN_NOT:
                doError_Ko(el, KOREAN_NOT_KO, action);
                break;
            case KOREAN_ONLY:
                doError_Ko(el, KOREAN_ONLY_KO, action);
                break;
            case FLOAT_ONLY:
                doError_Ko(el, FLOAT_ONLY_KO, action);
                break;
        }
    }
    else if (ValidationLanguage == "en") {
        switch (type) {
            case NO_BLANK:
                doError_En(el, NO_BLANK_EN, action);
                break;
            case NOT_VALID:
                doError_En(el, NOT_VALID_EN, action);
                break;
            case TOO_LONG:
                doError_En(el, TOO_LONG_EN, action);
                break;
            case NOT_PASS_CHECK:
                doError_En(el, NOT_PASS_CHECK_EN, action);
                break;
            case NOT_DOMAIN:
                doError_En(el, NOT_DOMAIN_EN, action);
                break;
            case NOT_DOMAIN:
                doError_En(el, NOT_DOMAIN_EN, action);
                break;
            case NOT_USERID:
                doError_En(el, NOT_USERID_EN, action);
                break;
            case NOT_DATE:
                doError_En(el, NOT_DATE_EN, action);
                break;
            case NUMERIC_ONLY:
                doError_En(el, NUMERIC_ONLY_EN, action);
                break;
            case KOREAN_INCLUDE:
                doError_En(el, KOREAN_INCLUDE_EN, action);
                break;
            case KOREAN_NOT:
                doError_En(el, KOREAN_NOT_EN, action);
                break;
            case KOREAN_ONLY:
                doError_En(el, KOREAN_ONLY_EN, action);
                break;
            case FLOAT_ONLY:
                doError_En(el, FLOAT_ONLY_EN, action);
                break;
        }
    }

    return false;
}

// 에러메시지 처리
function doError_Ko(el, type, action) {
    var pattern = /{([a-zA-Z0-9_]+)\+?([가-힣]{2})?}/;
    var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
    pattern.exec(type);
    var tail = (RegExp.$2) ? josa(eval(RegExp.$1), RegExp.$2) : "";

    if (action == "sel") {
        el.select();
    } else if (action == "del") {
        el.value = "";
    }

    if (el.getAttribute("NOFOCUS") == null) {
        el.setAttribute("validation_originalbackgroundcolor", el.style.backgroundColor);
        el.style.backgroundColor = ErrorFieldBackColor;

        if (ValidateErrorFocusItem == null) {
            ValidateErrorFocusItem = el;
        }
        el.focus();
    }

    if (ValidateType == "allshow") {
        ValidateErrorItems += "\r\n - " + type.replace(pattern, eval(RegExp.$1) + tail);
    }
    else {
        alert(type.replace(pattern, eval(RegExp.$1) + tail));
    }

    return false;
}

// 에러메시지 처리
function doError_En(el, type, action) {
    var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
    var pattern = /{([a-zA-Z0-9_]+)\+?([가-힣]{2})?}/;
    pattern.exec(type);

    if (action == "sel") {
        el.select();
    } else if (action == "del") {
        el.value = "";
    }

    if (el.getAttribute("NOFOCUS") == null) {
        el.setAttribute("validation_originalbackgroundcolor", el.style.backgroundColor);
        el.style.backgroundColor = ErrorFieldBackColor;

        if (ValidateErrorFocusItem == null) {
            ValidateErrorFocusItem = el;
        }
        el.focus();
    }

    if (ValidateType == "allshow") {
        ValidateErrorItems += "\r\n - " + type.replace(pattern, eval(RegExp.$1));
    }
    else {
        alert(type.replace(pattern, eval(RegExp.$1)));
    }

    return false;
}

function doSuccess(el) {
    if (el.getAttribute("validation_originalbackgroundcolor") != null) {
        el.style.backgroundColor = el.getAttribute("validation_originalbackgroundcolor");
    }
}

// 스트링 객체에 메소드 추가
String.prototype.trim = function(str) {
    str = this != window ? this : str;
    return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

String.prototype.hasFinalConsonant = function(str) {
    str = this != window ? this : str;
    var strTemp = str.substr(str.length - 1);
    return ((strTemp.charCodeAt(0) - 16) % 28 != 0);
}

function josa(str, tail) {
    return (str.hasFinalConsonant()) ? tail.substring(0, 1) : tail.substring(1, 2);
}

// 필수항목에 빨간별표 체크하는 부분
function requiredCheck(form) {
    window.alert(form);
    for (var j = 0; j < form.elements.length; j++) {
        if (form.elements[j].getAttribute("required") != null) {
            form.elements[j].className = "required";
            form.elements[j].style.backgroundPosition = "top right";
            form.elements[j].style.backgroundRepeat = "no-repeat";
        }
    }
}

function doValidate(objValidationElement) {

    var bRetval = true;

    if (objValidationElement.tagName == "FORM") {

        for (checki = 0; checki < objValidationElement.elements.length; checki++) {
            if (objValidationElement.elements[checki].type.toUpperCase() == "TEXT" ||
                objValidationElement.elements[checki].type.toUpperCase() == "SELECT" ||
                objValidationElement.elements[checki].type.toUpperCase() == "SELECT-ONE" ||
                objValidationElement.elements[checki].type.toUpperCase() == "SELECT-MULTI") {
                doSuccess(objValidationElement.elements[checki]);
            }
        }

        for (checki = 0; checki < objValidationElement.elements.length; checki++) {

            var el = objValidationElement.elements[checki];
            if (el.type != "") {
                if (el.value != null) el.value = el.value.trim();
                else el.value = "";

                if (el.getAttribute("REQUIRED") != null) {
                    if (el.getAttribute("REQUIRED").toUpperCase() == "TRUE" ||
                    el.getAttribute("REQUIRED").toUpperCase() == "" ||
                    el.getAttribute("REQUIRED").toUpperCase() == null) {

                        if (el.value == null || el.value == "") {
                            if (ValidateType == "allshow") {
                                doError(el, NO_BLANK);
                                bRetval = false;
                            }
                            else {
                                return doError(el, NO_BLANK);
                            }
                        }
                        else {
                            doSuccess(el);
                        }
                    }
                }

                if (el.getAttribute("MAXBYTE") != null && el.value != "") {
                    var len = 0;
                    for (j = 0; j < el.value.length; j++) {
                        var str = el.value.charAt(j);
                        len += (str.charCodeAt() > 128) ? 2 : 1
                    }
                    if (len > parseInt(el.getAttribute("MAXBYTE"))) {
                        maxbyte = el.getAttribute("MAXBYTE");
                        if (ValidateType == "allshow") {
                            doError(el, TOO_LONG);
                            bRetval = false;
                        }
                        else {
                            return doError(el, TOO_LONG);
                        }
                    }
                }

                if (el.getAttribute("OPTION") != null && el.value != "") {
                    if (!funcs[el.getAttribute("OPTION")](el)) return false;
                }
            }
        }
    }
    else if (objValidationElement.tagName == "TABLE" || objValidationElement.tagName == "DIV") {

        for (checki = 0; checki < objValidationElement.all.length; checki++) {
            if (objValidationElement.all[checki].type != null) {
                if (objValidationElement.all[checki].type.toUpperCase() == "TEXT" ||
                objValidationElement.all[checki].type.toUpperCase() == "SELECT" ||
                objValidationElement.all[checki].type.toUpperCase() == "SELECT-ONE" ||
                objValidationElement.all[checki].type.toUpperCase() == "SELECT-MULTI") {
                    doSuccess(objValidationElement.all[checki]);
                }
            }
        }

        for (checki = 0; checki < objValidationElement.all.length; checki++) {

            var el = objValidationElement.all[checki];
            if (el.tagName == "INPUT" || el.tagName == "SELECT" || el.tagName == "SELECT-ONE" || el.tagName == "SELECT-MULTI") {
                if (el.value != null) el.value = el.value.trim();
                else el.value = "";

                if (el.getAttribute("REQUIRED") != null) {
                    if (el.getAttribute("REQUIRED").toUpperCase() == "TRUE" ||
                    el.getAttribute("REQUIRED").toUpperCase() == "" ||
                    el.getAttribute("REQUIRED").toUpperCase() == null) {

                        if (el.value == null || el.value == "") {
                            if (ValidateType == "allshow") {
                                doError(el, NO_BLANK);
                                bRetval = false;
                            }
                            else {
                                return doError(el, NO_BLANK);
                            }
                        }
                        else {
                            doSuccess(el);
                        }
                    }
                }

                if (el.getAttribute("MAXBYTE") != null && el.value != "") {
                    var len = 0;
                    for (j = 0; j < el.value.length; j++) {
                        var str = el.value.charAt(j);
                        len += (str.charCodeAt() > 128) ? 2 : 1
                    }
                    if (len > parseInt(el.getAttribute("MAXBYTE"))) {
                        maxbyte = el.getAttribute("MAXBYTE");
                        if (ValidateType == "allshow") {
                            doError(el, TOO_LONG);
                            bRetval = false;
                        }
                        else {
                            return doError(el, TOO_LONG);
                        }
                    }
                }

                if (el.getAttribute("OPTION") != null && el.value != "") {
                    if (!funcs[el.getAttribute("OPTION")](el)) return false;
                }
            }
        }
    }

    return bRetval;
}




// ==================================================================
// 천단위 콤마찍기

function validate_Price() {
    var obj;
    if (document.all) {
        obj = event.srcElement;
    }
    else {
        obj = this;
    }

    if (event.keyCode != 39 && event.keyCode != 37) {
        obj.value = ValidatePrice(obj.value);
    }

    return true;
}

function validate_Price_Obj(obj) {
    return ValidatePrice(obj.value);
}

function ValidatePrice(value) {

    value = UnComma(value);
    return Comma(value);
}



function Comma(input) {
    var inputString = new String;
    var outputString = new String;
    var counter = 0;
    var decimalPoint = 0;
    var end = 0;
    var modval = 0;

    inputString = input.toString();
    outputString = '';
    decimalPoint = inputString.indexOf('.', 1);
    if (decimalPoint == -1) {
        end = inputString.length - (inputString.charAt(0) == '0' ? 1 : 0);
        for (counter = 1; counter <= inputString.length; counter++) {
            var modval = counter - Math.floor(counter / 3) * 3;
            outputString = (modval == 0 && counter < end ? ',' : '') + inputString.charAt(inputString.length - counter) + outputString;
        }
    }
    else {
        end = decimalPoint - (inputString.charAt(0) == '-' ? 1 : 0);
        for (counter = 1; counter <= decimalPoint; counter++) {
            outputString = (counter == 0 && counter < end ? ',' : '') + inputString.charAt(decimalPoint - counter) + outputString;
        }
        for (counter = decimalPoint; counter < decimalPoint + 3; counter++) {
            outputString += inputString.charAt(counter);
        }
    }
    return (outputString);
}


function UnComma(input) {
    var inputString = new String;
    var outputString = new String;
    var outputNumber = new Number;
    var counter = 0;

    if (input == '') {
        return 0;
    }
    inputString = input;
    outputString = '';
    for (counter = 0; counter < inputString.length; counter++) {
        outputString += (inputString.charAt(counter) != ',' ? inputString.charAt(counter) : '');
    }
    outputNumber = parseFloat(outputString);
    return (outputNumber);
}


// 천단위 콤마찍기
// ==================================================================







// ==================================================================
// 숫자만 입력 받기

function ValidateKeynumber() {
    if ((event.keyCode < 48) || (event.keyCode > 57) || event.keyCode == 46) event.returnValue = false;
}



// 숫자만 입력 받기
// ==================================================================







// ==================================================================
// 실수형만 입력 받기

function ValidateKeyfloat(obj) {
    if ((event.keyCode < 48) || (event.keyCode > 57)) {
        if (event.keyCode != 46) {
            event.returnValue = false;
        }
    }
}



// 실수형만 입력 받기
// ==================================================================







var init_true = false;

// 필수 입력항목 오류시 Alert이 아니라 잘못 입력한 모든 컨트롤의 배경색을 변경하고 첫번째 오류 컨트롤에 포커스를 둘 수 있도록 한다.
function Init_ValidateByAll() {

    init_true = true;

    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 = doValidate;

        for (var j = 0; j < document.forms[i].elements.length; j++) {
            // 필수 입력일 경우는 * 배경이미지를 준다.

            if (document.forms[i].elements[j].getAttribute("REQUIRED") != null) {

                if (document.forms[i].elements[j].getAttribute("NOCOLOR") == null) {

                    document.forms[i].elements[j].style.backgroundColor = RequiredFieldBackColor;
                }
            }
        }
    }
}


function ValidateShowMessage() {
    if (ValidateType == "allshow") {
        alert("입력하지 않은 항목이 있습니다." + ValidateErrorItems);
        ValidateErrorFocusItem.focus();
    }
}

/*************** 유효성 검사 (제공 인터페이스) ***************************************************************************/

// 하나의 폼을 가지고 있고, 모든 컨트롤에 대하여 검사를 할 경우
function ValidateForm() {

    ValidateErrorItems = "";
    ValidateErrorFocusItem = null;

    if (doValidate(document.forms[0]) == false) {
        ValidateShowMessage();
        return false;
    }

    return true;
}

// 특정 요소의 하위 컨트롤에 대하여 검사를 할 경우
function ValidateElement(Element) {

    ValidateErrorItems = "";
    ValidateErrorFocusItem = null;

    if (doValidate(Element) == false) {
        ValidateShowMessage();
        return false;
    }

    return true;
}

function ValidationAll() {

    ValidateErrorItems = "";
    ValidateErrorFocusItem = null;

    var bRetval = true;
    for (nValidateFormIndex = 0; nValidateFormIndex < document.forms.length; nValidateFormIndex++) {
        if (doValidate(document.forms[nValidateFormIndex]) == false) {
            if (ValidateType == "allshow") {
                bRetval = false;
            }
            else {
                return false;
            }
        }
    }

    if (bRetval == false) {
        ValidateShowMessage();
        return false;
    }

    return true;
}


function SetValidateType(strValidateType) {
    ValidateType = strValidateType;
}

