0) ? instrumentText : NONE_SPECIFIED)
}
function showProfile(band_id) {
context.location = "/client#/bandProfile/" + band_id;
}
function saveInvitations(response) {
if (0 < $('#selected-friends-band .invitation').length) {
createBandInvitations(response.id, function () {
showProfile(response.id);
});
}
}
function saveBand(band, saveBandSuccessFn) {
unbindNavButtons()
removeErrors()
var saveBandFn = (isNewBand()) ? rest.createBand : rest.updateBand
saveBandFn(band)
.done(function (response) {
bandId = response.id
saveInvitations(response)
if(saveBandSuccessFn) {
saveBandSuccessFn(band)
}
})
.fail(function (jqXHR) {
if(jqXHR.status == 422) {
renderErrors(JSON.parse(jqXHR.responseText))
} else {
app.notifyServerError(jqXHR, "Unable to create band")
}
})
.always(function (jqXHR) {
bindNavButtons()
})
}
function createBandInvitations(bandId, onComplete) {
var callCount = 0;
var totalInvitations = 0;
$('#selected-friends-band .invitation').each(function (index, invitation) {
callCount++;
totalInvitations++;
var userId = $(invitation).attr('user-id');
rest.createBandInvitation(bandId, userId)
.done(function (response) {
callCount--;
}).fail(app.ajaxError);
});
function checker() {
if (callCount === 0) {
onComplete();
} else {
context.setTimeout(checker, 10);
}
}
checker();
return totalInvitations;
}
function beforeShow(data) {
inviteMusiciansUtil.clearSelections();
bandId = data.id == 'new' ? '' : data.id;
currentStep=0
if (data['d']) {
var stepNum = data['d'].substring(4)
if(stepNum) {
currentStep=stepNum
delete data['d'];
}
}
resetForm();
}
function afterShow(data) {
inviteMusiciansUtil.loadFriends();
if (!isNewBand()) {
$("#band-change-photo").html('Upload band photo.');
$('.band-photo').removeClass("hidden")
// retrieve and initialize band profile data points
loadBandDetails();
} else {
loadGenres();
// Load geo settings:
rest.getResolvedLocation().done(function (location) {
loadCountries(location.country, function () {
loadRegions(location.region, function () {
loadCities(location.city);
});
});
});
$('.band-photo').addClass("hidden")
}
renderCurrentPage()
}
function loadDesiredExperience() {
}
function loadBandDetails() {
rest.getBand(bandId).done(function (band) {
$("#band-name").val(band.name);
$("#band-website").val(band.website);
$("#band-biography").val(band.biography);
bandType.val(band.band_type)
bandStatus.val(band.band_status)
concertCount.val(band.concert_count)
if (band.add_new_members){
$("#new-member-no").iCheck('check').attr('checked', 'checked')
} else {
$("#new-member-yes").iCheck('check').attr('checked', 'checked')
}
if (band.paid_gigs) {
$("#paid-gigs-no").iCheck('check').attr('checked', 'checked')
} else {
$("#paid-gigs-yes").iCheck('check').attr('checked', 'checked')
}
if (band.free_gigs) {
$("#free-gigs-no").iCheck('check').attr('checked', 'checked')
} else {
$("#free-gigs-yes").iCheck('check').attr('checked', 'checked')
}
$('#touring-option').val(band.touring_option ? 'yes' : 'no')
$("#play-commitment").val(band.play_commitment)
$("#hourly-rate").val(profileUtils.normalizeMoneyForDisplay(band.hourly_rate))
$("#gig-minimum").val(profileUtils.normalizeMoneyForDisplay(band.gig_minimum))
// Initialize avatar
if (band.photo_url) {
$("#band-avatar").attr('src', band.photo_url);
}
loadGenres(band.genres);
loadCountries(band.country, function () {
loadRegions(band.state, function () {
loadCities(band.city);
});
});
renderOptionalControls();
$.each(band.instruments, function(index, instrument) {
var h = {}
h.id = instrument.instrument_id
h.level = instrument.proficiency_level
h.approve = true
$selectedInstruments.push(h)
})
renderDesiredExperienceLabel($selectedInstruments)
accountProfileSamples.renderPlayer(band)
});
}
function loadGenres(selectedGenres) {
$("#band-genres").empty();
rest.getGenres().done(function (genres) {
$.each(genres, function (index, genre) {
var genreTemplate = $('#template-band-setup-genres').html();
var selected = '';
if (selectedGenres) {
var genreMatch = $.grep(selectedGenres, function (n, i) {
return n.id === genre.id;
});
if (genreMatch.length > 0) {
selected = "checked";
}
}
var genreHtml = context.JK.fillTemplate(genreTemplate, {
id: genre.id,
description: genre.description,
checked: selected
});
$('#band-genres').append(genreHtml);
});
});
}
function loadCountries(initialCountry, onCountriesLoaded) {
var countrySelect = $("#band-country");
var nilOption = $(nilOptionStr);
nilOption.text(nilOptionText);
countrySelect.append(nilOption);
rest.getCountries().done(function (response) {
$.each(response["countriesx"], function (index, countryx) {
if (!countryx.countrycode) return;
var option = $(nilOptionStr);
option.text(countryx.countryname);
option.attr("value", countryx.countrycode);
if (initialCountry === countryx.countrycode) {
option.attr("selected", "selected");
}
countrySelect.append(option);
});
context.JK.dropdown(countrySelect);
if (onCountriesLoaded) {
onCountriesLoaded();
}
});
}
function loadRegions(initialRegion, onRegionsLoaded) {
var $region = $("#band-region");
var selectedCountry = $("#band-country").val();
$region.empty();
var nilOption = $(nilOptionStr);
nilOption.text(nilOptionText);
$region.append(nilOption);
if (selectedCountry) {
rest.getRegions({'country': selectedCountry}).done(function (response) {
$region.empty();
var nilOption = $(nilOptionStr);
nilOption.text(nilOptionText);
$region.append(nilOption);
$.each(response["regions"], function (index, region) {
if (!region) return;
var option = $(nilOptionStr);
option.text(region['name']);
option.attr("value", region['region']);
if (initialRegion === region['region']) {
option.attr("selected", "selected");
}
$region.append(option);
});
context.JK.dropdown($region);
if (onRegionsLoaded) {
onRegionsLoaded();
}
}).error(function(err) {
context.JK.dropdown($region);
if (onRegionsLoaded) {
onRegionsLoaded();
}
});
}
}
function loadCities(initialCity) {
var $city = $("#band-city");
$city.empty();
var selectedCountry = $("#band-country").val();
var selectedRegion = $("#band-region").val();
var nilOption = $(nilOptionStr);
nilOption.text(nilOptionText);
$city.append(nilOption);
nilOption.attr('selected','selected');
if (selectedCountry && selectedRegion) {
rest.getCities({'country': selectedCountry, 'region': selectedRegion}).done(function (response) {
$.each(response["cities"], function (index, city) {
if (!city) return;
var option = $(nilOptionStr);
option.text(city);
option.attr("value", city);
if (initialCity === city) {
option.attr("selected", "selected");
}
$city.append(option);
});
context.JK.dropdown($city);
}).error(function(err) {
context.JK.dropdown($city);
});
} else {
context.JK.dropdown($city);
}
}
function addInvitation(value, data) {
if ($('#selected-band-invitees div[user-id=' + data + ']').length === 0) {
var template = $('#template-band-invitation').html();
var invitationHtml = context.JK.fillTemplate(template, {userId: data, userName: value});
$('#selected-band-invitees').append(invitationHtml);
$('#band-invitee-input').select();
selectedFriendIds[data] = true;
} else {
$('#band-invitee-input').select();
context.alert('Invitation already exists for this musician.');
}
}
function navigateToBandPhoto(evt) {
evt.stopPropagation();
context.location = '/client#/band/setup/photo/' + bandId;
return false;
}
function removeInvitation(evt) {
delete selectedFriendIds[$(evt.currentTarget).parent().attr('user-id')];
$(evt.currentTarget).closest('.invitation').remove();
}
function bindNavButtons() {
$('#btn-band-setup-back').on("click", function (e) {
e.stopPropagation()
navBack()
return false
})
$('#btn-band-setup-cancel').on("click", function (e) {
e.stopPropagation()
navCancel()
return false
})
$('#btn-band-setup-next').on("click", function (e) {
e.stopPropagation()
navNext()
return false
})
$('#btn-band-setup-back').removeClass("disabled")
$('#btn-band-setup-cancel').removeClass("disabled")
$('#btn-band-setup-next').removeClass("disabled")
}
function unbindNavButtons() {
$('#btn-band-setup-back').off("click")
$('#btn-band-setup-cancel').off("click")
$('#btn-band-setup-next').off("click")
$('#btn-band-setup-back').addClass("disabled")
$('#btn-band-setup-cancel').addClass("disabled")
$('#btn-band-setup-next').addClass("disabled")
}
function events() {
$('#selected-band-invitees').on("click", ".invitation a", removeInvitation);
bindNavButtons();
// friend input focus
$('#band-invitee-input').focus(function () {
$(this).val('');
});
$('#band-country').on('change', function (evt) {
evt.stopPropagation();
loadRegions();
loadCities();
return false;
});
$('#band-region').on('change', function (evt) {
evt.stopPropagation();
loadCities();
return false;
});
$('#band-change-photo').click(navigateToBandPhoto);
$('#band-setup .band-avatar-profile').click(navigateToBandPhoto);
$('div[layout-id="band/setup"] .btn-email-invitation').click(function () {
invitationDialog.showEmailDialog();
});
$('div[layout-id="band/setup"] .btn-gmail-invitation').click(function () {
invitationDialog.showGoogleDialog();
});
$('div[layout-id="band/setup"] .btn-facebook-invitation').click(function () {
invitationDialog.showFacebookDialog();
});
$('a#choose-desired-experience').on("click", chooseExperience)
$('#band-setup').on('ifToggled', 'input[type="radio"].dependent-master', renderOptionalControls);
$(friendInput).focus(function() { $(this).val(''); })
}
function chooseExperience(e) {
e.stopPropagation()
ui.launchInstrumentSelectorDialog("new member(s)", $selectedInstruments, function(selectedInstruments) {
$selectedInstruments = selectedInstruments
renderDesiredExperienceLabel($selectedInstruments)
return false
})
return false
}
function loadBandCallback() {
return (isNewBand()) ? {} : rest.getBand(bandId)
}
function initialize(invitationDialogInstance, friendSelectorDialog) {
inviteMusiciansUtil = new JK.InviteMusiciansUtil(app)
inviteMusiciansUtil.initialize(friendSelectorDialog)
friendInput = inviteMusiciansUtil.inviteBandCreate('#band-setup-invite-musicians', "If your bandmates are already on JamKazam, start typing their names in the box below, or click the Choose Friends button to select them.
")
invitationDialog = invitationDialogInstance
events()
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
}
bandType=$("#band-type")
bandStatus=$("#band-status")
concertCount=$("#concert-count")
app.bindScreen('band/setup', screenBindings)
$screen.find('input[type=radio]').iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal',
inheritClass: true
})
profileUtils.initializeHelpBubbles()
}
this.initialize = initialize;
this.afterShow = afterShow;
return this;
};
})(window, jQuery);