    $.validator.setDefaults({
    });

    $().ready(function() {
        $('.capitalize').capitalize();

        $("select[name=amount]").change(function() {
            if ($(this).val() == 'anders') {
                $('#otherPanel').fadeIn();
            } else {
                $('#otherPanel').fadeOut();
            }
        });

        jQuery.validator.addMethod("zipcode", function(value, element) {
            return this.optional(element) || value.match(/(^\d{4}\s?[ABCEGHJKLMNPRSTVXYabceghjklmnpstvxy]{2}$)/);
        });

        jQuery.validator.addMethod("phonenumber", function(value, element) {
            // this.optional(element) work around for dependency mismatch;
            return $.trim(element.value).length == 0 || value.match(/(^[1234567890-]{10,11}$)/);
        });

        jQuery.validator.addMethod("accountnumber", function(value, element) {
            return this.optional(element) || value.match(/(^[1234567890 ]{2,11}$)/);
        });

        jQuery.validator.addMethod("birthdate", function(value, element) {
            // this.optional(element) work around for dependency mismatch;
            return $.trim(element.value).length == 0 || value.match(/(^\d{1,2}-\d{1,2}-\d{4}$)/);
        });

        $("input[name=initials]").keyfilter(/[a-zA-Z.]/);
        $("input[name=initials]").capitalize();

        $("input[name=middlename]").keyfilter(/[a-z- ]/);

        // $("input[name=zipcode]").keyfilter(/(^\d{4}\s?[a-zA-Z]{2}$)/);
        $("input[name=zipcode]").capitalize();

        $("input[name=number]").keyfilter(/[0-9]/);
        $("input[name=accountnumber]").keyfilter(/[0-9]/);
        $("input[name=email]").keyfilter(/[a-z0-9_\.\-@]/i);
        $("input[name=phonenumber]").keyfilter(/[0-9]/);
        
        $("input[name=zipcode]").blur(function(e) {
            if ($(this).attr('old') == $(this).val() || $(this).val() == '')
                return;

            value = $(this).val().replace(/\s*/g, '').toUpperCase();

            jQuery.ajax({
                type: "GET",
                url: "/zipcode.json?" + value,
                dataType: "json",
                data: null,
                success: function(data) {
                    $("input[name=address]").val(data.Street);
                    $("input[name=city]").val(data.City);
                    $('input[name=zipcode]').attr('old', value);
                    $('input[name=zipcode]').val(value);
                },
                error: function(data) {
                    $("input[name=address]").val('');
                    $("input[name=city]").val('');
                }
            });
        });


        // validate signup form on keyup and submit
        $("#form").validate({
            rules: {
                amountOther: {
                    required: function(e) { return ($("select[name=amount]").val() == 'anders') }
                },
                subject: {
                    required: true
                },
                firstname: {
                    required: true
                },
                lastname: {
                    required: true
                },
                motivation: {
                    required: true
                },
  		contact: {
                    required: true
                },
		remark1: {
                    required: true
                },
                birthdate: {
                    birthdate: true
                },
                zipcode: {
                    required: true,
                    zipcode: true
                },
                address: {
                    required: true
                },
                number: {
                    required: true
                },
                city: {
                    required: true
                },
                employees: {
                    required: true
                },
                company: {
                    required: true
                },
                jobtitle: {
                    required: true
                },
                branche: {
                    required: true
                },
                email: {
                    required: true,
                    email: true
                },
                phonenumber: {
                    required: true,
                    phonenumber: true
                }
            },
            messages: {
                amountOther: {
                    required: 'Bedrag is niet ingevuld.'
                },
                subject: {
                    required: 'Onderwerp is niet ingevuld.'
                },
                firstname: {
                    required: 'Voorletters zijn niet ingevuld.'
                },
                lastname: {
                    required: 'Achternaam is niet ingevuld.'
                },
		remark1: {
                    required: 'Opmerking is niet ingevuld.'
                },
                motivation: {
                    required: 'Motivatie is niet ingevuld.'
                },
                birthdate: {
                    birthdate: 'Geboortedatum is ongeldig.'
                },
                zipcode: {
                    required: 'Postcode is niet ingevuld.',
                    zipcode: 'Postcode is ongeldig, gebruik 0000AA'
                },
                address: {
                    required: 'Adres is niet ingevuld.'
                },
                number: {
                    required: 'Huisnummer is niet ingevuld.'
                },
                city: {
                    required: 'Woonplaats is niet ingevuld.'
                },
                employees: {
                    required: 'Aantal medewerkers is niet ingevuld.'
                },
                branche: {
                    required: 'Branche is niet ingevuld.'
                },
                company: {
                    required: 'Bedrijfsnaam is niet ingevuld.'
                },
                jobtitle: {
                    required: 'Functie is niet ingevuld.'
                },
		contact: {
                    required: 'Contactpersoon is verplicht.'
                },
                email: {
                    required: 'Email is niet ingevuld.',
                    email: 'Emailadres is niet geldig.'
                },
                phonenumber: {
                    required: 'Telefoonnummer is verplicht.',
                    phonenumber: 'Telefoonnummer is ongeldig.'
                }
            },
            onclick: function(element) {
                // click on selects, radiobuttons and checkboxes
                if (element.name in this.submitted || !this.optional(element)) {
                    this.element(element);
                }
            },
            highlight: function(element, errorClass) {
                $(element).addClass(errorClass);
            },
            unhighlight: function(element, errorClass) {
                $(element).removeClass(errorClass);
            },
            success: function(label) {
            }
        });

        $.validator.prototype.showLabel = function(element, message) {
            var label = $(element.form).find("label.validation[for=" + element.name + "]");

            if (label.length) {
                label.removeClass("valid").addClass("invalid");
                label.html(message);
            }

            if (!message) {
                label.removeClass("invalid").addClass("valid");
                label.html('&nbsp;');
            }
        }

    });

