$.fn.validateError = function(str){
    this.addClass("warn-validate");
    return this.after('<div class="validate-error-message">' + str + '</div>');
}

$.fn.validateErrorOnly = function(){
    this.addClass("warn-validate");
    return this;
}

$.fn.validateOnlyError = function(str){
    return this.after('<div class="validate-error-message">' + str + '</div>');
}

$.fn.validateReset = function(){
    $(".warn-validate").removeClass("warn-validate");
    $(".validate-error-message").remove();
    return this;
}


$(function(){
    var jvali = {};

    // イベントハンドラの追加
    jvali.target = $("#mailFrm");

    // フォームのサブミット
    $(jvali.target).submit(function(){
        return jvali.check();
    });

    // 送信ボタン
    $("#formSend").click(function(){
        $(jvali.target).submit();
    });

    // リセットボタン
    $("#formReset").click(function(){
        if (window.confirm('入力内容をリセットしてもよろしいですか？')) {
            jvali.reset();
            document.getElementById('mailFrm').reset();
        }

        return false;
    });


    jvali.reset = function() {
        $(jvali.target).validateReset();
    }

    jvali.check = function() {
        $(jvali.target).validateReset();

        $("input.required").each(function(){
            if (jvali.rules.empty($(this).val())) {
                $(this).validateError('必ず入力してください。');
            }
        });

        $("textarea.required").each(function(){
            if (jvali.rules.empty($(this).val())) {
                $(this).validateError('必ず入力してください。');
            }
        });

        $("select.required").each(function(){
            if (jvali.rules.empty($(this).val())) {
                $(this).validateError('必ず選択してください。');
            }
        });


        $("input.validate-kana").each(function(){
            if (jvali.rules.kana($(this).val())) {
                $(this).validateError('全角カタカタで入力してください。');
            }
        });

        $("input.validate-alpha").each(function(){
            if (jvali.rules.alpha($(this).val())) {
                $(this).validateError('半角アルファベットで入力してください。');
            }
        });

        $("input.validate-zip").each(function(){
            if (jvali.rules.zip($(this).val())) {
                $(this).validateError('半角数字と半角ハイフン“-”で7桁の郵便番号を入力してください。');
            }
        });

        $("input.validate-tel").each(function(){
            if (jvali.rules.num_($(this).val())) {
                $(this).validateError('半角数字と半角ハイフン“-”で入力してください。');
            }
        });

        $("input.validate-telno").each(function(){
            if (jvali.rules.telno($(this).val())) {
                $(this).validateError('半角数字で入力してください。');
            }
        });

        $("input.validate-mail").each(function(){
            if (jvali.rules.mail($(this).val())) {
                $(this).validateError('形式が不正です。半角英数で正しく入力してください。');
            }
        });

        $("input.validate-only-mail").each(function(){
            if (jvali.rules.mail($(this).val())) {
                $(this).validateError('形式が不正です。半角英数で正しく入力してください。');
            }
        });

        $("input.validate-mail-conf").each(function(){
            if (jvali.rules.mail($(this).val())) {
                $(this).validateError('形式が不正です。半角英数で正しく入力してください。');
            }
        });

        if ($("input.validate-mail-conf").val() != $("input.validate-mail").val()) {
            $("input.validate-mail-conf").validateError('上と同じメールアドレスを入力してください。');
        }

        $("input.validate-mail_or_no").each(function(){
            if (jvali.rules.mail_or_no($(this).val())) {
                $(this).validateError('形式が不正です。半角英数で正しく入力してください。<br />メールアドレスがない方は「なし」と入力してく');
            }
        });
        $("input.validate-mail_or_no-conf").each(function(){
            if (jvali.rules.mail_or_no($(this).val())) {
                $(this).validateError('形式が不正です。半角英数で正しく入力してください。');
            }
        });

        if ($("input.validate-mail_or_no-conf").val() != $("input.validate-mail_or_no").val()) {
            $("input.validate-mail_or_no-conf").validateError('上と同じメールアドレスを入力してください。');
        }
/*
        if ($("input[@name=seikyuusya]:checked").size() == 0) {
            $("#seikyuusya_msg").validateOnlyError('必ず選択してください。');
        }

        if ($("input[@name=seikyuusya]:checked").val() == '6' && $("#seikyuusya_txt").val() == '') {
            $("#seikyuusya_txt").validateError('その他の場合は、必ず入力してください。');
        }

        if ($("input.know_chk_grp:checked").size() == 0) {
            $("#know_msg").validateOnlyError('必ず選択してください。');
        }
*/
        if ($("input.conf:checked").size() == 0) {
            $("#conf_box").validateOnlyError('同意をしてください。');
            $("input.conf").validateErrorOnly();
        }

        if ($(".warn-validate").size() > 0) {
            $(".warn-validate")[0].focus();
            return false;
        } else {
            return true;
        }
    }

    jvali.rules = {};


    jvali.rules.empty = function(str) {
        if ($.trim(str) == "") {
            return true;
        }
        return false;
    }

    jvali.rules.kana = function(str) {
        if (!(str == "" || str.match(/^[ァ-ン゛゜ー 　・]+$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.alpha = function(str) {
        if (!(str == "" || str.match(/^[0-9a-zA-Z\-\.\+ ]+$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.num_ = function(str) {
        if (!(str == "" || str.match(/^[\-\+0-9]+$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.num = function(str) {
        if (!(str == "" || str.match(/^[0-9]+$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.zip = function(str) {
        if (!(str == "" || str.match(/^[0-9]{3}\-?[0-9]{4}$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.telno = function(str) {
        if (!(str == "" || str.match(/^[0-9]{1,5}$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.mail = function(str) {
        if (!(str == "" || str.match(/^[\w\-\.]{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.mail_or_no = function(str) {
        if (!(str == "" || str == "なし" || str.match(/^[\w\-\.]{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/))) {
            return true;
        }
        return false;
    }

    jvali.rules.hira = function(str) {
        if (!(str == "" || str.match(/^[ぁ-ん゛゜ー 　・]+$/))) {
            return true;
        }
        return false;
    }
});
