$(document).ready(function() {
    var form = $('#registration_form');

    function get_date_parts() {
        return {
            year: $('#purchase_year').val(),
            month: $('#purchase_month').val(),
            day: $('#purchase_day').val()
        };
    }

    function valid_date() {
        var date_parts = get_date_parts();
        if ((date_parts.year > 0) &&
            (date_parts.month > 0) &&
            (date_parts.day > 0)) {
            // Ensure that the user hasn't selected eg. the 31st of February
            var date = new Date(date_parts.year,
                                date_parts.month - 1,
                                date_parts.day);
            if ((date.getFullYear() == date_parts.year) &&
                (date.getMonth() == date_parts.month - 1) &&
                (date.getDate() == date_parts.day)) {
                return true;
            }
        }
        return false;
    }

    function date_in_past() {
        var date_parts = get_date_parts();
        var date = new Date();
        var today = new Date();
        date.setFullYear(date_parts.year,
                         date_parts.month - 1,
                         date_parts.day);
        return (date <= today);
    }


    $.validator.addMethod('valid_date', valid_date,
                          'Please select a date before today');
    $.validator.addMethod('date_in_past', date_in_past,
                          'Please select a date before today');
    $.validator.addClassRules('purchase_date',
                              {valid_date: true, date_in_past: true});


    var slave_mac_rules = common.slave_mac_rules('#slave_mac1_input',
                                                 '#slave_mac2_input',
                                                 '#slave_mac3_input');

    form.validate({
        debug: false,
        errorPlacement: common.place_error,
        groups: {
            purchase_date: 'purchase_day purchase_month purchase_year',
            master_mac: 'master_mac1 master_mac2 master_mac3',
            slave_mac: 'slave_mac1 slave_mac2 slave_mac3'
        },
        rules: {
            slave_mac1: slave_mac_rules,
            slave_mac2: slave_mac_rules,
            slave_mac3: slave_mac_rules,
            unit1_odu: common.odu_sn_rules('#master_mac1_input'),
            unit2_odu: common.odu_sn_rules('#slave_mac1_input')
        },
        submitHandler: function(form) {
            // Clear the ODU inputs if they are hidden
            common.clear_if_hidden('#unit1_odu_input, #unit2_odu_input');
            form.submit();
        }
    });

    common.configure_odu_input('#master_mac1_input', '#unit1_odu_input');
    common.configure_odu_input('#slave_mac1_input', '#unit2_odu_input');

    function validate_date() {
        $('select.purchase_date').valid();
    }

    ($('select.purchase_date')
     .change(validate_date)
     .keyup(validate_date)
     .each(function() {
         if ($(this).val() != '0') {
             $(this).change();
         }
     }));
});