
var okay_icon    = " <img src='http://biggerpockets.com/images/okay.gif'>";
var red_ex_icon  = " <img src='http://biggerpockets.com/images/red_ex.gif'>";
var spinner_icon = " <img src='http://biggerpockets.com/images/signup_form_spinner.gif'>";

var username = new LiveValidation("social_user_username",  {
    validMessage: okay_icon + " Available!",
    onlyOnSubmit: true    
})

username.add(Validate.Presence, { 
    failureMessage: red_ex_icon + " User name is required" 
})

username.add(Validate.Format, {
    pattern: /^[^@\.]+$/i,
    failureMessage: red_ex_icon + " Cannot use website or email address."
})

username.add(Validate.Format, { 
    pattern: /^[a-zA-Z0-9_]*$/i,
    failureMessage: red_ex_icon + " Only letters numbers and underscore allowed." 
})

username.add(Validate.Length, {		
    tooLongMessage: red_ex_icon + " Maximum 15 characters",
		maximum: 15
})

username.ajax_callback = function(transport) {
    var response = transport.responseText.evalJSON();

    if (response['available'] == false) {
        this.message = red_ex_icon + " " + $('social_user_username').value + " has been taken!"
        this.validationFailed = true
        this.onInvalid()
    } else {        
        this.validate()
    }
}.bind(username)

username.element.replaceMessageSpan = function(text) {
    var original_span = this.next('.LV_validation_message')
    if (original_span != null) 
        original_span.remove()
    
    var new_span = document.createElement('span');
    new_span.innerHTML = text;
    new_span.addClassName('LV_validation_message');

    Insertion.After(this, new_span)
}.bind(username.element)

Event.observe(username.element, 'blur', function(event) {
    username.element.replaceMessageSpan(spinner_icon)
    Validate.Uniqueness($('social_user_username').value, {
        callback: username.ajax_callback,
        url: user_name_available_url
    })
})

Validate.Uniqueness = function(value, options) {
    var request = new Ajax.Request(options['url'] + value, {
        method: 'get',
        onSuccess: options['callback']
    })
}

var first_name = new LiveValidation("social_user_first_name", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

first_name.add(Validate.Presence, {
    failureMessage: red_ex_icon + " First name is required" 
})

var last_name = new LiveValidation("social_user_last_name", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

last_name.add(Validate.Presence, {
    failureMessage: red_ex_icon + " Last name is required"    
})

var email_address = new LiveValidation("social_user_email", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

email_address.add(Validate.Presence, {
    failureMessage: red_ex_icon + " Email is required"
})

email_address.add(Validate.Email, {
    failureMessage: red_ex_icon + " Format not valid"
})

var password = new LiveValidation("social_user_password", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

password.add(Validate.Presence, {
    failureMessage: red_ex_icon + " Password is required"
})

var password_confirmation = new LiveValidation("social_user_password_confirmation", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

password_confirmation.add(Validate.Presence, {
    failureMessage: red_ex_icon + " Password confirm is required"
})

password_confirmation.add(Validate.Confirmation, {
    match: 'social_user_password',
    failureMessage: red_ex_icon + " Passwords must match"
})


var zip_code = new LiveValidation("social_user_zip_code", {
    validMessage: okay_icon,
    onlyOnBlur: true
})

zip_code.add(Validate.Presence, {
    failureMessage: red_ex_icon + " Zip code is required"    
})

//zip_code.add(Validate.Format, {
//    pattern: /^([0-9]{5})$/,
//    failureMessage: red_ex_icon + " Zip code must be a five-digit number"
//})
