(function(context, $) { "use strict"; context.JK = context.JK || {}; context.JK.CreateScheduledSession = function(app) { var gearUtils = context.JK.GearUtilsInstance; var sessionUtils = context.JK.SessionUtils; var logger = context.JK.logger; var rest = JK.Rest(); var invitationDialog = null; var inviteMusiciansUtil = null; var instrumentSelector = null; var instrumentRSVP = null; var firstTimeShown = false; var MAX_GENRES = 1; var createSessionSettings = { createType: '<%= MusicSession::CREATE_TYPE_START_SCHEDULED %>', timezone: {}, recurring_mode: {}, language: {}, band: {}, musician_access: {}, fans_access: {}, open_rsvps: false, friends_can_join: false }; var friendInput = null; // Main layout var $screen = $('#create-session-layout'); var $wizardSteps = null; var $currentWizardStep = null; var step = 0; var $templateSteps = null; var $templateButtons = null; var $sessionButtons = null; var $startTimeList = null; var $endTimeList = null; var $timezoneList = null; var $recurringModeList = null; var $languageList = null; var $bandList = null; var $sessionPlusMusiciansLabel = null; var $editScheduledSessions = null; var $inputFiles = $screen.find('#session-select-files'); var $btnSelectFiles = null; var $selectedFilenames = null; var $uploadSpinner = null; var $quickStartSoloBtn = null; var $quickStartFriendsBtn = null; var $quickStartOpenBtn = null; var $startOrScheduledBtn = null; var $featureSessions = null; var $useNewVideo = null; var $useNewVideoSelect = null; // Step1 layout var $screenStep1 = null; var $createTypes = null; var $createTypeHelpers = null; var $scheduledSessions = null; var $fetchingSpinner = null; var $fetchingSpinnerLabel = null; var $noSessionFound = null; var $sessionHeader = null; var scheduledSessions = {}; // Step4 layout var $policyTypes = null; var TOTAL_STEPS = 6; var STEP_HOME = 0; var STEP_SELECT_TYPE = 1; var STEP_SELECT_PLAYING = 2; var STEP_SELECT_INVITE = 3; var STEP_SELECT_POLICY = 4; var STEP_SELECT_CONFIRM = 5; var ONE_HOUR = 3600 * 1000; var ONE_MINUTE = 60 * 1000; var ONE_DAY = ONE_HOUR * 24; var defaultTimeArray = ["12:00 AM", "12:30 AM", "01:00 AM", "01:30 AM", "02:00 AM", "02:30 AM", "03:00 AM", "03:30 AM", "04:00 AM", "04:30 AM", "05:00 AM", "05:30 AM", "06:00 AM", "06:30 AM", "07:00 AM", "07:30 AM", "08:00 AM", "08:30 AM", "09:00 AM", "09:30 AM", "10:00 AM", "10:30 AM", "11:00 AM", "11:30 AM", "12:00 PM", "12:30 PM", "01:00 PM", "01:30 PM", "02:00 PM", "02:30 PM", "03:00 PM", "03:30 PM", "04:00 PM", "04:30 PM", "05:00 PM", "05:30 PM", "06:00 PM", "06:30 PM", "07:00 PM", "07:30 PM", "08:00 PM", "08:30 PM", "09:00 PM", "09:30 PM", "10:00 PM", "10:30 PM", "11:00 PM", "11:30 PM"]; var proficiencyDescriptionMap = { "0": "Any", "1": "Beg", "2": "Beg/Int", "3": "Int", "4": "Int/Adv", "5": "Adv" }; var privacyMap = { "public": "1", "private_invite": "2", "private_approve": "3" } function afterLoadScheduledSessions(sessionList) { $featureSessions.empty() createSessionSettings.session_count = sessionList.length; if (createSessionSettings.session_count == 0) { createSessionSettings.selectedSessionId = null; $featureSessions.append('No sessions') } else { $.each(sessionList, function (i, session) { scheduledSessions[session.id] = session; }); context._.each(sessionList, function (session) { session.scheduled_start = new Date(session.scheduled_start).toDateString() + ', ' + context.JK.formatUtcTime(new Date(session.scheduled_start), false); var time = session.pretty_scheduled_start_with_timezone; var receivedUsers = {} var sessionLink = '/client#/account/sessionDetail/' + session.id var isActive = session.active_music_session && session.active_music_session.participants.length > 0 if(isActive) { time = 'NOW' context._.each(session.active_music_session.participants, function(participant) { receivedUsers[participant.id] = participant.name; }) sessionLink = '/sessions/' + session.id } else { context._.each(session.approved_rsvps, function(approved_rsvp) { receivedUsers[approved_rsvp.id] = approved_rsvp.name; }) context._.each(session.invitations, function(invitation) { receivedUsers[invitation.receiver_id] = invitation.receiver_name; }) } var $row = $('' + session.pretty_scheduled_start_short + '') var $sessionCell = $row.find('.session-link') if (isActive) { var $sessionLink = $('' + session.name + '') $sessionCell.append($sessionLink) context.JK.popExternalLinks($sessionCell) } else { var $sessionLink = $('' + session.name + '') $sessionCell.append($sessionLink) } var $actionsCell = $row.find('.actions'); var $actionsLink = $('join') $actionsCell.append($actionsLink) var msg = ''; context._.each(receivedUsers, function(value, key) { var url = '/client#/profile/' + key msg += '' + value + ', ' }) if (msg.length > 0) { msg = msg.slice(0, -2) } var $usersCell = $row.find('.session-users') $usersCell.append(msg) $featureSessions.append($row); }); } } function afterLoadScheduledSessions2(sessionList) { createSessionSettings.session_count = sessionList.length; if (createSessionSettings.session_count == 0) { $noSessionFound.show(); createSessionSettings.selectedSessionId = null; } else { $noSessionFound.hide(); $.each(sessionList, function (i, session) { scheduledSessions[session.id] = session; }); context._.each(sessionList, function (session) { session.scheduled_start = new Date(session.scheduled_start).toDateString() + ', ' + context.JK.formatUtcTime(new Date(session.scheduled_start), false); var options = { id: session.id, name: session.name, scheduled_start: session.pretty_scheduled_start_short }; var txt = $(context._.template($('#template-scheduled-session').html(), options, { variable: 'data' })); $scheduledSessions.append(txt); }); var firstSession = function() { var $firstSession = $scheduledSessions.children().first().find('input[name="scheduled-session-info"]'); $firstSession.attr('checked', 'checked'); createSessionSettings.selectedSessionId = $firstSession.attr('data-session-id'); }; if (createSessionSettings.selectedSessionId == null) { firstSession(); } else { var $selectedSession = $scheduledSessions.children().first().find('input[name="scheduled-session-info"][data-session-id="' + createSessionSettings.selectedSessionId + '"]'); if ($selectedSession.length) $selectedSession.attr('checked', 'checked'); else firstSession(); } $scheduledSessions.iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal', inheritClass: true }); } if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count == 0) $editScheduledSessions.hide(); else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count > 0) $editScheduledSessions.show(); var $btnNext = $screen.find('.btn-next'); if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) { $btnNext.addClass('disabled'); } else { $btnNext.removeClass('disabled'); } } function clickQuickStartSolo () { logger.debug("user clicked quick start solo") createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_START %>' createSessionSettings.friends_can_join = false next(); return false; } function clickQuickStartFriends () { logger.debug("user clicked quick start solo") createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_START %>' createSessionSettings.friends_can_join = true next(); return false; } function clickQuickStartPublic () { logger.debug("user clicked quick start public") createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>' createSessionSettings.friends_can_join = false next(); return false; } function clickStartOrSchedule () { logger.debug("user clicked start or scheduled") toggleCreateType(null, '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>') next(); return false; } function afterLoadUserDetail(userDetail) { var userInstruments = []; $.each(userDetail.instruments, function(index, userInstrument) { userInstrument.level = userInstrument.proficiency_level; userInstruments.push(userInstrument); }) instrumentSelector.render('#instrument-select-list', userInstruments); instrumentRSVP.render('#instrument-select-rsvp-list'); $("#instrument-select-list").iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal', inheritClass: true }); $("#instrument-select-rsvp-list").iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal', inheritClass: true }); } function beforeShowStep0() { $scheduledSessions.empty(); $noSessionFound.hide(); $fetchingSpinner.show(); $fetchingSpinnerLabel.show(); rest.findScheduledSessions({}) .done(afterLoadScheduledSessions) .fail(app.ajaxError) .always(function(response) { $fetchingSpinner.hide(); $fetchingSpinnerLabel.hide(); }); rest.getUserDetail() .done(afterLoadUserDetail) .fail(app.ajaxError); } function beforeShowStep1() { $scheduledSessions.empty(); $noSessionFound.hide(); $fetchingSpinner.show(); $fetchingSpinnerLabel.show(); createSessionSettings.startDate = createSessionSettings.startDate || (new Date().toDateString()); $screen.find("#session-start-date").val(createSessionSettings.startDate); toggleDate(true); toggleStartTime(); toggleStepStatus(); sessionUtils.defaultTimezone($timezoneList); if(firstTimeShown) { firstTimeShown = false; $screen.find('#session-when-start-scheduled').iCheck('check'); } } function beforeShowStep2() { } function beforeShowStep3() { rest.getBands(context.JK.currentUserId) .done(function(result) { var options = $screen.find("#session-band-list"); options.empty(); options.append($("')); } if (createSessionSettings.startTime != selectedDate) createSessionSettings.startTime = defaultTimeArray[startIndex]; $startTimeList.val(createSessionSettings.startTime); toggleStartTime(dontRebuildDropdowns); } function toggleStartTime(dontRebuildDropdowns) { var valueSelected = $startTimeList.find('option:selected').val(); var startIndex = defaultTimeArray.indexOf(valueSelected) + 1; var $endTimeList = $('#end-time-list'); $endTimeList.empty(); // if (startIndex == defaultTimeArray.length ) { // var strTime = defaultTimeArray[0]; // $endTimeList.append($('')); // } var endIndex = startIndex + 6; var endTimeIndices = []; for (var i = startIndex; i < endIndex; i++) { if (i <= defaultTimeArray.length - 1) { endTimeIndices.push(i); } else { endTimeIndices.push(i - defaultTimeArray.length); } } $.each(endTimeIndices, function(index, value) { var strTime = defaultTimeArray[value]; $endTimeList.append($('')); }); if (createSessionSettings.endTime != defaultTimeArray[startIndex + 1]) { createSessionSettings.endTime = defaultTimeArray[(startIndex + 1) % defaultTimeArray.length]; } $endTimeList.val(createSessionSettings.endTime); if(!dontRebuildDropdowns) { logger.debug("rebuilding start/end time dropdowns") context.JK.dropdown($startTimeList); context.JK.dropdown($endTimeList); } } function initializeControls() { $("#create-session-form").iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal', inheritClass: true }); $screen.find("#session-start-date").datepicker({ dateFormat: "D d MM yy", onSelect: function() { toggleDate(); } } ); context.JK.GenreSelectorHelper.render('#create-session-genre'); if(context.JK.currentUserId) { inviteMusiciansUtil.loadFriends(); } context.JK.dropdown($screen.find('#session-musician-access')); context.JK.dropdown($screen.find('#session-fans-access')); context.JK.dropdown($screen.find('#session-friends-can-join')); context.JK.dropdown($timezoneList); context.JK.dropdown($recurringModeList); context.JK.dropdown($languageList); context.JK.dropdown($bandList); context.JK.helpBubble($sessionPlusMusiciansLabel, 'session-plus-musicians', {}, {offsetParent: $sessionPlusMusiciansLabel.closest('.content-wrapper')}); $editScheduledSessions.on('click', onEditSessions); context.JK.popExternalLinks($screen) } function changeSelectedFiles() { var fileNames = []; var files = $inputFiles.get(0).files; var error = false; for (var i = 0; i < files.length; ++i) { var name = files.item(i).name; var ext = name.split('.').pop().toLowerCase(); if ($.inArray(ext, ["pdf", "png", "jpg", "jpeg", "gif", "xml", "mxl", "txt"]) == -1) { error = true; break; } fileNames.push(name); } if (error) { app.notifyAlert("Error", "We're sorry, but you can only upload images (.png .jpg .jpeg .gif), text (.txt), PDFs (.pdf), and XML files (.xml .mxl)."); $inputFiles.replaceWith($inputFiles.clone(true)); } else { // upload as soon as user picks their files. uploadNotations($inputFiles.get(0).files) .done(function() { context._.each(fileNames, function(fileName) { var $text = $('').text(fileName); var $file = $('
  • ').append($text); $selectedFilenames.append($file); }) }) } } function toggleSelectFiles(event) { if($btnSelectFiles.data('uploading')) { logger.debug("ignoring click of SELECT FILES... while uploading") return false; } event.preventDefault(); $inputFiles.trigger('click'); return false; } function toggleStepStatus() { $screen.find('#create-session-steps .session-stepnumber').off('click'); $screen.find('#create-session-steps .session-stepnumber').removeClass('session-stephover'); if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1) { if (step == STEP_SELECT_CONFIRM) { for (var i = 2; i < 5; i++) { $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide(); } $screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("2"); $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').on('click', back); $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').addClass('session-stephover'); } else if (step == STEP_SELECT_TYPE) { for (var i = 3; i < 6; i++) { $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide(); } $screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("5"); var $nextStep = $screen.find('#create-session-steps .session-stepnumber[data-step-number="2"]'); if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') { $nextStep.on('click', next); $nextStep.addClass('session-stephover') } else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count > 0) { $nextStep.on('click', next); $nextStep.addClass('session-stephover') } } } else { $screen.find('#create-session-steps').find('.session-stepnumber').show(); $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step + 1) + '"]').on('click', next); $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step + 1) + '"]').addClass('session-stephover'); $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step - 1) + '"]').on('click', back); $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step - 1) + '"]').addClass('session-stephover'); } } function toggleCreateType(event, checkedType) { if(!checkedType) { var $checkedType = $(event.target); var checkedType = $checkedType.attr('info-value'); } if (checkedType == createSessionSettings.createType) return; $createTypeHelpers.addClass('hidden'); var $checkedInfo = $screen.find('.session-when-info div[info-id=' + '"' + checkedType + '"]'); $checkedInfo.removeClass('hidden'); createSessionSettings.createType = checkedType; if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') { $('#start-scheduled-wrapper').show(); $('#schedule-future-wrapper').hide(); createSessionSettings.timezone = {}; createSessionSettings.recurring_mode = {}; createSessionSettings.timezone = {}; createSessionSettings.language = {}; createSessionSettings.band = {}; createSessionSettings.musician_access = {}; createSessionSettings.fans_access = {}; } else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>') { $('#start-scheduled-wrapper').hide(); $('#schedule-future-wrapper').show(); } else { $('#start-scheduled-wrapper').hide(); $('#schedule-future-wrapper').hide(); } var $btnNext = $('#create-session-buttons .btn-next'); if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) { $btnNext.addClass('disabled') } else { $btnNext.removeClass('disabled'); } toggleStepStatus(); } function togglePolicyTypeChanged(event) { $('#session-policy-info .info-box').addClass('hidden'); $('#session-policy-info .info-box[policy-type="' + $(event.target).attr('policy-id') + '"]').removeClass('hidden'); } function toggleMusicianAccessTypes(event) { $('#session-musician-access-info .info-box').addClass('hidden'); $('#session-musician-access-info .info-box[musician-access-type="' + $(event.target).val() + '"]').removeClass('hidden'); } function toggleFanAccessTypes(event) { $('#session-fans-access-info .info-box').addClass('hidden'); $('#session-fans-access-info .info-box[fans-access-type="' + $(event.target).val() + '"]').removeClass('hidden'); } function toggleFriendsCanJoinTypes(event) { $('#session-friends-can-join-info .info-box').addClass('hidden'); $('#session-friends-can-join-info .info-box[friends-can-join-type="' + $(event.target).val() + '"]').removeClass('hidden'); } function selectBand() { var bandId = $bandList.get(0).options[$bandList.get(0).selectedIndex].value; if (bandId != '') { var url = "/api/bands/" + bandId + "/musicians"; return $.ajax({ type: "GET", dataType: "json", url: url, processData:false, error: app.ajaxError }) .done(function(response) { $.each(response, function(index, val) { if (val.id !== context.JK.currentUserId) { inviteMusiciansUtil.addInvitationIfAbsent(val.name, val.id); } }); }) } } // asks the instrument selector for the creator's specified instruments, and defaults to Other/Beginner if none were selected function getCreatorInstruments() { var instruments = instrumentSelector.getSelectedInstruments(); if(instruments.length == 0) { var otherId = context.JK.server_to_client_instrument_map.Other.server_id; // get server ID var otherInstrumentInfo = context.JK.instrument_id_to_instrument[otherId]; // get display name var beginnerLevel = 1; // default to beginner instruments = [ {id: otherId, name: otherInstrumentInfo.display, level: beginnerLevel} ]; } return instruments; } function events() { $createTypes.on("ifChanged", toggleCreateType); $startTimeList.on('change', function() { toggleStartTime(); }); $policyTypes.on("ifChanged", togglePolicyTypeChanged); $('#session-step-5 #session-musician-access').on('change', toggleMusicianAccessTypes); $('#session-step-5 #session-fans-access').on('change', toggleFanAccessTypes); $('#session-step-5 #session-friends-can-join').on('change', toggleFriendsCanJoinTypes); $('div[layout-id="createSession"] .btn-email-invitation').click(function() { invitationDialog.showEmailDialog(); }); $('div[layout-id="createSession"] .btn-gmail-invitation').click(function() { invitationDialog.showGoogleDialog(); }); $('div[layout-id="createSession"] .btn-facebook-invitation').click(function(e) { invitationDialog.showFacebookDialog(e); }); $(friendInput).focus(function() { $(this).val(''); }); $bandList.on('change', function() { selectBand() } ); $inputFiles.on('change', changeSelectedFiles); $btnSelectFiles.on('click', toggleSelectFiles); $quickStartSoloBtn.on('click', clickQuickStartSolo) $quickStartFriendsBtn.on('click', clickQuickStartFriends) $quickStartOpenBtn.on('click', clickQuickStartPublic) $startOrScheduledBtn.on('click', clickStartOrSchedule) } //handle jamkazam:// custom URL scheme params //when a user submits create new session form (in the new react website) //this custom url scheme is loaded and as a result the JamKazam app loads create session window. function initCustomUrlScheme(){ //an example URL would be: https://www.jamkazam.com/client#/createSession/custom~yes|privacy~2|description~hello|inviteeIds~1,2,3,4 var hash = decodeURIComponent(context.location.hash); var qStr = hash.substring(hash.lastIndexOf('/') + 1); //decode the query params according to the custom format var qParamsArr = qStr.split('|'); var isCustom, privacy, description, inviteeIds; qParamsArr.forEach(function(q){ var qp = q.split('~') if(qp[0] === 'custom') isCustom = qp[1] if(qp[0] === 'privacy') privacy = qp[1] if(qp[0] === 'description') description = qp[1] if(qp[0] === 'inviteeIds') inviteeIds = qp[1] }) if(isCustom !== 'yes'){ return; } createSessionSettings.description = description; switch(privacy){ case privacyMap['private_invite']: clickQuickStartFriends(); break; case privacyMap['private_approve']: clickQuickStartSolo() break; case privacyMap['public']: clickQuickStartPublic(); break; default: logger.debug('Invalid session privacy value') return } waitUntilSessionCreated().then(function(){ //now async send invitations if(createSessionSettings.newSessionId && inviteeIds !== undefined){ var inviteUserIds = inviteeIds.split(','); inviteUserIds.forEach(function(inviteId){ var invite = { music_session: createSessionSettings.newSessionId, receiver: inviteId }; rest.createMusicianInvite(invite).then(function(resp){ console.log("Invitation was sent") }).catch(function(error){ logger.debug(error) }) }) } }).catch(function(error){ logger.debug(error) }); } function waitUntilSessionCreated(){ return new Promise(function(resolve, reject){ var maxAttempts = 5; var attempt = 0; try{ var sessionCreateInterval = setInterval(function(){ attempt++; console.log('_DEBUG_ trying to get the sessionId....', attempt) if(createSessionSettings.newSessionId){ clearInterval(sessionCreateInterval) resolve() }else if(attempt > maxAttempts){ reject("Maximum number of attepts for getting a sessionId is exceeded.") } }, 1000) }catch(error){ reject(error) } }) } function initialize(invitationDialogInstance, friendSelectorDialog, instrumentSelectorInstance, instrumentRSVPSelectorInstance) { inviteMusiciansUtil = new JK.InviteMusiciansUtil(app); inviteMusiciansUtil.initialize(friendSelectorDialog); invitationDialog = invitationDialogInstance; friendInput = inviteMusiciansUtil.inviteSessionCreate('#create-session-invite-musicians', "

    Who do you want to invite?

    "); //' instrumentSelector = instrumentSelectorInstance; instrumentRSVP = instrumentRSVPSelectorInstance; var screenBindings = {'beforeShow': beforeShow, 'afterShow': afterShow, 'beforeHide' : beforeHide}; app.bindScreen('createSession', screenBindings); $wizardSteps = $screen.find('.create-session-wizard'); $templateSteps = $('#template-session-steps'); $templateButtons = $('#template-session-buttons'); $sessionButtons = $('#create-session-buttons'); $startTimeList = $screen.find('#start-time-list'); $endTimeList = $screen.find('#end-time-list'); $timezoneList = $screen.find('#timezone-list'); $recurringModeList = $screen.find('#recurring-mode-list'); $screenStep1 = $screen.find('#session-step-1'); $createTypes = $screen.find('input[name="session-when"]'); $createTypeHelpers = $screen.find('.session-when-info div'); $scheduledSessions = $screenStep1.find("#scheduled-session-list"); $languageList = $screen.find('#session-language-list'); $bandList = $screen.find('#session-band-list'); $sessionPlusMusiciansLabel = $screen.find('label[for="session-plus-musicians"]'); $editScheduledSessions = $screen.find('#edit_scheduled_sessions'); $btnSelectFiles = $screen.find('#session-notation-file-selection'); $selectedFilenames = $screen.find('#selected-filenames'); $uploadSpinner = $screen.find('#file-upload-spinner'); $policyTypes = $screen.find('input[name="session-policy-type"]'); $fetchingSpinner = $screen.find('#fetching-spinner'); $fetchingSpinnerLabel = $screen.find('#fetching-spinner-label'); $noSessionFound = $screen.find("#scheduled-session-not-found"); $sessionHeader = $screen.find('.session-header') $quickStartSoloBtn = $screen.find('.quick-start-solo') $quickStartFriendsBtn = $screen.find('.quick-start-friends') $quickStartOpenBtn = $screen.find('.quick-start-open') $startOrScheduledBtn = $screen.find('.start-or-schedule') $featureSessions = $screen.find('.featured-sessions tbody') $useNewVideo = $screen.find('#video-beta') $useNewVideoSelect = $screen.find('#video-beta-options') initializeControls(); events(); setTimeout(function(){ initCustomUrlScheme(); }, 1000); } this.initialize = initialize; return this; } })(window, jQuery);