// registration form validation

function validatePassword($el) {
    if (!$el.data('validateField_bound')) {
        $el.change(function() {
            validatePassword($el);
        });
        $el.keyup(function() {
            validatePassword($el);
        });
        $el.blur(function() {
            validatePassword($el);
        });
        $el.data('validateField_bound', true);
        return;
    }

    var strength = 0;

    if ($el.val().length < 6) {
        $el.removeClass('valid').addClass('invalid');
    }
    else {
        $el.removeClass('invalid').addClass('valid');
        strength += Math.round(($el.val().length - 6) / 3);
        if ($el.val().match(/[a-z]/) != null) strength++;
        if ($el.val().match(/[A-Z]/) != null) strength++;
        if ($el.val().match(/[0-9]/) != null) strength++;
        if ($el.val().match(/^[a-z0-9]$/i) == null) strength++;
    }
    var tmp = ['weak', 'weak', 'weak', 'good', 'good', 'good', 'strong', 'strong'];
    var word = tmp[strength];
    $('#password-strength').removeClass('weak good strong').addClass(word).text(word);
}

function validateField($el, regex) {
    if ($el.length) {
        if (!$el.data('validateField_bound')) {
            $el.change(function() {
                validateField($el, regex);
            });
            $el.keyup(function() {
                validateField($el, regex);
            });
            $el.blur(function() {
                validateField($el, regex);
            });
            $el.data('validateField_bound', true);
            return;
        }

        if ($el.hasClass('prompt')) {
            $el.removeClass('valid').removeClass('invalid');
        }
        else {
            if ($el.val().match(regex) == null) {
                $el.removeClass('valid').addClass('invalid');
            }
            else {
                $el.removeClass('invalid').addClass('valid');
            }
        }
    }
    else {
        $el.removeClass('valid').removeClass('invalid');
    }
}

function validateDate($el) {
    if (!$el.data('validateField_bound')) {
        $el.change(function() {
            validateDate($el);
        });
        $el.keyup(function() {
            validateDate($el);
        });
        $el.data('validateField_bound', true);
        return;
    }

    if ($el.val() == $el.attr('alt')) {
        $el.removeClass('valid').removeClass('invalid');
        return ;
    }

    var tmp = $el.val().split('/');
    if (tmp.length == 3) {
        var d = tmp[0];
        var m = tmp[1];
        var y = tmp[2];

        var dob = new Date(m+'/'+d+'/'+y);
        var minDob = new Date;

        minDob.setYear(minDob.getFullYear()- 13);

        if (dob < minDob) {
            $el.removeClass('invalid').addClass('valid');
        }
        else {
            $el.removeClass('valid').addClass('invalid');
        }
    }
    else {
        $el.removeClass('valid').addClass('invalid');
    }
}

function validateForm($el) {
    var errMsg = '';
    var done = new Array();

    $el.find('.required').each(function() {
        if ($(this).hasClass('prompt') || !$(this).val().length) {
            var id = $(this).attr('id');
            done.push(id);
            $(this).addClass('invalid');
            errMsg += '\''+$('label[for="'+id+'"]').text().replace(':', '')+'\' is a required field<br />';
        }
    });

    if ($('input[name="sex"]:not(:checked)').length == 2) {
           errMsg += '\'Sex\' is a required field<br />';
    }

    $el.find('.invalid').each(function() {
        var id = $(this).attr('id');
        var exclude = false;
        for (i in done) {
            if (done[i] == id) {
                exclude = true;
            }
        }
        if (!exclude) {
            if (id == 'date_of_birth') {
                errMsg += 'You must be over 13 years of age to register<br />';
            }
            else {
                errMsg += '\''+$('label[for="'+id+'"]').text().replace(':', '')+'\' is not in a valid format<br />';
            }
        }
    });

    if ($('input[name="tandcs"]:not(:checked)').length) {
           errMsg += 'You must agree to the terms &amp; conditions<br />';
    }

    if (errMsg.length) {
        errMsg += '<br />Please correct these errors before trying again.';
        alert(errMsg, 'Please correct the following errors:');
        return false;
    }

    return true;
}

$(document).ready(function(){
    validateField($('#registration-form input#first_name'), /^[a-z\-\ ]+$/i );
    validateField($('#registration-form input#last_name'), /^[a-z'\-\.\ ]+$/i );
    validateField($('#registration-form input#email'), /^[a-z0-9\.\-_]+@[a-z0-9\-_]+\.[a-z0-9\-_\.]+[a-z]$/i );
    validateField($('#registration-form input#city'), /^[a-z][a-z'\-\.\ ]+$/i );
    validateDate($('#registration-form input#date_of_birth'));
    validatePassword($('#registration-form input[name="password"]'));

    $('#registration-form form').submit(function() {
        return validateForm($(this));
    });

    /* forgotten password bit */

    validatePassword($('#change-password input[name="new_password"]'));

    $('#change-password').submit(function() {
        if (validateForm($(this))) {
            if ($('#new_password').val() != $('#confirm_password').val()) {
                alert('Passwords do not match');
                return false;
            }
            return true;
        }
        return false;
    });

    $('#registration-form input#activity').autocomplete('wizard/autocomplete_activity', {
        width: 334,
        mustMatch: true,
        matchContains: true,
        selectFirst: true
    }).result(function(event, data, formatted) {
        if (typeof(formatted) == 'undefined') {
            $(this).removeClass('valid').addClass('invalid');
        }
        else {
            $(this).removeClass('invalid').addClass('valid');
        }
    });

    $('#registration-form input#city').autocomplete('wizard/autocomplete_cities', {
        width: 334,
        mustMatch: true,
        matchContains: true,
        selectFirst: true
    }).result(function validateAutocompleteField(event, data, formatted) {
        if (typeof(formatted) == 'undefined') {
            $(this).removeClass('valid').addClass('invalid');
        }
        else {
            $(this).removeClass('invalid').addClass('valid');
        }
    });
});


function FB_onRegister() {
    setSpinner($('#registration-form'));
    window.location.reload(true);
}

