// Æû °ËÁõ ÇÔ¼ö
function checkForm(f) {
    var fLen = f.elements.length;
    var fObj;   // Æû ¿ä¼Ò
    var fTyp;   // Æû ¿ä¼Ò Type
    var fVal;   // Æû ¿ä¼Ò Value
    var fMsg;   // °æ°í ¸Þ½ÃÁö ¼Ó¼º
    var fNum;   // ¼ýÀÚ¸¸ ÀÔ·Â ¼Ó¼º
    var fMax;   // ÃÖ´ë ±æÀÌ ÁöÁ¤
    var fMin;   // ÃÖ¼Ò ±æÀÌ ÁöÁ¤
    var fMxN;   // ÃÖ´ë°ª ÁöÁ¤
    var fMnN;   // ÃÖ¼Ò°ª ÁöÁ¤
    var fMal;   // ¸ÞÀÏ FORMAT

    for (i=0;i<fLen;i++) {
        fObj = f.elements[i];
        fTyp = toUpperCase(fObj.getAttribute("type"));
        fVal = fObj.getAttribute("value");
        fMsg = fObj.getAttribute("msg");        // °æ°í ¸Þ½ÃÁö
        fNum = fObj.getAttribute("chknum");     // ¼ýÀÚ¸¸ ±âÀÔ °¡´ÉÇÏµµ·Ï
        fMax = fObj.getAttribute("maxlen");     // ÃÖ´ë ÀÔ·Â±ÛÀÚ¼ö Á¦ÇÑ
        fMin = fObj.getAttribute("minlen");     // ÃÖ¼Ò ÀÔ·Â±ÛÀÚ¼ö Á¦ÇÑ
        fMxN = fObj.getAttribute("maxnum");     // ÃÖ´ë ¼ýÀÚ Á¦ÇÑ
        fMnN = fObj.getAttribute("minnum");     // ÃÖ¼Ò ¼ýÀÚ Á¦ÇÑ
        fMal = fObj.getAttribute("chkmail");    // ÀÌ¸ÞÀÏ Ã¼Å©
        
        if (fMsg != null && (fTyp == "TEXT" || fTyp == "HIDDEN" || fTyp == "TEXTAREA" || fTyp == "PASSWORD") && fVal.replace(/ /gi,"") == "") {
            alert(fMsg + " ÀÔ·ÂÇØ ÁÖ¼¼¿ä");
            if (fTyp != "HIDDEN") {fObj.focus();}
            return false;
        }
        if (fMsg != null && (fTyp == "SELECT-ONE" || fTyp == "SELECT-MULTIPLE") && fVal =="") {
            alert(fMsg + " ¼±ÅÃÇØ ÁÖ¼¼¿ä");
            fObj.focus(); return false;
        }
        if (fMsg != null && (fTyp == "RADIO" || fTyp == "CHECKBOX") && checkChecked(fObj) == false) {
            alert(fMsg + " ¼±ÅÃÇØ ÁÖ¼¼¿ä");
            fObj.focus(); return false;
        }
        if (fNum != null && isNaN(fVal)) {
            alert("¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ ÁÖ¼¼¿ä");
            fObj.focus(); return false;
        }
        if (fMax != null && fMax < getLen(fVal)) {
            alert("ÀÔ·ÂµÈ ±ÛÀÚ¼ö°¡ "+fMax+"ÀÚº¸´Ù ÀÛ¾Æ¾ßÇÕ´Ï´Ù.\n(¿µ¹® "+fMax+"ÀÚ, ÇÑ±Û "+Math.floor(fMax/2)+"ÀÚ ±îÁö °¡´ÉÇÕ´Ï´Ù.)");
            fObj.focus(); return false;
        }
        if (fMin != null && fMin > getLen(fVal)) {
            alert("ÀÔ·ÂµÈ ±ÛÀÚ¼ö°¡ "+fMax+"ÀÚº¸´Ù Ä¿¾ßÇÕ´Ï´Ù.");
            fObj.focus(); return false;
        }
        if (fMxN != null && parseInt(fMxN) < parseInt(fVal)) {
            alert("ÀÔ·ÂµÈ ¼ýÀÚ´Â "+fMxN+"º¸´Ù ÀÛ¾Æ¾ßÇÕ´Ï´Ù.");
            fObj.focus(); return false;
        }
        if (fMnN != null && parseInt(fMnN) > parseInt(fVal)) {
            alert("ÀÔ·ÂµÈ ¼ýÀÚ´Â "+fMnN+"º¸´Ù Ä¿¾ßÇÕ´Ï´Ù.");
            fObj.focus(); return false;
        }
        if (fMal != null && checkEmail(fVal) == false && fVal != "") {
            alert("ÀÌ¸ÞÀÏ ÁÖ¼Ò°¡ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
            fObj.focus(); return false;
        }
    }
    return true;
}

// Æû¿¡ ÇØ´çÇÏ´Â ÄÁÆ®·ÑµéÀÇ ±âº»°ª ½±°Ô ¼ÂÆÃÇØ ÁÖ±â
function initForm(f)    {
    var nLen;   // form ¿ä¼ÒÀÇ °¹¼ö
    var ival;   // °¢ ¿ä¼ÒÀÇ default value °ª Áï! ÃÊ±âÈ­ÇÏ°íÀÚ ÇÏ´Â°ª
    var fTyp;   // form ¿ä¼ÒÀÇ Å¸ÀÔ(select, radio, checkbox...)

    for (var i = 0; i < f.elements.length; i++) {
        fTyp = toUpperCase(f.elements[i].type);
        ival = f.elements[i].ival;

        if (ival && fTyp == "SELECT-ONE") {
            nLen = f.elements[i].options.length;
            for (var j = 0; j < nLen; j++) {
                if (f.elements[i].options[j].value == ival)
                    f.elements[i].options[j].selected = true;
            }
        }
        if (fTyp == "SELECT-MULTIPLE") {
            nLen = f.elements[i].options.length;
            for (var j = 0; j < nLen; j++) {
                if (f.elements[i].options[j].value == f.elements[i].options[j].ival)
                    f.elements[i].options[j].selected = true;
            }
        }
        if (ival && (fTyp == "RADIO" || fTyp == "CHECKBOX")) {
            if (f.elements[i].value == ival)
                f.elements[i].checked = true;
        }
    }
    return true;
}
// ¹è¿­ ¿ä¼ÒÀÏ °æ¿ì checked µÈ°ÍÀÌ ÀÖ´ÂÁö È®ÀÎ
function checkChecked(obj) {
    var fname = obj.form.name;
    var objnm = obj.name;
    var oElem = eval(fname+"."+objnm);
    var ret = false;

    if (typeof(oElem.length) == "undefined") {
        if (oElem.checked) {
            ret = true;
        }
    } else {
        for (var i=0;i<oElem.length;i++) {
            if (oElem[i].checked) {
                ret = true;
            }
        }
    }
    return ret;
}
// ÀÌ¸ÞÀÏ À¯È¿¼º Ã¼Å©
function checkEmail(str){
    var reg = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
    if (str.search(reg) != -1) {
        return true;
    }
    return false;
}
// ¹®ÀÚ ±æÀÌ ¹ÝÈ¯ (¿µ¹® 1byte, ÇÑ±Û 2byte °è»ê)
function getLen(str) {
    var len;
    var temp;

    len = str.length;
    var tot_cnt = 0;

    for(k=0;k < len;k++){
        temp = str.charAt(k);
        if(escape(temp).length > 4)
            tot_cnt += 2;
        else
            tot_cnt++;
    }
    return tot_cnt;
}
// ´ë¹®ÀÚ º¯È¯ ex) toUpperCase(¹®ÀÚ)
function toUpperCase(str) {
    var ret;
    str != null ? ret = str.toUpperCase() : ret = "";
    return ret;
}   

function JuminCheck(jumin1, jumin2){
	check = false;
	total = 0;
	temp = new Array(13);

	for(i=1; i<=6; i++)
		temp[i] = jumin1.charAt(i-1);
	for(i=7; i<=13; i++)
		temp[i] = jumin2.charAt(i-7);
	
	for(i=1; i<=12; i++){
		k = i + 1;
		if(k >= 10)
			k = k % 10 + 2;
		total = total + temp[i] * k;
	}
	mm = temp[3] + temp[4];
	dd = temp[5] + temp[6];

	totalmod = total % 11;
	chd = 11 - totalmod;
	if(chd == temp[13] && mm < 13 && dd < 32 && (temp[7]==1 || temp[7]==2))
		check=true;
	return check;
}





/*
 * Validation Library
 *
 * @version 1.1
 * @author BAEK, CHANG YOL http://cybaek.com/
 * @date 2003.11.26
 */
var ERRMSG_DEFAULT_SCOPE = "°ªÀÇ ¹üÀ§°¡ Àû´çÇÏÁö ¾Ê½À´Ï´Ù. (ÃÖ¼Ò: $MinScope, ÃÖ´ë: $MaxScope)";
var ERRMSG_DEFAULT_LEN = "ÀÔ·ÂÇÑ °ªÀÇ ±æÀÌ°¡ Àû´çÇÏÁö ¾Ê½À´Ï´Ù. (ÃÖ¼Ò: $MinLen, ÃÖ´ë: $MaxLen)";
var ERRMSG_DEFAULT_CHECKFUNC = "ÀÔ·Â°ªÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù.";
var ERRMSG_DEFAULT_FORBIDDEN_CHARS = "$ForbiddenChars´Â ±ÝÁö ¹®ÀÚÀÌ°í, $FoundChar°¡ ¹ß°ßµÇ¾ú½À´Ï´Ù."
var ERRMSG_DEFAULT_REGEXP = "ÀÔ·Â°ªÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù."
var ERRMSG_NUMBER = "¼ýÀÚ¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.";

function checkValue(f){
    var j = f.elements.length
    var i;
    var re;
    var curr;
    
    for (i=0; i<j; i++)
    {
		curr = f.elements[i];
        if (typeof(curr.V) == "undefined") continue;
		
		preprocess(curr);

		if (!checkLength(curr) ||
			!checkScope(curr) ||
			!checkWithFunc(curr) ||
			!checkWithRegExp(curr)){
			return false;
		}
		if (!checkForbiddenChars(curr)){
			return false;
		}
    }

    return true;
}

function preprocess(curr){
	removeExtremeSpace(curr);
}

function removeExtremeSpace(curr){
	if (typeof(curr.Trim) != "undefined"){
		if (curr.Trim.indexOf("L") != -1){
			curr.value = ltrim(curr.value);
		}
		if (curr.Trim.indexOf("R") != -1){
			curr.value = rtrim(curr.value);
		}
	}
}

// @author: brad@vermontsoftware.com
function ltrim(str){
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      // We have a string with leading blank(s)...

      var j=0, i = s.length;

      // Iterate from the far left of string until we
      // don't have any more whitespace...
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      // Get the substring from the first non-whitespace
      // character to the end of the string...
      s = s.substring(j, i);
   }
   return s;
}

// @author: brad@vermontsoftware.com
function rtrim(str){
   // We don't want to trip JUST spaces, but also tabs,
   // line feeds, etc.  Add anything else you want to
   // "trim" here in Whitespace
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      // We have a string with trailing blank(s)...

      var i = s.length - 1;       // Get length of string

      // Iterate from the far right of string until we
      // don't have any more whitespace...
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;


      // Get the substring from the front of the string to
      // where the last non-whitespace character is...
      s = s.substring(0, i+1);
   }

   return s;
}

// @author: brad@vermontsoftware.com
function trim(str){
   return rtrim(ltrim(str));
}


function checkLength(curr){
	var checkLen = true;
	var minLen, maxLen, length;
	minLen = parseInt(curr.MinLen);
	maxLen = parseInt(curr.MaxLen);
	if (isNaN(minLen) || isNaN(maxLen)){
		return true;
	}

	length = parseInt(b_length(curr.value));
	if ((length<minLen) || (length>maxLen)){
		curr.focus();
		if (typeof(curr.LenErrMsg) == "undefined"){
			curr.LenErrMsg = ERRMSG_DEFAULT_LEN;
		}
		var errMsg = curr.LenErrMsg;
		errMsg = errMsg.replace("$MinLen", curr.MinLen);
		errMsg = errMsg.replace("$MaxLen", curr.MaxLen);
		alert(errMsg);
		return false;
	}

	return true;
}

function checkScope(curr){
	var checkScope = true;
	var minScope, maxScope;

	minScope = parseInt(curr.MinScope);
	maxScope = parseInt(curr.MaxScope);
	if (isNaN(minScope) || isNaN(maxScope)){
		return true;
	}
	
	if (isNaN(curr.value)){
		curr.focus();
		alert(ERRMSG_NUMBER);
		return false;
	}
	
	if ((curr.value > maxScope) || (curr.value < minScope)){
		curr.focus();
		if (typeof(curr.ScopeErrMsg) == "undefined"){
			curr.ScopeErrMsg = ERRMSG_DEFAULT_SCOPE;
		}
		var errMsg = curr.ScopeErrMsg;
		errMsg = errMsg.replace("$MinScope", curr.MinScope);
		errMsg = errMsg.replace("$MaxScope", curr.MaxScope);
		alert(errMsg);
		return false;
	}

	return true;
}

function checkWithFunc(curr){
	var result;

	if (typeof(curr.CheckFunc) != "undefined"){
		try{
			result = eval(curr.CheckFunc+"(curr, curr.value);");
		}
		catch(e){
			alert("ÀÔ·Â°ª °Ë»ç ÇÔ¼ö " + curr.CheckFunc + "(src, value) ¿¡ ¿À·ù°¡ ÀÖ½À´Ï´Ù.");
			result = false;
		}
		if (!result){
			curr.focus();
			if (typeof(curr.CheckFuncErrMsg) == "undefined"){
				curr.CheckFuncErrMsg = ERRMSG_DEFAULT_CHECKFUNC;
			}
			alert(curr.CheckFuncErrMsg);
			return false;
		}
	}
	return true;
}

function checkForbiddenChars(curr){
	if (typeof(curr.ForbiddenChars) == "undefined"){
		return true;
	}

	var length, i, currChar, value;
	length = curr.value.length;
	value = curr.value;

	for(i=0; i<length; i++){
		currChar = value.charAt(i);
		if (curr.ForbiddenChars.indexOf(currChar) != -1){
			curr.focus();
			if (typeof(curr.ForbiddenCharsErrMsg) == "undefined"){
				curr.ForbiddenCharsErrMsg = ERRMSG_DEFAULT_FORBIDDEN_CHARS;
			}
			var errMsg = curr.ForbiddenCharsErrMsg;
			errMsg = errMsg.replace("$ForbiddenChars", curr.ForbiddenChars);
			errMsg = errMsg.replace("$FoundChar", currChar);
			alert(errMsg);
			return false;
		}
	}
	return true;
}

function checkWithRegExp(curr){
	if (typeof(curr.RegExp) == "undefined"){
		return true;
	}

	var re = new RegExp(curr.RegExp, "gi");
	if (!re.test(curr.value)){
		curr.focus();
		if (typeof(curr.RegExpErrMsg) == "undefined"){
			curr.RegExpErrMsg = ERRMSG_DEFAULT_REGEXP;
		}
		var errMsg = curr.RegExpErrMsg;
		errMsg = errMsg.replace("$RegExp", curr.RegExp);
		alert(errMsg);
		return false;
	}

	return true;
}

function b_length(str){
	var iRet = 0;
	var iLen = str.length;
	
	for (i=0; i<iLen; i++){
		if ((str.charCodeAt(i)<0) || (str.charCodeAt(i)>127)){
			iRet = iRet + 1;
		}
	}
	
	return (iLen + iRet);
}
