Created
November 24, 2008 22:13
-
-
Save carlwoodward/28650 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var OffshoreForm = Class.create({ | |
initialize: function() { | |
}, | |
listen_for_load: function() { | |
var self = this | |
Event.observe(window, 'load', function() { | |
self.enter_initial_state() | |
}) | |
}, | |
enter_initial_state: function() { | |
var self = this | |
self.disable_fields() | |
self.setup_checkbox_listeners() | |
}, | |
disable_fields: function() { | |
var self = this | |
$$('.disabled').each(function(disabled_field) { | |
disabled_field.disabled = true | |
}) | |
}, | |
enable_text_fields: function(parent_node) { | |
parent_node.getElementsBySelector('.disabled').each(function(text_field) { | |
text_field.disabled = false | |
new Effect.Highlight(text_field) | |
}) | |
}, | |
disable_text_fields: function(parent_node) { | |
parent_node.getElementsBySelector('.disabled').each(function(text_field) { | |
text_field.value = '' | |
text_field.disabled = true | |
}) | |
}, | |
setup_checkbox_listeners: function() { | |
var self = this | |
$$('.other').each(function(other_checkbox) { | |
other_checkbox.observe('change', function(event) { | |
self.other_check_box_changed(event) | |
}) | |
}) | |
}, | |
other_check_box_changed: function(event) { | |
var self = this | |
checkbox = event.target | |
console.log($F(checkbox)) | |
if($F(checkbox) == null) self.disable_text_fields(checkbox.parentNode) | |
else self.enable_text_fields(checkbox.parentNode) | |
} | |
}) | |
var OffshoreFormValidator = Class.create({ | |
initialize: function() { | |
var self = this | |
}, | |
required: function() { | |
return $A(['investor_name', 'country_of_citizenship', | |
'country_of_residence', 'address', 'telephone', 'email', | |
'account_type', 'financial_information', 'investment_experience', | |
'how_long_have_you_been_investing']) | |
}, | |
form: function() { | |
return $('signup_form') | |
}, | |
validate: function() { | |
var self = this | |
var errors = 0 | |
self.init_form() | |
self.remove_all_errors() | |
self.required().each(function(field_name) { | |
var field = $('offshore_user_' + field_name) | |
if($F(field) == null || $F(field).blank()) { | |
self.insert_error(field) | |
errors += 1 | |
} | |
}) | |
if(errors > 0) { | |
self.insert_error_description() | |
self.scroll_to_first_error() | |
} | |
return errors == 0 | |
}, | |
init_form: function() { | |
var self = this | |
$$('.hidden').each(function(hidden_text_field) { | |
var parent = hidden_text_field.parentNode | |
var values = self.checkbox_values(parent).uniq() | |
self.assign_values_to(hidden_text_field, values) | |
}) | |
}, | |
checkbox_values: function(parent) { | |
var self = this | |
return parent.getElementsBySelector('.checkbox').collect(function(checkbox) { | |
if(checkbox.checked == true) { | |
if(checkbox.hasClassName('other')) | |
return $F(checkbox) + "; " + self.text_field_values(parent).join(', ') | |
else | |
return $F(checkbox) | |
} | |
else return null | |
}) | |
}, | |
text_field_values: function(parent) { | |
return parent.getElementsBySelector('.disabled').collect(function(text_field) { | |
return text_field.name.gsub(/offshore_user|\[|\]/, '') + ": " + $F(text_field) | |
}) | |
}, | |
assign_values_to: function(hidden_text_field, values) { | |
if(values.any()) | |
hidden_text_field.value = values.join(', ') | |
else | |
hidden_text_field.value = '' | |
}, | |
insert_error_description: function() { | |
var error_text = 'Please complete the mandatory fields marked below.' | |
var error_desc = new Element('div', {id: 'error_desc'}).update(error_text) | |
$('signup').insert({top: error_desc}) | |
}, | |
insert_error: function(field) { | |
var parent_node = field.parentNode | |
parent_node.addClassName('error') | |
}, | |
remove_all_errors: function() { | |
$$('.error').each(function(error){error.removeClassName('error')}) | |
var error_desc = $('error_desc') | |
if(error_desc) error_desc.remove() | |
}, | |
scroll_to_first_error: function() { | |
new Effect.ScrollTo($('error_desc')) | |
}, | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment