/***********************************************************
 * AutoValidator
 *   Kim, Kang Seok (drkimks@tomatosystem.co.kr)
 *   yb2u (modify, yb2u@yb2u.com)
 *   zzang (modify, dgroups@tomatosystem.co.kr)
 *
 *   °³Á¤ÀÌ·Â
 *   AutoValidation
 *   2002.11.26 version 1.1
 *   2003.01.08 version 1.2
 *   2003.01.23 version 1.3
 *   2003.01.29 version 1.4
 *   2003.02.06 version 1.5
 *   2003.03.06 version 1.6
 *   2003.05.28 version 1.6.1
 *   2004.03.22 rename AutoValidator 1.0
 *   2005.03.30 version 1.6.2
 *
 *   Tomato System
 *
 ***********************************************************/

/***********************************************************
 * Usage
 *
 *   AutoValidate(FormObject)
 *
 *   <JavaScript>
 *   if (AutoValidate(FormObject) == false)
 *       return;
 *
 *   <Tags>
 *   title="ÀÌ¸§" kind="number" notnull="true" minlength="4" maxlength="10" number="(x,y)"
 *
 *   <kind>
 *      text (default)
 *      number
 *      numberminus
 *      float
 *      money
 *      alphanumeric
 *      korean
 *      ascii
 *      alphabet
 *      date : sep="([.]|[/]|[-]|[\s]|[\,])?"
 *      year month day : group="SameName"
 *      ssn : sep="([-]|[\s])?"
 *      ssn1 ssn2 : group="SameName"
 *      email
 *      nohanmail
 *
 *    <number>
 *     xÀÚ¸®¼ö Áß¿¡¼­ yÀÚ¸®¼ö ¸¸Å­ÀÇ ¼Ò¼öÁ¡À» ÀÔ·ÂÇÑ´Ù. x-y ÀÚ¸®¼ö¸¸Å­ Á¤¼ö¸¦ ÀÔ·ÂÇÑ´Ù.
 * 
 *    <Àû¿ë°¡´ÉÇÑ Tags>
 *    input (text/password)
 *    textarea
 *    select
 *
 ***********************************************************/

/***********************************************************
 * Configuration
 ***********************************************************/

//var isDebug = true;
var isDebug = false;
var undefined = null;

/***********************************************************/

function AutoValidate(FormObject) {

//        if (isDebug) alert('step 1');

	var varLength = FormObject.elements.length;
    for (var i = 0; i < varLength; i++) {

        var obj         = FormObject.elements[i];
        var value       = obj.value;
        var kind        = obj.kind;
        var group       = obj.group;
        var notnull     = obj.notnull;
        var minlength   = obj.minlength;
        var maxlength   = obj.maxlength;

		var numeric     = obj.number;

     
        /******************************************
         * Not Null Check
         ******************************************/
        // ¼Ó¼º¿¡ ´ëÇÑ Validation Ã¼Å© À¯¹«
        var blnCheckAttr = true;
	var chkSpace = value.replace(/(^\s*)|(\s*$)/g, "");

        if (notnull == 'true') {
            blnCheckAttr = true;

            if (chkSpace == '') {
                return alertError(obj, 'notnull');
            }
        } else {
            if (chkSpace == '') {
                blnCheckAttr = false;
            } else {
                blnCheckAttr = true;
            }
        }

        if (blnCheckAttr) {
            /******************************************
             * Min Length Check
             ******************************************/
            if (minlength != '') {
                
                var length = getLength(value);
                if (length < minlength) {
                    return alertError(obj, 'minlength');
                }
            }

            /******************************************
             * Max Length Check
             ******************************************/
            if (maxlength != '') {
                var length = getLength(value);
                if (length > maxlength) {
                    return alertError(obj, 'maxlength');
                }
            }
			
            /******************************************
             * numeric=(x,x) Check
             * alertmessageÃ³¸®ÀÇ ºÒÆí¿¡ ÀÇÇØ ¿©±â¼­ Ã³¸®ÇÑ´Ù. 
             ******************************************/
			if(numeric+'' != 'undefined' && numeric != '')
			{
                var cnt=0;
                var delCnt=0;
                var flag= false;
                var sMode=obj.number

                var sValue= obj.value;
                var FirstNum = sMode.substring(1,sMode.indexOf(","));
                var LastNum =sMode.substring(sMode.indexOf(",")+1, sMode.indexOf(")"));
                var IntNum =eval(FirstNum) - eval(LastNum)

                for(j=0;j<sValue.length;j++){
                    if('.' == sValue.charAt(j)){
                        delCnt++;
                        flag= true;
                    }
                }
                if(flag){
                    var title     = obj.title;
                    
                    var endValue = sValue.substring(sValue.indexOf(".")+1, sValue.length);

                    if (delCnt>1) { 
                        return alertMessageError(obj, obj.title +'ÀÇ À¯È¿¼º °Ë»çÁß ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.');
                    }

                    if (endValue && (endValue.length > eval(LastNum)) ) {
                        return alertMessageError(obj, obj.title +'Àº(´Â) ¼Ò¼ýÁ¡ÀÚ¸®¼ö('+LastNum+'ÀÚ)¸¦ ÃÊ°úÇß½À´Ï´Ù.');
                    }
 
//                    if ((sValue.length - endValue.length) < (parseInt(FirstNum) +1)) {
                    if ((sValue.length - endValue.length-1) > IntNum) {
                        return alertMessageError(obj, obj.title +'Àº(´Â) Á¤¼öÀÚ¸®¼ö('+IntNum+ 'ÀÚ)¸¦ ÃÊ°úÇß½À´Ï´Ù.');
                    }

                } else {
					//alert(':IntNum='+IntNum);
					//alert('sValue.length='+sValue.length+':eval(IntNum)='+eval(IntNum)); 
                    if (sValue.length > eval(IntNum) ) {
                        return alertMessageError(obj, obj.title +'Àº(´Â) Á¤¼öÀÚ¸®¼ö('+IntNum+ 'ÀÚ)¸¦ ÃÊ°úÇß½À´Ï´Ù.');
                    }
                }
            }

            /******************************************
             * Kind Check
             *
             * Kind Type
             *   number
             *   numberminus
             *   float
             *   money
             *   alphanumeric
             *   alphabet
             *   korean (2 bytes)
             *   ascii
             *   date
             *   compareDate
             *   year month day
             *   email
             *   nohanmail
             *   ssn
             *   ssn1 ssn2
             *
             ******************************************/

            if (kind == '')
                continue;

            // ¼ýÀÚ ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            if (kind == 'number') {
                if (isNumber(value) == false) {
                    return alertError(obj, 'number');
                }

            // - ¼ýÀÚ ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'numberminus') {
                if (isNumberMinus(value) == false) {
                    return alertError(obj, 'numberminus');
                }

            // float ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'float') {
                if (isFloat(value) == false) {
                    return alertError(obj, 'float');
                }

            // Money ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            }  else if (kind == 'money'){
                if (isMoney(value) == false) {
                    return alertError(obj, 'money');
                }

            // ¿µ¹®ÀÚ ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            }  else if (kind == 'alphanumeric') {
                if (isAlphaNumeric(value) == false) {
                    return alertError(obj, 'alphanumeric');
                }

            // ¿µ¹®ÀÚ ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'alphabet') {
                if (isAlphabet(value) == false) {
                    return alertError(obj, 'alphabet');
                }

            // ÇÑ±Û(2 bytes) ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'korean') {
                if (isKorean(value) == false) {
                    return alertError(obj, 'korean');
                }

            // ASCII ¹®ÀÚ¸¸ ÀÔ·Â¹Þ´Â °æ¿ì
            } else if (kind == 'ascii') {
                if (isASCII(value) == false) {
                    return alertError(obj, 'ascii');
                }

            // Email ÀÔ·Â ÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'email') {
                if (isEmail(value) == false) {
                    return alertError(obj, 'email');
                }

            // HanMail Ã¼Å©
            } else if (kind == 'nohanmail') {
                if (isEmail(value) == false) {
                    return alertError(obj, 'email');
                } else if (isHanMail(value)) {
                    return alertError(obj, 'hanmail');
                }

            // HanMail Ã¼Å© - µµ¸ÞÀÎ¸¸ Ã¼Å©ÇÏ±â(¾ÆÀÌµð¿Í µµ¸ÞÀÎÀ» µû·Î ÀÔ·Â¹ÞÀ»¶§ »ç¿ë)
            } else if (kind == 'nohanmail_domain') {
				/*
                if (isEmail_domain(value) == false) {
                    return alertError(obj, 'email');
                } else 
				*/
				if (isHanMail_domain(value)) {
                    return alertError(obj, 'hanmail');
                }

            // ÁÖ¹Îµî·Ï¹øÈ£ (6+7) ÀÔ·ÂÅÂ±×ÀÎ °æ¿ì
            } else if (kind == 'ssn') {
                if (isSsn(obj, value, 1) == false) {
                    return alertError(obj, 'ssn');
                }

            /************************************
             * ³¯Â¥ ÀÔ·Â ÅÂ±×
             ************************************/

            // ³¯Â¥ ÀÔ·Â ÅÂ±×ÀÎ °æ¿ì (³â+¿ù+ÀÏ)
            } else if (kind == 'date') {
                if (isDate(obj, value, 1) == false) {
                    return alertError(obj, 'date');
                }
                

            // ³âµµ ÇÏ³ª¸¸ ¹Þ´Â °æ¿ì
    //        } else if (kind == 'year') {
    //            if (checkYear(value) == false) {
    //                return alertError(obj, 'year');
    //            }

            /**
             * ³¯Â¥ ÀÔ·Â Check
             *
             * ³âµµ, ¿ù, ÀÏÀÌ ¼­·Î´Ù¸¥ ÀÔ·ÂÅÂ±×·Î ÀÔ·ÂµÇ´Â °æ¿ì
             * ³âµµ, ¿ù, ÀÏÀ» ¸ðµÎ ¹Þ¾Æ¼­ ³¯Â¥ °ËÁõ
             * ÀÌ¸§¿¡ ´ÙÀ½°ú °°Àº ±ÔÄ¢ÀÌ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÑ´Ù.
             * 
             * kind="year"  name="strSomeFieldNameYear"  title="µî·Ï³âµµ" notnull="true"
             * kind="month" name="strSomeFieldNameMonth" title="µî·Ï¿ù"   notnull="true"
             * kind="day"   name="strSomeFieldNameDay"   title="µî·ÏÀÏ"   notnull="true"
             *
             * ÃÑ 5°³ ³¯Â¥±îÁö Áö¿øÇÑ´Ù.
             */
            } else if (kind == 'year') {
                var dateValue = getDate(FormObject, group);

                if (isDate(obj, dateValue, 3) == false) {
                    return alertError(obj, 'date');
                }
    /*
            } else if (kind == 'month') {
                var dateValue = getDate(FormObject, group);

                if (isDate(dateValue) == false) {
                    return alertError(obj, 'date');
                }
            } else if (kind == 'day') {
                var dateValue = getDate(FormObject, group);

                if (isDate(dateValue) == false) {
                    return alertError(obj, 'date');
                }
    */
            /**
             * ÁÖ¹Îµî·Ï¹øÈ£ ÀÔ·Â Check
             *
             * ÁÖ¹Îµî·Ï¹øÈ£ ¾ÕµÚÀÚ¸®°¡ º°µµÀÇ ÅÂ±×·Î ÀÔ·ÂµÇ´Â °æ¿ì
             * ¸í¸í±ÔÄ¢
             * kind="ssn1" group="SameName" title="ÁÖ¹Îµî·Ï¹øÈ£", notnull="true"
             * kind="ssn2" group="SameName" title="ÁÖ¹Îµî·Ï¹øÈ£", notnull="true"
             */
            } else if (kind == 'ssn1') {
                var ssnValue = getSsn(FormObject, group);

                if (isSsn(obj, ssnValue, 2) == false) {
                    return alertError(obj, 'ssn');
                }
    /*
            } else if (kind == 'ssn2') {
                var ssnValue = getSsn(FormObject, group);
                
                if (isSsn(ssnValue) == false) {
                    return alertError(obj, 'ssn');
                }
    */
            } else if (kind == 'phone') {
                if (isPhoneNumber(value) == false)
                {
                    return alertError(obj, 'phone');
                }
            } 


            
            /******************************************
             * Compare
             *
             *   <Compare_Attribute>
             *      eq : Equal
             *      ne : Not Equal
             *      gt : Great Then
             *      ge : Great/Equal
             *      lt : Less Then
             *      le : Less/Equal
             *
             *   <Tags>
             *   kind="number" (Compare_Attribute)="ºñ±³´ë»ó_name"
             ******************************************/

            var eq = obj.eq;
            var ne = obj.ne;
            var gt = obj.gt;
            var ge = obj.ge;
            var lt = obj.lt;
            var le = obj.le;

            if (eq == undefined)  eq = '';
            if (ne == undefined)  ne = '';
            if (gt == undefined)  gt = '';
            if (ge == undefined)  ge = '';
            if (lt == undefined)  lt = '';
            if (le == undefined)  le = '';

            var comp2Name = '';

            if      (eq != '')  comp2Name = eq;
            else if (ne != '')  comp2Name = ne;
            else if (gt != '')  comp2Name = gt;
            else if (ge != '')  comp2Name = ge;
            else if (lt != '')  comp2Name = lt;
            else if (le != '')  comp2Name = le;

            var comp1Value;
            var comp2Value;
            var comp2Title;

            if (comp2Name != '') {
                comp2Title = FormObject[comp2Name].title;

                if (kind == "number") {
                    comp1Value = parseInt(value);
                    comp2Value = parseInt(FormObject[comp2Name].value);
                } else if (kind == "numberminus") {
                    comp1Value = parseFloat(value);
                    comp2Value = parseFloat(FormObject[comp2Name].value);
                } else if (kind == "float") {
                    comp1Value = parseFloat(value);
                    comp2Value = parseFloat(FormObject[comp2Name].value);
                } else {
                    comp1Value = value;
                    comp2Value = FormObject[comp2Name].value;
                }
            }



            if (eq != '') {
                if (comp1Value != comp2Value) {
                    return alertCompError(obj, comp2Title, 'eq');
                }
            } else if (ne != '') {
                if (comp1Value == comp2Value) {
                    return alertCompError(obj, comp2Title, 'ne');
                }
            } else if (gt != '') {
                if (comp1Value <= comp2Value) {
                    return alertCompError(obj, comp2Title, 'gt');
                }
            } else if (ge != '') {
                if (comp1Value < comp2Value) {
                    return alertCompError(obj, comp2Title, 'ge');
                }
            } else if (lt != '') {
                if (comp1Value >= comp2Value) {
                    return alertCompError(obj, comp2Title, 'lt');
                }
            } else if (le != '') {
                if (comp1Value > comp2Value) {
                    return alertCompError(obj, comp2Title, 'le');
                }
            }
        }
        
    }
}



/******************************************************
 * ¸Þ½ÃÁö & Æ÷Ä¿½º ÇÔ¼ö
 ******************************************************/
function alertError(obj, error) {
    var title     = obj.title;
    var minlength = obj.minlength;
    var maxlength = obj.maxlength;

    if      (error == 'notnull'     ) alert(title + 'À»(¸¦) ÀÔ·ÂÇÏ½Ê½Ã¿À.');
    else if (error == 'minlength'   ) alert(title + 'À»(¸¦) ' + minlength + 'ÀÚ ÀÌ»ó Àû¾îÁÖ¼¼¿ä.');
    else if (error == 'maxlength'   ) alert(title + 'Àº(´Â) ' + maxlength + 'ÀÚ¸¦ ³ÑÀ» ¼ö ¾ø½À´Ï´Ù.');
    else if (error == 'number'      ) alert(title + 'Àº(´Â) ¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'numberminus' ) alert(title + 'Àº(´Â) -¿Í ¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'float'       ) alert(title + 'Àº(´Â) - . ¿Í ¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'money'       ) alert(title + 'Àº(´Â) ,¿Í ¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'alphanumeric') alert(title + 'Àº(´Â) ¾ËÆÄºª°ú ¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'alphabet'    ) alert(title + 'Àº(´Â) ¾ËÆÄºª¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'korean'      ) alert(title + 'Àº(´Â) ÇÑ±Û¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.');
    else if (error == 'ascii'       ) alert(title + 'Àº(´Â) ÇÑ±ÛÀ» ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù.');
    else if (error == 'date'        ) alert(title + 'Àº(´Â) Àß¸øµÈ ³¯Â¥ ÀÔ´Ï´Ù.');
    else if (error == 'email'       ) alert(title + 'Àº(´Â) Àß¸øµÈ ÀÌ¸ÞÀÏ ÁÖ¼Ò ÀÔ´Ï´Ù.');
    else if (error == 'hanmail'     ) alert(title + '¿¡ hanmail.net ¶Ç´Â daum.netÀº »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.');
    else if (error == 'ssn'         ) alert('Àß¸øµÈ ÁÖ¹Îµî·Ï¹øÈ£ ÀÔ´Ï´Ù.');
    else if (error == 'phone'       ) alert(title + 'Àº(´Â) Àß¸øµÈ ÀüÈ­¹øÈ£ ÀÔ´Ï´Ù.');
    else                              alert('°³¹ßÀÚ´Ô ' + title + 'ÀÇ À¯È¿¼º °Ë»çÁß ¹®Á¦°¡ ¹ß»ýÇß½À´Ï´Ù.');

    obj.focus();

    return false;
}

function alertMessageError(obj, errorMsg) {
    alert(errorMsg);

    obj.focus();

    return false;
}

function alertCompError(obj, comp2Title, error) {
    var comp1Title = obj.title;

    if      (error == 'eq') alert(comp1Title + '¿Í(°ú) ' + comp2Title + 'Àº(´Â) °°¾Æ¾ß ÇÕ´Ï´Ù.'      );
    else if (error == 'ne') alert(comp1Title + '¿Í(°ú) ' + comp2Title + 'Àº(´Â) °°À¸¸é ¾È µË´Ï´Ù.'   );
    else if (error == 'gt') alert(comp1Title + 'Àº(´Â) ' + comp2Title + ' º¸´Ù Ä¿¾ß ÇÕ´Ï´Ù.'         );
    else if (error == 'ge') alert(comp1Title + 'Àº(´Â) ' + comp2Title + ' º¸´Ù Å©°Å³ª °°¾Æ¾ß ÇÕ´Ï´Ù.');
    else if (error == 'lt') alert(comp1Title + 'Àº(´Â) ' + comp2Title + ' º¸´Ù ÀÛ¾Æ¾ß ÇÕ´Ï´Ù.'       );
    else if (error == 'le') alert(comp1Title + 'Àº(´Â) ' + comp2Title + ' º¸´Ù ÀÛ°Å³ª °°¾Æ¾ß ÇÕ´Ï´Ù.');
    else                    alert('°³¹ßÀÚ´Ô ' + comp1Title + '¿Í(°ú) ' + comp2Title + 'ÀÇ À¯È¿¼º °Ë»çÁß ¹®Á¦°¡ ¹ß»ýÇß½À´Ï´Ù.');

    obj.focus();

    return false;
}



/******************************************************
 * ÁÖ¹Îµî·Ï¹øÈ£ Ã¼Å© ÇÔ¼ö
 ******************************************************/
function isSsn(obj, value, fieldCount) {
    var sep = obj.sep;
    if (sep == undefined) {
        sep = "";
    }

    var pattern = /^([0-9][0-9][0-1][0-9][0-3][0-9])([-]|[\s])?([1-4][0-9][0-9][0-9][0-9][0-9][0-9])$/g;

    if(pattern.test(value)) {
        var ssn1 = RegExp.$1;
        var ssn2 = RegExp.$3;

        if (fieldCount == 1) {
            obj.value = ssn1 + sep + ssn2;
        }

        return checkSsn(ssn1, ssn2);
    } else {
        return false;
    }
}


/******************************************************
 * Email Ã¼Å© ÇÔ¼ö
 ******************************************************/
function isEmail(value) {
    //var pattern = /^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    //                 \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    var pattern = /^[\w-]+([\\\.]+[\w-]*)?@([\w-]+\.)+[\w-]+$/i;
    return pattern.test(value);
    return true;
}
//¾Æ·¡´Â µµ¸ÞÀÎ¸¸ Ã¼Å©ÇÏ±â À§ÇÔ. - ÀÛ¼ºÁß
function isEmail_domain(value) {
//    var pattern = ([\w-]+\.)+[\w-]+$/i;
//    return pattern.test(value);
    return true;
}


/******************************************************
 * Han Mail Ã¼Å© ÇÔ¼ö
 ******************************************************/
function isHanMail(value) {
    var varDomain = value.substring(value.indexOf("@")+1).toLowerCase();
    if (varDomain == "hanmail.net") return true;
    return false;
}
//¾Æ·¡´Â µµ¸ÞÀÎ¸¸ Ã¼Å©ÇÏ±â À§ÇÔ.
function isHanMail_domain(value) {
    if (value == "hanmail.net" || value == "daum.net") return true;
    return false;
}

/******************************************************
 * ÀüÈ­¹øÈ£ Ã¼Å© ÇÔ¼ö
 ******************************************************/
function isPhoneNumber(value) {
    var varField = value.split("-");
    if (varField.length < 2 || varField.length > 3)
    {
        return false;
    }
    for (var i = 0; i < varField.length; i++)
    {
        if (isNumber(varField[i]) == false) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * ³¯Â¥ Ã¼Å© ÇÔ¼ö
 ******************************************************/
function isDate(obj, value, fieldcount) {
    var sep = obj.sep;
    if (sep == undefined) {
        sep = "";
    }

    var pattern = /^([1-2][0-9][0-9][0-9])([.]|[/]|[-]|[\s]|[\,])?([0-1][0-9]|[1-9])([.]|[/]|[-]|[\s]|[\,])?([0-3][0-9]|[1-9])$/g;

    if(pattern.test(value)) {
        var year  = RegExp.$1;
        var month = RegExp.$3;
        var day   = RegExp.$5;

        if (fieldcount == 1) {
            var printMonth;
            var printDay;

            if (month.length == 1)  printMonth = "0" + month;
            else                    printMonth = month;

            if (day.length   == 1)  printDay   = "0" + day;
            else                    printDay   = day;

            obj.value = year + sep + printMonth + sep + printDay;
        }

        return checkDate(year, month, day);
    } else {
        return false;
    }
}


/******************************************************
 * ±æÀÌ Ã¼Å© ÇÔ¼ö
 ******************************************************/
function getLength(value) {
    var length = 0;
    var i = 0;
		
		if(value != undefined){
		    while(true) {  
		        var ch = escape(value.charAt(i++));
		        if ( ch == "" || ch == null ) {
		            break;
		        }
		        length  += strCharByte(ch);
		    }
		}
    return length;
}

/******************************************************
 * ÇÑ¹®ÀÚ°¡ 1 byteÀÎÁö 2 bytesÀÎÁö Ã¼Å©ÇÏ´Â ÇÔ¼ö
 ******************************************************/
function strCharByte(chStr) {
    if (chStr.substring(0, 2) == "%u") {
        if (chStr.substring(2,4) == "00") {
            return 1; 
        } else {
            return 2; //ÇÑ±Û 
        }
    } else if (chStr.substring(0,1) == "%") { 
        if (parseInt(chStr.substring(1,3), 16) > 127) {
            return 2; //ÇÑ±Û 
        } else {
            return 1; 
        }
    } else {
        return 1;
    }
}


/******************************************************
 * ¼ýÀÚ check ÇÔ¼ö
 ******************************************************/
function isNumber(value) {
    for (var i=0; i < value.length; i++) {
        if (!('0' <= value.charAt(i) && value.charAt(i) <= '9')) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * - ¼ýÀÚ check ÇÔ¼ö
 ******************************************************/
function isNumberMinus(value) {
    for (var i=0; i < value.length; i++) {
        if (!(('0' <= value.charAt(i) && value.charAt(i) <= '9') || value.charAt(i) == '-')) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * - . ¼ýÀÚ check ÇÔ¼ö
 ******************************************************/
function isFloat(value) {
    for (var i=0; i < value.length; i++) {
        if (!(('0' <= value.charAt(i) && value.charAt(i) <= '9') || value.charAt(i) == '-' || value.charAt(i) == '.')) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * - ¼ýÀÚ check ÇÔ¼ö
 ******************************************************/
function isMoney(value) {
    for (var i=0; i < value.length; i++) {
        if (!(('0' <= value.charAt(i) && value.charAt(i) <= '9') || value.charAt(i) == ',')) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * ¾ËÆÄºª check ÇÔ¼ö
 ******************************************************/
function isAlphabet(value) {
    for (var i = 0; i < value.length; i++) {
        temp = value.substring(i, i+1);
        if (value.indexOf(temp) == -1) { 
            return false; 
        } else if (!(('a' <= temp && temp < 'z') ||
                     ('A' <= temp && temp < 'Z') ||
                     (' ' == temp))) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * ¾ËÆÄºª + ¼ýÀÚ + È®Àå¹®ÀÚ(-, _) check ÇÔ¼ö
 ******************************************************/
/*
function isExtChar(value) {
    var extchar = '-_';
    extchar.charAt(i)

    for (var i = 0; i < value.length; i++) {
        temp = value.substring(i, i+1);
        if (value.indexOf(temp) == -1) { 
            return false; 
        } else if (!(('a' <= temp && temp < 'z') ||
                     ('A' <= temp && temp < 'Z') ||
                     (' ' == temp))) {
            return false;
        }
    }
    return true;
}   
*/


/******************************************************
 * ¾Æ½ºÅ°¹®ÀÚ·Î¸¸ ±¸¼ºµÇ¾î ÀÖ´ÂÁö Check
 ******************************************************/
function isASCII(value) {
    if (value.length == 0) {
        return false;
    }

    for (var i = 0; i < value.length; i++ ) {
        // blank : 32
        // ~ : 126
        if (' ' > value.charAt(i) || value.charAt(i) > '~') {
            return false;
        }
    }
    return true;
}

/******************************************************
 * ¾ËÆÄºª°ú ¼ýÀÚ·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö Check
 ******************************************************/
function isAlphaNumeric(value) {
    if (value.length == 0) {
        return false;
    }

    for (var i = 0; i < value.length; i++ ) {
        if (!(('a' <= value.charAt(i) && value.charAt(i) <= 'z') ||
              ('A' <= value.charAt(i) && value.charAt(i) <= 'Z') ||
              ('0' <= value.charAt(i) && value.charAt(i) <= '9') ||
              (' ' == value.charAt(i)) )) {
            return false;
        }
    }
    return true;
}

/******************************************************
 * ÇÑ±Û(2byte)ÀÎÁö Check
 ******************************************************/
function isKorean(value) {
    var i = 0;
    while (true) {
        var varCh = value.charAt(i++);
        if ( varCh == "" || varCh == null ) {
            break;
        } else if (varCh == ' ') {
            continue;
        } else {
            var ch = escape(varCh);
            if (ch.substring(0, 2) == "%u") {
                if (ch.substring(2, 4) == "00") {
                    return false;
                }
            } else if (ch.substring(0, 1) == "%") {
                if (parseInt(ch.substring(1, 3), 16) <= 127) {
                    return false;
                }
            } else {
                return false;
            }
        }
    }
    return true;
}

/******************************************************
 * ÁÖ¹Îµî·Ï¹øÈ£ Check ÇÔ¼ö
 ******************************************************/
function checkSsn(first, last) {

    var a1 = first.substring(0, 1);
    var a2 = first.substring(1, 2);
    var a3 = first.substring(2, 3);
    var a4 = first.substring(3, 4);
    var a5 = first.substring(4, 5);
    var a6 = first.substring(5, 6);
    var check_digit = a1 * 2 + a2 * 3 + a3 * 4 + a4 * 5 + a5 * 6 + a6 * 7;
    var b1 = last.substring(0, 1);
    var b2 = last.substring(1, 2);
    var b3 = last.substring(2, 3);
    var b4 = last.substring(3, 4);
    var b5 = last.substring(4, 5);
    var b6 = last.substring(5, 6);
    var b7 = last.substring(6, 7);
    check_digit = check_digit + b1 * 8 + b2 * 9 + b3 * 2 + b4 * 3 + b5 * 4 + b6 * 5;

    check_digit = check_digit % 11;
    check_digit = 11 - check_digit;
    check_digit = check_digit % 10;

    if (check_digit != b7) {
        return false;
    }
    return true;
}

/******************************************************
 * ³¯Â¥ Check ÇÔ¼ö
 ******************************************************/
function checkDate(year, month, day) {

    if (checkYear(year) == false) {
        return false;
    }

    if (checkMonth(month) == false) {
        return false;
    }

    if (checkDay(day) == false) {
        return false;
    }

    var varYear  = Number(year);
    var varMonth = Number(month);
    var varDay   = Number(day);

    if (varDay > daysInMonth[varMonth]) {
        return false;
    }

    if (varMonth == 2 && varDay > daysInFebrary(varYear)) {
        return false;
    }

    return true;
}

function checkYear(year) {
    if (year == '') {
        return false;
    }
    if (isNumber(year) == false) {
        return false;
    }
    var varYear = Number(year);
    if (varYear < 1889 || varYear > 2100) {
        return false;
    }
    return true;
}

function checkMonth(month) {
    if (month == '') {
        return false;
    }
    if (isNumber(month) == false) {
        return false;
    }
    var varMonth = Number(month);
    if (varMonth < 1 || varMonth > 12) {
        return false;
    }
    return true;
}

function checkDay(day) {
    if (day == '') {
        return false;
    }
    if (isNumber(day) == false) {
        return false;
    }
    var varDay = Number(day);
    if (varDay < 1 || varDay > 31) {
        return false;
    }
    return true;
}

var daysInMonth = new Array(13);
daysInMonth[1]  = 31;
daysInMonth[2]  = 29;
daysInMonth[3]  = 31;
daysInMonth[4]  = 30;
daysInMonth[5]  = 31;
daysInMonth[6]  = 30;
daysInMonth[7]  = 31;
daysInMonth[8]  = 31;
daysInMonth[9]  = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function daysInFebrary(year) { 
    return (year % 4 == 0 && (!(year % 100 == 0) || (year % 400 == 0)) ? 29 : 28); 
}


/******************************************************
 * ÁÖ¹Îµî·Ï¹øÈ£ÀÇ ¾Õ6ÀÚ¸®¿Í µÚ7ÀÚ¸®°¡ ´Ù¸¥ ÇÊµåÀÏ¶§, ÇÏ³ª·Î ÇÕÄ£ ssn ÇÊµå »ý¼º
 ******************************************************/
function getSsn(FormObject, groupValue) {
    var varLength = FormObject.elements.length;
    var ssn1Value = "";
    var ssn2Value = "";

    for (var i = 0; i < varLength; i++) {
        var obj   = FormObject.elements[i];
        var value = obj.value;
        var kind  = obj.kind;
        var group = obj.group;
        
        if (group == groupValue) {
            if      (kind == "ssn1")  ssn1Value = value;
            else if (kind == "ssn2")  ssn2Value = value;

            if (!(ssn1Value == "" || ssn2Value == "")) {
                return ssn1Value + ssn2Value;
            }
        }
    }

    return "";
}


/******************************************************
 * ³¯Â¥ÀÇ ¿¬, ¿ù, ÀÏÀÌ °¢°¢ ´Ù¸¥ ÇÊµåÀÏ¶§, ÇÏ³ª·Î ÇÕÄ£ date ÇÊµå »ý¼º
 ******************************************************/
function getDate(FormObject, groupValue) {
    var varLength = FormObject.elements.length;
    var yearValue  = "";
    var monthValue = "";
    var dayValue   = "";

    for (var i = 0; i < varLength; i++) {
        var obj   = FormObject.elements[i];
        var value = obj.value;
        var kind  = obj.kind;
        var group = obj.group;
        
        if (group == groupValue) {
            if      (kind == "year" )  yearValue  = value;
            else if (kind == "month")  monthValue = value;
            else if (kind == "day"  )  dayValue   = value;

            if (!(yearValue == "" || monthValue == "" || dayValue == "")) {
                return yearValue + monthValue + dayValue;
            }
        }
    }

    return "";
}

/******************************************************
 * ³¯Â¥ ºñ±³ (obj1Àº obj2º¸´Ù Ç×»ó ÀÌ¸¥ ³¯Â¥°¡ µé¾î°¡°Ô ÇÏ´Â Ã¼Å©)
 ******************************************************/
function compareDate(obj1, obj2){
    var varReturn = false;

    if (isDate(obj1, obj1.value, 1) && isDate(obj2, obj2.value, 1)) {


        var sep1 = obj1.sep;
        var sep2 = obj2.sep;

        var varField1 = "";
        var varField2 = "";

        if (sep1 == undefined || sep1 == "") {
            varField1 = obj1.value.substring(0,4)+obj1.value.substring(4,6)+obj1.value.substring(6);
        } else {
            var varObj1 = obj1.value.split(sep1);

            varField1 = varObj1[0]+varObj1[1]+varObj1[2];
        }

        if (sep2 == undefined || sep2 == "") {
            varField2 = obj2.value.substring(0,4)+obj2.value.substring(4,6)+obj2.value.substring(6);
        } else {
            var varObj2 = obj2.value.split(sep2);

            varField2 = varObj2[0]+varObj2[1]+varObj2[2];
        }

        if (Number(varField1) < Number(varField2)){
            varReturn = true;
        }

    }
    return varReturn;
}

