jam-cloud/web/app/assets/javascripts/landing/signup.js

203 lines
7.5 KiB
JavaScript

(function(context, $) {
var signup = {}
function enable_disable_instruments(enable) {
var instrument_selector = $('#instrument_selector');
if(enable) {
instrument_selector.removeAttr('style')
$('input', instrument_selector).removeAttr('disabled').removeAttr('style').easyDropDown('enable');
$('select', instrument_selector).removeAttr('disabled').removeAttr('style').easyDropDown('enable');
}
else {
instrument_selector.css('color', '#AAA')
$('input', instrument_selector).attr('disabled', 'disabled').css('color', '#AAA').easyDropDown('disable');
$('select', instrument_selector).attr('disabled', 'disabled').css('color', '#AAA').easyDropDown('disable');
}
}
// instruments are selectable if musician = true
signup.handle_register_as_changes = function handle_register_as_changes() {
var initial_value = $('input.register-as:checked').val();
enable_disable_instruments(initial_value == "true");
$('input.register-as').change(function() {
var value = $(this).val()
enable_disable_instruments(value == "true")
})
// jam_ruby_user[desired_plan_code]
}
// register form elements relating to location to update appropriately as the user makes changes
signup.handle_location_changes = function handle_location_changes() {
var country_select = $('#country_select')
var region_select = $('#region_select')
var city_select = $('#city_select')
country_select.change(function() {
var selected_country = $(this).val()
if(selected_country) {
// set region disabled while updating
region_select.attr('disabled', true).easyDropDown('disable');
$.ajax('/api/regions', {
data : { country: selected_country },
dataType : 'json'
}).done(regions_done)
.fail(function(err) { regions_done([]) })
.always(function() { region_select.attr('disabled', false).easyDropDown('enable') })
}
})
function regions_done(data) {
region_select.children().remove()
region_select.append("<option value=''>Select State/Province</option>")
$(data.regions).each(function(index, item) {
var option = $('<option></option>');
option.text(item['name']);
option.val(item['region']);
region_select.append(option)
})
context.JK.dropdown(region_select);
cities_done([]);
}
region_select.change(function() {
var selected_country = country_select.val()
var selected_region = $(this).val()
// only update
if(selected_country && selected_region) {
// set city disabled while updating
city_select.attr('disabled', true).easyDropDown('disable');
$.ajax('/api/cities', {
data : { country: selected_country, region: selected_region },
dataType : 'json'
})
.done(cities_done)
.error(function(err) {
cities_done([]);
})
.always(function() { city_select.attr('disabled', false).easyDropDown('enable') })
}
})
function cities_done(data) {
city_select.children().remove()
city_select.append("<option value=''>Select City</option>")
$(data.cities).each(function(index, item) {
var option = $('<option></option>');
option.text(item).val(item);
city_select.append(option);
})
context.JK.dropdown(city_select);
}
}
signup.handle_completion_submit = function handle_completion_submit() {
// based on rails date_select element, gather up birth_date selected by the user.
// returns null if any field (day/month/year) is left blank
function gather_birth_date() {
var month = $('#jam_ruby_user_birth_date_2i').value
var day = $('#jam_ruby_user_birth_date_3i').value
var year = $('#jam_ruby_user_birth_date_1i').value
if(month != null && month.length > 0 && day != null && day.length > 0 && year != null && year.length > 0) {
return month + "-" + day + "-" + year;
}
else {
return null;
}
}
// looks in instrument_selector parent element, and gathers up all
// selected elements, and the proficiency level declared
function gather_instruments() {
var instruments_parent_element = $(".instrument_selector")
var instruments = []
$('input[type=checkbox]:checked', instruments_parent_element).each(function(i) {
// traverse up to common parent of this intrument, and pick out proficienc selector
var proficiency = $('select.proficiency_selector', $(this).closest('tr')).val()
instruments.push({
instrument_id: $(this).attr('name'),
proficiency_level: proficiency,
priority : i
})
});
return instruments;
}
$('form.edit_jam_ruby_user').submit(function() {
var form = $(this)
var submit_data = {};
// gather up all fields from the form
submit_data.first_name = $('#jam_ruby_user_first_name').val()
submit_data.last_name = $('#jam_ruby_user_last_name').val()
submit_data.password = $('#jam_ruby_user_password').val()
submit_data.password_confirmation = $('#jam_ruby_user_password_confirmation').val()
submit_data.country = $('#jam_ruby_user_country').val()
submit_data.state = $('#jam_ruby_user_state').val()
submit_data.city = $('#jam_ruby_user_city').val()
submit_data.birth_date = gather_birth_date()
submit_data.instruments = gather_instruments()
if($.QueryString['affiliate_partner_id']) {
submit_data.affiliate_partner_id = $.QueryString['affiliate_partner_id'];
}
//submit_data.photo_url = $('#jam_ruby_user_instruments').val()
$.ajax({
type: "POST",
url: "/api/users/complete/" + gon.signup_token,
contentType: 'application/json',
data: JSON.stringify(submit_data)
}).done(completion_done).fail(completion_fail)
return false;
})
function completion_done(data) {
// we can redirect on to client
window.location.href = '/client'
}
function completion_fail(xhr, status) {
// if status = 422, then we can display errors
if(xhr.status == 422) {
data = JSON.parse(xhr.responseText)
var errors = $('#errors')
errors.children().remove()
var list = $("<ul></ul>")
errors.append(list)
$(data).each(function(i) {
list.append("<li>" + this + "</li>")
})
}
else {
alert("something went wrong with the service. please try again later")
}
}
}
window.signup = signup
})(window, jQuery);