Skip to content

Instantly share code, notes, and snippets.

@carlwoodward
Created November 24, 2008 22:13
Show Gist options
  • Save carlwoodward/28650 to your computer and use it in GitHub Desktop.
Save carlwoodward/28650 to your computer and use it in GitHub Desktop.
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