(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.InvitationDialog = function(app) { var logger = context.JK.logger; var rest = context.JK.Rest(); var waitForUserToStopTypingTimer; var sendingEmail = false; var deferredFbInvite = null; var facebookHelper = null; function trackMetrics(emails, googleInviteCount) { var allInvitations = emails.length; // all email invites, regardless of how they got in the form var emailInvitations = allInvitations - (googleInviteCount ? googleInviteCount : 0); // take out google invites context.JK.GA.trackServiceInvitations(context.JK.GA.InvitationTypes.email, emailInvitations); if (googleInviteCount) { context.JK.GA.trackServiceInvitations(context.JK.GA.InvitationTypes.google, googleInviteCount); } } function createFbInvite() { if(deferredFbInvite == null || deferredFbInvite.isRejected()) { deferredFbInvite = rest.createFbInviteUrl(); } return deferredFbInvite; } function filterInvitations() { waitForUserToStopTypingTimer = null; var filter = $('#invitation-dialog input[name=email-filter]').val(); var showAll = true; if(filter.length > 1) { showAll = false; } $('#invitation-checkboxes').children().each(function (index, node) { var input = $(node).find('input'); if(showAll) { $(node).show() } else { var email = input.attr('data-email'); if(email.toLowerCase().indexOf(filter.toLowerCase()) > -1) { $(node).show() } else { if(!input.is(':checked')) { $(node).hide() } } } }); } function onFilterChange() { if(waitForUserToStopTypingTimer) { clearTimeout(waitForUserToStopTypingTimer); } waitForUserToStopTypingTimer = setTimeout(filterInvitations, 300); } function registerEvents(onOff) { if(onOff) { $('#btn-send-invitation').on('click', sendEmail); $('#btn-next-invitation').on('click', clickNext); $('#invitation-dialog input[name=email-filter]').on('input', onFilterChange); } else { $('#btn-send-invitation').off('click', sendEmail); $('#btn-next-invitation').off('click', clickNext); $('#invitation-dialog input[name=email-filter]').off('input', onFilterChange); } } function sendInvitation(i, emails) { rest.createInvitation($.trim(emails[i]), $('#txt-message').val()) .always(function() { if(i < emails.length - 1) { sendInvitation(i + 1, emails); } }); } // send invitations one after another, so as not to 'spam' the server very heavily. // this should be a bulk call, clearly function sendEmail(e) { if(!sendingEmail) { sendingEmail = true; var emails = $('#txt-emails').val().split(','); if(emails.length > 0) { sendInvitation(0, emails); } trackMetrics(emails, $('#txt-emails').data('google_invite_count')); } } function clickNext() { $('#invitation-textarea-container').show(); $('#invitation-checkbox-container').hide(); $('#btn-send-invitation').show(); $('#btn-next-invitation').hide(); } function showEmailDialog() { $('#invitation-dialog').show(); $('#invitation-textarea-container').show(); $('#invitation-checkbox-container').hide(); $('#btn-send-invitation').show(); $('#btn-next-invitation').hide(); clearTextFields(); app.layout.showDialog('inviteUsers') } function showGoogleDialog() { $('#invitation-dialog').show(); $('#invitation-textarea-container').hide(); $('#invitation-checkbox-container').show(); $('#btn-send-invitation').hide(); $('#btn-next-invitation').show(); clearTextFields(); app.layout.showDialog('inviteUsers') $('#invitation-checkboxes').html('