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) }) }) self.setup_only_one_account_type() }, setup_only_one_account_type: function() { var self = this $$('input.account_type').each(function(checkbox) { checkbox.observe('change', function(event) { var element = event.element() $$('input.account_type').each(function(unselect_checkbox) { if(element != unselect_checkbox) { self.unselect_checkbox_with_other(unselect_checkbox) } }) }) }) }, unselect_checkbox_with_other: function(checkbox) { checkbox.checked = false checkbox.parentNode.getElementsBySelector('input[type=text]').each(function(text_field) { text_field.value = '' text_field.disabled = true }) }, other_check_box_changed: function(event) { var self = this checkbox = event.element() if(!checkbox.checked) { 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', 'contact_person', 'length_of_relationship', 'agree_to_indemnity', 'area_code', 'country_of_residence', 'address', 'telephone', 'email', 'account_type', 'financial_information', 'investment_experience', 'how_long_have_you_been_investing']) }, requires_other: function() { return $A(['account_type', 'financial_information', 'investment_experience']) }, 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 } }) self.requires_other().each(function(field_name) { var field = $('offshore_user_' + field_name) var container = field.parentNode container.getElementsBySelector('.other[type=checkbox]').each(function(checkbox) { if(checkbox.checked) { var parent_of_checkbox = checkbox.parentNode var unfilled_text_fields = parent_of_checkbox.getElementsBySelector('input[type=text]').detect(function(text_field) { return !text_field.disabled && text_field.value.blank() }) if(unfilled_text_fields != null) { 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().compact() 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).compact().join(', ') else return $F(checkbox) } else return null }) }, text_field_values: function(parent) { return parent.getElementsBySelector('.disabled').collect(function(text_field) { if(!text_field.disabled) { if(text_field.name.blank()) { return $F(text_field) } else { return text_field.name.gsub(/offshore_user|\[|\]/, '') + ": " + $F(text_field) } } else { return null } }) }, 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')) } })