var wrestMsg = "";
var wrestFld = null;
var wrestFldDefaultColor = "";
//var wrestFldBackColor = "#ff3061";

// subject �띿꽦媛믪쓣 �살뼱 return, �놁쑝硫� tag�� name�� �섍�
function wrestItemname(fld)
{
    //return fld.getAttribute("title") ? fld.getAttribute("title") : ( fld.getAttribute("alt") ? fld.getAttribute("alt") : fld.name );
    var id = fld.getAttribute("id");
    var labels = document.getElementsByTagName("label");
    var el = null;

    for(i=0; i<labels.length; i++) {
        if(id == labels[i].htmlFor) {
            el = labels[i];
            break;
        }
    }

    if(el != null) {
        var text =  el.innerHTML.replace(/[<].*[>].*[<]\/+.*[>]/gi, "");

        if(text == '') {
            return fld.getAttribute("title") ? fld.getAttribute("title") : ( fld.getAttribute("placeholder") ? fld.getAttribute("placeholder") : fld.name );
        } else {
            return text;
        }
    } else {
        return fld.getAttribute("title") ? fld.getAttribute("title") : ( fld.getAttribute("placeholder") ? fld.getAttribute("placeholder") : fld.name );
    }
}

// �묒そ 怨듬갚 �놁븷湲�
function wrestTrim(fld)
{
    var pattern = /(^\s+)|(\s+$)/g; // \s 怨듬갚 臾몄옄
    return fld.value.replace(pattern, "");
}

// �꾩닔 �낅젰 寃���
function wrestRequired(fld)
{
    if (wrestTrim(fld) == "") {
        if (wrestFld == null) {
            // ���됲듃諛뺤뒪�� 寃쎌슦�먮룄 �꾩닔 �좏깮 寃��ы빀�덈떎.
            wrestMsg = wrestItemname(fld) + " : �꾩닔 "+(fld.type=="select-one"?"�좏깮":"�낅젰")+"�낅땲��.\n";
            wrestFld = fld;
        }
    }
}

// 源��좎슜 2006.3 - �꾪솕踰덊샇(�대���) �뺤떇 寃��� : 123-123(4)-5678
function wrestTelNum(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/;
    if(!pattern.test(fld.value)){
        if(wrestFld == null){
            wrestMsg = wrestItemname(fld)+" : �꾪솕踰덊샇 �뺤떇�� �щ컮瑜댁� �딆뒿�덈떎.\n\n�섏씠��(-)�� �ы븿�섏뿬 �낅젰�섏꽭��.\n";
            wrestFld = fld;
            fld.select();
        }
    }
}

// �대찓�쇱<�� �뺤떇 寃���
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";
            wrestFld = fld;
        }
    }
}

// �쒓��몄� 寃��� (�먯쓬, 紐⑥쓬 議고빀�� �쒓�留� 媛���)
function wrestHangul(fld)
{
    if (!wrestTrim(fld)) return;

    //var pattern = /([^媛�-��\x20])/i;
    var pattern = /([^媛�-��\x20])/;

    if (pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + ' : �쒓��� �꾨떃�덈떎. (�먯쓬, 紐⑥쓬 議고빀�� �쒓�留� 媛���)\n';
            wrestFld = fld;
        }
    }
}

// �쒓��몄� 寃���2 (�먯쓬, 紐⑥쓬留� �덈뒗 �쒓��� 媛���)
function wrestHangul2(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /([^媛�-�c꽦-�롢뀖-��\x20])/i;
    //var pattern = /([^媛�-�c꽦-�롢뀖-��\x20])/;

    if (pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + ' : �쒓��� �꾨떃�덈떎.\n';
            wrestFld = fld;
        }
    }
}

// �쒓�,�곷Ц,�レ옄�몄� 寃���3
function wrestHangulAlNum(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /([^媛�-��\x20^a-z^A-Z^0-9])/i;

    if (pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + ' : �쒓�, �곷Ц, �レ옄媛� �꾨떃�덈떎.\n';
            wrestFld = fld;
        }
    }
}

// �쒓�,�곷Ц �몄� 寃���
function wrestHangulAlpha(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /([^媛�-��\x20^a-z^A-Z])/i;

    if (pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + ' : �쒓�, �곷Ц�� �꾨떃�덈떎.\n';
            wrestFld = fld;
        }
    }
}

// �レ옄�몄�寃���
// 諛곕�瑜멸�轅��대떂 異붽� (http://dasir.com) 2003-06-24
function wrestNumeric(fld)
{
    if (fld.value.length > 0) {
        for (i = 0; i < fld.value.length; i++) {
            if (fld.value.charAt(i) < '0' || fld.value.charAt(i) > '9') {
                wrestMsg = wrestItemname(fld) + " : �レ옄媛� �꾨떃�덈떎.\n";
                wrestFld = fld;
            }
        }
    }
}

// �곷Ц�� 寃���
// 諛곕�瑜멸�轅��대떂 異붽� (http://dasir.com) 2003-06-24
function wrestAlpha(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /(^[a-zA-Z]+$)/;

    if (!pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + " : �곷Ц�� �꾨떃�덈떎.\n";
            wrestFld = fld;
        }
    }
}

// �곷Ц�먯� �レ옄 寃���
// 諛곕�瑜멸�轅��대떂 異붽� (http://dasir.com) 2003-07-07
function wrestAlNum(fld)
{
   if (!wrestTrim(fld)) return;

   var pattern = /(^[a-zA-Z0-9]+$)/;

   if (!pattern.test(fld.value)) {
       if (wrestFld == null) {
           wrestMsg = wrestItemname(fld) + " : �곷Ц �먮뒗 �レ옄媛� �꾨떃�덈떎.\n";
           wrestFld = fld;
       }
   }
}

// �곷Ц�먯� �レ옄 洹몃━怨� _ 寃���
function wrestAlNum_(fld)
{
   if (!wrestTrim(fld)) return;

   var pattern = /(^[a-zA-Z0-9\_]+$)/;

   if (!pattern.test(fld.value)) {
       if (wrestFld == null) {
           wrestMsg = wrestItemname(fld) + " : �곷Ц, �レ옄, _ 媛� �꾨떃�덈떎.\n";
           wrestFld = fld;
       }
   }
}

// 理쒖냼 湲몄씠 寃���
function wrestMinLength(fld)
{
    if (!wrestTrim(fld)) return;

    var minlength = fld.getAttribute("minlength");

    if (wrestFld == null) {
        if (fld.value.length < parseInt(minlength)) {
            wrestMsg = wrestItemname(fld) + " : 理쒖냼 "+minlength+"湲��� �댁긽 �낅젰�섏꽭��.\n";
            wrestFld = fld;
        }
    }
}

// �대�吏� �뺤옣��
function wrestImgExt(fld)
{
    if (!wrestTrim(fld)) return;

    var pattern = /\.(gif|jpg|png)$/i; // jpeg �� �쒖쇅
    if(!pattern.test(fld.value)){
        if(wrestFld == null){
            wrestMsg = wrestItemname(fld)+" : �대�吏� �뚯씪�� �꾨떃�덈떎.\n.gif .jpg .png �뚯씪留� 媛��ν빀�덈떎.\n";
            wrestFld = fld;
            fld.select();
        }
    }
}

// �뺤옣��
function wrestExtension(fld, css)
{
    if (!wrestTrim(fld)) return;

    var str = css.split("="); // ext=?? <-- str[1]
    var src = fld.value.split(".");
    var ext = src[src.length - 1];

    if (wrestFld == null) {
        if (ext.toLowerCase() < str[1].toLowerCase()) {
            wrestMsg = wrestItemname(fld) + " : ."+str[1]+" �뚯씪留� 媛��ν빀�덈떎.\n";
            wrestFld = fld;
        }
    }
}

// 怨듬갚 寃��ы썑 怨듬갚�� "" 濡� 蹂���
function wrestNospace(fld)
{
    var pattern = /(\s)/g; // \s 怨듬갚 臾몄옄

    if (pattern.test(fld.value)) {
        if (wrestFld == null) {
            wrestMsg = wrestItemname(fld) + " : 怨듬갚�� �놁뼱�� �⑸땲��.\n";
            wrestFld = fld;
        }
    }
}

// submit �� �� �띿꽦�� 寃��ы븳��.
function wrestSubmit()
{
    wrestMsg = "";
    wrestFld = null;

    var attr = null;

    // �대떦�쇱뿉 ���� �붿냼�� 媛쒖닔留뚰겮 �뚮젮��
    for (var i=0; i<this.elements.length; i++) {
        var el = this.elements[i];

        // Input tag �� type �� text, file, password �쇰븣留�
        // ���됲듃 諛뺤뒪�쇰븣�� �꾩닔 �좏깮 寃��ы빀�덈떎. select-one
        if (el.type=="text" || el.type=="hidden" || el.type=="file" || el.type=="password" || el.type=="select-one" || el.type=="textarea") {
            if (el.getAttribute("required") != null) {
                wrestRequired(el);
            }

            if (el.getAttribute("minlength") != null) {
                wrestMinLength(el);
            }

            var array_css = el.className.split(" "); // class 瑜� 怨듬갚�쇰줈 �섎닎

            el.style.backgroundColor = wrestFldDefaultColor;

            // 諛곗뿴�� 湲몄씠留뚰겮 �뚮젮��
            for (var k=0; k<array_css.length; k++) {
                var css = array_css[k];
                switch (css) {
                    case "required"     : wrestRequired(el); break;
                    case "trim"         : wrestTrim(el); break;
                    case "email"        : wrestEmail(el); break;
                    case "hangul"       : wrestHangul(el); break;
                    case "hangul2"      : wrestHangul2(el); break;
                    case "hangulalpha"  : wrestHangulAlpha(el); break;
                    case "hangulalnum"  : wrestHangulAlNum(el); break;
                    case "nospace"      : wrestNospace(el); break;
                    case "numeric"      : wrestNumeric(el); break;
                    case "alpha"        : wrestAlpha(el); break;
                    case "alnum"        : wrestAlNum(el); break;
                    case "alnum_"       : wrestAlNum_(el); break;
                    case "telnum"       : wrestTelNum(el); break; // 源��좎슜 2006.3 - �꾪솕踰덊샇 �뺤떇 寃���
                    case "imgext"       : wrestImgExt(el); break;
                    default :
                        if (/^extension\=/.test(css)) {
                            wrestExtension(el, css); break;
                        }
                } // switch (css)
            } // for (k)
        } // if (el)
    } // for (i)

    // �꾨뱶媛� null �� �꾨땲�쇰㈃ �ㅻ쪟硫붿꽭吏� 異쒕젰�� �ъ빱�ㅻ� �대떦 �ㅻ쪟 �꾨뱶濡� ���
    // �ㅻ쪟 �꾨뱶�� 諛곌꼍�됱긽�� 諛붽씔��.
    if (wrestFld != null) {
        // 寃쎄퀬硫붿꽭吏� 異쒕젰
        alert(wrestMsg);

        if (wrestFld.style.display != "none") {
            var id = wrestFld.getAttribute("id");

            // �ㅻ쪟硫붿꽭吏�瑜� �꾪븳 element 異붽�
            var msg_el = document.createElement("strong");
            msg_el.id = "msg_"+id;
            msg_el.className = "msg_sound_only";
            msg_el.innerHTML = wrestMsg;
            wrestFld.parentNode.insertBefore(msg_el, wrestFld);

            var new_href = document.location.href.replace(/#msg.+$/, "")+"#msg_"+id;

            document.location.href = new_href;

            //wrestFld.style.backgroundColor = wrestFldBackColor;
            if (typeof(wrestFld.select) != "undefined")
                wrestFld.select();
            wrestFld.focus();
        }
        return false;
    }

    if (this.oldsubmit && this.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;
    }
}

// �쇳븘�� �먮룞寃���
$(document).ready(function(){
    // onload
    wrestInitialized();
});