/** * Created by Benny on 12.10.2014. */ "use strict"; var TB = TB || {}; TB.Control = TB.Control || {}; TB.Control.Auth = { login : function( params ) { var page = new TB.Page( 'auth' ), redirect = params && params.redirect ? params.redirect : null; page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; TB.GUI.show( page, { activeTab: 'login' } ); // Login Button page.$container.find( '#btn_login').click( function() { if ( !TB.GUI.performFormValidation( $( '#form_login' ) ) ) { return false; } TB.Service.request( 'Auth', 'login', { 'email' : page.$container.find( 'input[name="login.email"]' ).val(), 'pass' : page.$container.find( 'input[name="login.pass"]' ).val() }, function( data ) { if ( data && data.account && data.profile && data.session && data.profiles && data.teams ) { TB.Client.setSessionData( data.account, data.profile, data.session, data.profiles, data.teams ); TB.Ext.Push.register(); TB.GUI.setTeamName(); if ( redirect ) { TB.Controller.do( 'Auth', 'redirect', { redirect : redirect } ); TB.Utils.trackEvent( 'auth', 'redirect' ); } else { TB.Controller.do( 'News' ); TB.Utils.trackEvent( 'auth', 'login' ); } } else if ( data && data.error && data.error == 'not_validated' ) { TB.Ext.Notification.show( 'Deine Email Adresse ist noch nicht validiert. Bitte schau in deine Emails und klicke auf den Aktivierungslink.', TB.Ext.Notification.TYPE_WARNING ); } else { TB.Ext.Notification.show( 'Anmeldung gescheitert. Passwort und/oder Email sind fehlerhaft.', TB.Ext.Notification.TYPE_DANGER ); } }, $( this ) ); return false; }); // Forgot passwort link / Register actions page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); }, registertrainer : function( params ) { var page = new TB.Page( 'auth' ); page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); // Track registration try { TB.Utils.trackEvent( 'form', 'contactform' ); } catch (e) { // Fail silently } }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; var buildRegistration = function( tmplData ) { TB.GUI.show( page, tmplData ); $( '#main_auth').on( 'blur', "#form_register_trainer input", function() { TB.GUI.performInputValidation( $( this ) ); }); page.$container.find( '#btn_register_trainer').click( function() { if ( !TB.GUI.performFormValidation( $( '#form_register_trainer' ) ) ) { return false; } TB.Service.request( 'Auth', 'registerTrainer', { 'gender' : page.$container.find( '#form_register_trainer input[name="register.gender"]:checked' ).val(), 'team_name' : page.$container.find( '#form_register_trainer input[name="register.team_name"]' ).val(), 'team_category' : page.$container.find( '#form_register_trainer input[name="register.team_category"]' ).val(), 'email' : page.$container.find( '#form_register_trainer input[name="register.email"]' ).val(), 'pass' : page.$container.find( '#form_register_trainer input[name="register.pass"]' ).val(), 'first_name' : page.$container.find( '#form_register_trainer input[name="register.first_name"]').val(), 'last_name' : page.$container.find( '#form_register_trainer input[name="register.last_name"]').val(), 'subscribed_news' : page.$container.find( '#form_register_trainer input[name="register.subscribe_news"]').is(":checked" ) ? "on" : "off", 'token' : page.$container.find( '#form_register_trainer input[name="register.token"]').val() }, function( data ) { if ( data && data.account && data.profile ) { TB.GUI.show( page, { activeTab: 'register_trainer_done' } ); page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); // Tracking try { TB.Utils.trackEvent( 'auth', 'team_created' ); // Google Tracking window.goog_report_conversion && window.goog_report_conversion(); // Facebook Tracking window.fbq && fbq('track', 'CompleteRegistration'); } catch( err ) { // Fail silently } } else { if ( data.error == "invalid-credentials" ) { TB.Ext.Alert.show( 'Accountdaten', 'Die eingegebene Email+Password Kombination stimmt nicht überein.' ); } } }, $( this ), function( data ) { if ( data && data.gen_err && "email_already_exists" == data.gen_err ) { TB.Ext.Notification.show( 'Die EMail Adresse existiert bereits. Wenn Du schon einen Account hast, dann kannst Du unter den Menüpunkt "Profile" im Seitenmenü ein neues Team anlegen.', TB.Ext.Notification.TYPE_INFO); } else { TB.Ext.Notification.show( 'Registrierung fehlgeschlagen. Bitte versuche es zu einem späteren Zeitpunkt nochmal.', TB.Ext.Notification.TYPE_DANGER ); } } ); return false; }); // Forgot passwort link / Register actions page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); page.$container.find( '#registerteamcategory' ).easyAutocomplete({ // Note: // Duplicate list data : TB.Config.General.team_categories, list: { maxNumberOfElements: 10, match: { enabled: true } } }); }; buildRegistration( { activeTab: 'register_trainer' } ); }, registerplayer : function( params ) { var page = new TB.Page( 'auth' ); page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; var token = ( params && params.t ) ? params.t : null; $( '#main_auth').on( 'blur', "#form_register_player input", function() { TB.GUI.performInputValidation( $( this ) ); }); var buildRegistration = function( tmplData ) { TB.GUI.show( page, tmplData ); // Forgot passwort link / Register actions page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); page.$container.find( '#btn_register_player').click( function() { if ( !TB.GUI.performFormValidation( $( '#form_register_player' ) ) ) { return false; } TB.Service.request( 'Auth', 'registerPlayer', { 'pass' : page.$container.find( '#form_register_player input[name="register.pass"]' ).val(), 'subscribed_news' : page.$container.find( '#form_register_player input[name="register.subscribe_news"]').is(":checked" ) ? "on" : "off", 'token' : page.$container.find( '#form_register_player input[name="register.token"]').val() }, function( data ) { if ( data && data.account && data.profile && data.session && data.profiles && data.teams ) { TB.Client.setSessionData( data.account, data.profile, data.session, data.profiles, data.teams ); TB.Ext.Push.register(); TB.Controller.do( 'News' ); TB.Utils.trackEvent( 'auth', 'player_created' ); } else { if ( data.error == "invalid-credentials" ) { TB.Ext.Alert.show( 'Accountdaten', 'Die eingegebene Email+Password Kombination stimmt nicht überein.' ); } else if ( data.error == "invalid-token" ) { TB.Ext.Alert.show( 'Einladung ungültig', 'Deine Einladung ist leider nicht mehr gültig. Bitte frage den Trainer nach einer neuen.' ); } } }, $( this ) ); return false; }); }; TB.Service.request( 'Auth', 'getInvitation', { token: token }, function( data ) { buildRegistration( { activeTab: 'register_player', token: data.token, invitation: data.invitation, account : data.account, inviter : data.inviter, team : data.team } ); } ); }, forgot_password : function() { var page = new TB.Page( 'auth' ); page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; TB.GUI.show( page, { activeTab: 'forgot_password' } ); $( '#main_auth').on( 'blur', "form input", function() { TB.GUI.performInputValidation( $( this ) ); }); // Login Button page.$container.find( '#btn_forgot_password').click( function() { if (!TB.GUI.performFormValidation($('#form_forgot_password'))) { return false; } TB.Service.request( 'Auth', 'requestPasswordReset', { 'email' : page.$container.find( '#form_forgot_password input[name="forgot_password.email"]' ).val() }, function( data ) { if ( data.res == "account_not_found" ) { TB.Ext.Notification.show( 'Es existiert kein Account mit angegebener Email Adresse.', TB.Ext.Notification.TYPE_DANGER ); } else if ( data.res == "already_sent" ) { TB.Ext.Notification.show( 'Die Email ist bereits unterwegs. Ist sie etwa in Deinem Spam Ordner gelandet?', TB.Ext.Notification.TYPE_WARNING ); } else { TB.Ext.Alert.modal( { title: 'Erfolg!', text: 'Eine Email an Dich ist unterwegs. Bitte schau in Dein Postfach und folge den Anweisungen, um ein neues Passwort zu erstellen.', type: 'success', showCancelButton: false }, function() { TB.Controller.do( 'Auth', 'login' ); }); } }, $( this ) ); return false; } ); // Forgot passwort link / Register actions page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); }, reset_password : function( params ) { var page = new TB.Page( 'auth'), token = ( params && params.t ) ? params.t : null;; page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; TB.GUI.show( page, { activeTab: 'reset_password', pwrtoken: token } ); $( '#main_auth').on( 'blur', "#form_reset_password input", function() { TB.GUI.performInputValidation( $( this ) ); }); // Reset Password Button page.$container.find( '#btn_reset_password').click( function() { if (!TB.GUI.performFormValidation($('#form_reset_password'))) { return false; } TB.Service.request( 'Auth', 'resetPassword', { 'token' : page.$container.find( '#form_reset_password input[name="reset_password.token"]' ).val(), 'password1' : page.$container.find( '#form_reset_password input[name="reset_password.password1"]' ).val(), 'password2' : page.$container.find( '#form_reset_password input[name="reset_password.password2"]' ).val() }, function( data ) { if ( data.res == 'ok' ) { TB.Ext.Alert.modal( { title: 'Erfolg!', text: 'Dein Passwort wurde erfolgreich geändert. Logge Dich gleich damit ein.', type: 'success', showCancelButton: false }, function() { TB.Client.logout(); TB.Controller.do( 'Auth', 'login' ); }); } else { TB.Ext.Alert.modal( { title: 'Oooopps.', text: 'Leider ist bei der Aktion ein Fehler aufgetreten. Versuche es erneut oder kontaktiere unseren Support.', type: 'warning', showCancelButton: false }, function() { TB.Controller.do( 'Auth', 'login' ); }); } }, $( this ) ); return false; } ); // Forgot passwort link / Register actions page.$container.find( '[data-refdivid]').click( function() { TB.Controller.do( 'Auth', $(this).attr( 'data-refdivid') ); }); }, confirm_email_change : function( params ) { var page = new TB.Page( 'auth'), token = ( params && params.t ) ? params.t : null;; page.onEnter = function( params ) { $( '#main').hide(); $( '#main_auth').show(); this.$container = $( '#main_auth' ); TB.Page.prototype.onEnter.call( this, params ); }; page.onLeave = function() { TB.Page.prototype.onLeave.call( this ); $( '#main_auth').hide(); $( '#main').show(); }; TB.Service.request( 'Auth', 'confirmEmailChange', { token : token }, function( res ) { var actionResult = 'nok'; if ( res && res.email_change_result ) { switch ( res.email_change_result ) { case 'ok': actionResult = 'ok'; break; case 'timeup': actionResult = 'timeup' break; } } TB.GUI.show( page, { activeTab: 'confirm_email_change', actionResult : actionResult } ); page.$container.find( '#btn-continue-after-confirm-email').click( function() { if ( TB.Client.isLoggedIn() ) { TB.Controller.do( 'News' ); } else { TB.Controller.do( 'Auth', 'login' ); } return false; }); }); }, validate_email : function( params ) { var token = ( params && params.t ) ? params.t : null; $( '#main').hide(); $( '#main_auth').show(); TB.Service.request('Auth', 'validateEmail', {token: token}, function (data) { if (data.res == 'ok') { TB.Ext.Alert.modal( { title: 'Super!', text: 'Dein Account ist nun erfolgreich validiert.', type: 'success', showCancelButton: false }, function() { if ( TB.Client.isLoggedIn() ) { if ( data.profile ) { TB.Client.updateSessionProfile( data.profile ); } $( '#main_auth').hide(); $( '#main').show(); TB.Controller.do( 'News' ); } else { TB.Controller.do( 'Auth', 'login' ); } }); } else { TB.Ext.Alert.modal( { title: 'Oooopps.', text: 'Leider ist bei der Aktion ein Fehler aufgetreten. Versuche es später erneut oder kontaktiere unseren Support.', type: 'warning', showCancelButton: false }, function() { TB.Controller.do( 'Auth', 'login' ); }); } }); }, redirect : function( params ) { var target = params && params.redirect ? decodeURIComponent( params.redirect ) : null, reObj = TB.Utils.decoreRedirect( target ), targetProfileId = null, isValidTargetId = false; if ( false === TB.Client.isLoggedIn() ) { TB.Controller.do( 'Auth', 'login', { redirect : ( params && params.redirect ? params.redirect : null ) } ); } else if ( reObj && reObj.c && reObj.a ) { if ( reObj.targetTeamId && TB.Client.profile.team_id != reObj.targetTeamId ) { // Check if targetTeamId is valid for current session account for ( var pi = 0; pi < TB.Client.profiles.length; pi++ ) { if ( TB.Client.profiles[ pi ].team_id == reObj.targetTeamId ) { targetProfileId = TB.Client.profiles[ pi ].id; isValidTargetId = true; break; } } if ( true === isValidTargetId ) { // If valid TB.Service.request( 'Profile', 'change', { profile_id : targetProfileId }, function( data ) { if ( data && data.session && data.profile && data.profiles && data.teams ) { TB.Client.setSessionData( TB.Client.account, data.profile, data.session, data.profiles, data.teams ); $( window ).off( 'hashchange' ); TB.Controller.updateHash( reObj.c, reObj.a, reObj.params ); location.reload( true ); } } ); } else { // If not - redirect to News index TB.Controller.do( 'News', 'index' ); } } else { TB.Controller.do( reObj.c, reObj.a, reObj.params ); } } else { // Default case - redirect to News index TB.Controller.do( 'News', 'index' ); } } };