jQuery(function($){
    
    $.validator.addMethod("lettersNumbers", function(value, element) {
        return this.optional(element) || /^[a-z0-9áéíóöőúüű]+$/i.test(value);
    }, "Username must contain only letters, numbers, or dashes.");
    
    $.validator.addMethod("notUnder14", function(value, element) {
        var $year = $('#nominee_dob_year'),
            $month = $('#nominee_dob_month'),
            $day = $('#nominee_dob_day'),
            a = 14, 
            d = new Date(($year.val()*1)+a, ($month.val()*1)-1, $day.val()*1).getTime(),
            now = new Date().getTime(),
            oldEnough = (now-d)>0;
        return oldEnough;
    }, "You must be older");
    
    function formValidation(form,rules,messages,invalidHandler,groups,submitHandler){
        if(form.length){
            form.validate({
                onfocusout: false,
                onkeyup: false,
                onclick: false,
                errorClass: 'inputError',
                wrapper: 'li',
                errorPlacement: function(error, element){
                    var par=element.parent();
                    var errorCnt=$('<ul class="formError client"></ul>').append(error);
                    if (par.is('td')) element.parents('table').after(errorCnt);
                    else if (element.attr('name').indexOf('city') > -1 ) element.parents('.inputBox').eq(0).append(errorCnt);
                    else if (element.attr('name')=='login_name' || element.attr('name')=='password') errorCnt.appendTo($('.remember'))
                    else if (par.is(':not(.inputBox)')) errorCnt.insertAfter(par.parent())
                    else element.parent().append(errorCnt);
                    element.blur();
                },
                groups: groups,
                rules: rules,
                messages: messages,
                invalidHandler: invalidHandler,
                submitHandler: submitHandler
            });
        }
    }
    
    $('form').submit(function(){
        if ($('ul.formError').filter(':not("client")').length) {
            $('ul.formError').filter(':not("client")').remove();
        }
    });
    
    
    formValidation(
        $('#loginForm'),
        {
            login_name: {
                required: true,
                maxlength: 250
            },
            password: 'required'
        },
        {
            login_name: {
                required: 'Hibás e-mail cím vagy jelszó!',
                maxlength: 'Hibás e-mail cím vagy jelszó!'
            },
            password: 'Hibás e-mail cím vagy jelszó!'
        },
        function(){},
        {
            login_name: 'login_name password'
        }
    );
    
    formValidation(
        $('#commentForm'),
        {
            comment_data: {
                required: true,
                maxlength: 500
            },
            nickname: {
                required: true,
                lettersNumbers: true,
                rangelength: [6,20]
            }
        },
        {
            comment_data: {
                required: 'Először írd ide a hozzászólásodat!',
                maxlength: 'Túl hosszú szöveget írtál be! Legfeljebb 500 karaktert írj!'
            },
            nickname: {
                required: 'A hozzászóláshoz válassz egy becenevet!',
                lettersNumbers: 'Ez a becenév nem lesz jó. Válassz másikat!',
                rangelength: 'Ez a becenév nem lesz jó. Válassz másikat!'
            }
        },
        function(){},
        {},
        function(form){
            form.submit();
        }
    );
    
    formValidation(
        $('#torchrunningForm'),
        {
            nominee_is_accept: {
                required: true
            },
            nominee_is_old_enough: {
                required: true
            },
            nominee_name: {
                required: true,
                maxlength: 250
            },
            nominee_email: {
                required: true,
                email: true
            },
            nominee_email_again: {
                required: true,
                equalTo: '#nominee_email'
            },
            nominee_dob_year: {
                required: true
            },
            nominee_dob_month: {
                required: true,
                notUnder14: true
            },
            nominee_dob_day: {
                required: true,
                notUnder14: true
            },
            nominee_student: {
                required: true
            },
            nominee_school: {
                required: true
            },
            nominee_story: {
                required: true,
                minlength: 100,
                maxlength: 1500
            },
            nominator_name: {
                required: true
            },
            nominator_email: {
                required: true,
                email: true
            },
            nominator_email_again: {
                required: true,
                equalTo: '#nominator_email'
            },
            nominator_phone: {
                required: true,
                minlength: 7,
                number: true
            },
            nominator_info_source: {
                required: true
            },
            nominator_is_agree: {
                required: true
            },
            nominator_is_consent: {
                required: true
            },
            captcha: {
                required: true
            }
        },
        {
            nominee_is_accept: {
                required: 'Csak akkor jelölhetsz valakit, ha ő hozzájárult.'
            },
            nominee_is_old_enough: {
                required: 'Csak olyan valakit jelölhetsz, aki megfelel ezeknek a feltételeknek.'
            },
            nominee_name: {
                required: 'Add meg a jelölted nevét!',
                maxlength: 'A jelölted neve túl hosszú!'
            },
            nominee_email: {
                required: 'Add meg a jelölted e-mail címét!',
                email: 'Valós e-mail címet adj meg!'
            },
            nominee_email_again: {
                required: 'Add meg a jelölted e-mail címét!',
                equalTo: 'Ugyanazt a címet add meg kétszer!'
            },
            nominee_dob_year: {
                required: 'Add meg, hogy mikor született a jelölted (év, hónap, nap)!',
                notUnder14: 'Csak olyat jelölhetsz, aki már elmúlt 14 éves!'
            },
            nominee_dob_month: {
                required: 'Add meg, hogy mikor született a jelölted (év, hónap, nap)!',
                notUnder14: 'Csak olyat jelölhetsz, aki már elmúlt 14 éves!'
            },
            nominee_dob_day: {
                required: 'Add meg, hogy mikor született a jelölted (év, hónap, nap)!',
                notUnder14: 'Csak olyat jelölhetsz, aki már elmúlt 14 éves!'
            },
            nominee_student: {
                required: 'Add meg, hogy a jelölted jár-e egyetemre/főiskolára!'
            },
            nominee_school: {
                required: 'Add meg, hogy hol tanul a jelölted!'
            },
            nominee_story: {
                required: 'Írd le a jelölted történetét!',
                minlength: 'Ennél részletesebben írd le a történetet!',
                maxlength: 'Legfeljebb 1500 karaktert írj (szóközökkel együtt)!'
            },
            nominator_name: {
                required: 'Add meg a nevedet!'
            },
            nominator_email: {
                required: 'Add meg az e-mail címedet!',
                email: 'Valós e-mail címet adj meg!'
            },
            nominator_email_again: {
                required: 'Add meg az e-mail címedet!',
                equalTo: 'Ugyanazt a címet add meg kétszer!'
            },
            nominator_phone: {
                required: 'Add meg a telefonszámodat!',
                minlength: 'Valós telefonszámod adj meg, csak számjegyekkel!',
                number: 'Valós telefonszámod adj meg, csak számjegyekkel!'
            },
            nominator_info_source: {
                required: 'Add meg, hogy honnan értesültél a jelölésről!'
            },
            nominator_is_agree: {
                required: 'Csak úgy jelölhetsz valakit, hogy a részvételi feltételeket elfogadod.'
            },
            nominator_is_consent: {
                required: 'Csak úgy jelölhetsz valakit, hogy a hozzájárulásodat adod.'
            },
            captcha: {
                required: 'Írd be a képen látható karaktereket!'
            }
        },
        function(){},
        {
            birthday: 'nominee_dob_year nominee_dob_month nominee_dob_day'
        }
    );
    
});
