/** * event binding */ App.signin.init = function() { $('.wrapper').append(App.render('signin')); $(document).on('click', '.signin-facebook-button', function() { App.signin.facebook.login(); }); $(document).on('click', '.signin-form-button', function() { App.signin.sendForm(); }); $(document).on('click', '.signin-password-help', function() { App.signin.passwordHelp.show(); }); $(document).on('click', '.signin-password-help-back', function() { App.signin.passwordHelp.hide(); }); $(document).on('click', '.signin-password-help-button', function() { App.signin.passwordHelp.sendForm(); }); $(document).on('submit', '.signin-help-form', function() { App.signin.passwordHelp.sendForm(); return false; }); $(document).on('submit', '.signin-form', function(e) { App.signin.sendForm(); e.stopPropagation(); return false; }); $(document).on('click', '.signin-icon', function() { App.signin.show(); }); $(document).on('click', '.signup-link', function() { App.signup.show( false ); $('.signin-container').dialog('close'); }); $(document).on('click', '.sign-in-icon', function() { if (App.config.user.id_user) { History.pushState({}, 'Crunchbutton - Orders', '/orders'); } else { App.signin.show(); } }); $(document).on('click', '.signout-icon', function() { App.signin.signOut(); }); $(document).on('click', '.signin-user', function() { History.pushState({}, 'Your Account', '/orders');; }); History.Adapter.bind(window,'statechange',function() { App.signin.checkUser(); }); App.signin.facebook.init(); } App.signin.sendForm = function(){ // Checks it fhe login is a phone var login = $( 'input[name=signin-email]' ).val(); login = login.replace(/[^\d]*/gi,'') if( !App.phone.validate( login ) ){ // It seems not to be a phone number, lets check if it is a email login = $.trim( $( 'input[name=signin-email]' ).val() ); if( !/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( login ) ){ login = false; } } if( !login ){ alert( 'Please enter a valid email or phone.' ); $( 'input[name=signin-email]' ).focus(); return; } if( $.trim( $( 'input[name=signin-password]' ).val() ) == '' ){ alert( 'Please enter your password.' ); $( 'input[name=signin-password]' ).focus(); return; } var email = login, password = $.trim( $( 'input[name=signin-password]' ).val() ), url = App.service + 'user/auth'; $('.signin-error').hide(); $.ajax( { type: 'POST', url: url, data: { 'email' : email, 'password' : password }, dataType: 'json', success: function( json ){ if( json.error ){ $('.signin-error').fadeIn(); } else{ App.config.user = json; App.signin.checkUser(); $( '.signin-container' ).dialog( 'close' ); // If the user is at the restaurant's page - reload it if( App.currentPage == 'restaurant' && App.restaurant.permalink ){ App.page.restaurant( App.restaurant.permalink ); } if( App.giftcard.callback ){ App.giftcard.callback(); } } } } ); } /** * sign out and go to the home page */ App.signin.signOut = function(){ if (confirm( 'Confirm sign out?')){ if( App.signin.facebook.isLogged ){ FB.logout( function(){ $.getJSON('/api/logout',function(){ $( '.signout-icon' ).hide(); location.href = '/'; } ); } ); } else { $.getJSON('/api/logout',function(){ $( '.signout-icon' ).hide(); location.href = '/'; } ); } } } App.signin.facebook = { running: false, init: function() {} }; App.signin.facebook.processStatus = function( session ){ if ( session.status === 'connected' && session.authResponse ) { if( session.authResponse.accessToken ){ App.facebook.registerToken( session.authResponse.accessToken ); } App.signin.facebook.isLogged = true; if( App.signin.facebook.shouldAuth ){ FB.api( '/me', { fields: 'name' }, function( response ) { if ( response.error ) { return; } if( response.id ){ App.signin.facebook.shouldAuth = false; $( '.signin-facebook-message' ).show(); $( '.signup-facebook-message' ).show(); $( '.signin-facebook' ).hide(); $( '.signup-facebook' ).hide(); // Just call the user api, this will create a facebook user var url = App.service + 'user/facebook'; if( !App.signin.facebook.running ){ App.signin.facebook.running = true; $.ajax( { type: 'GET', url: url, dataType: 'json', success: function( json ){ App.signin.facebook.running = true; if( json.error ){ if( json.error == 'facebook id already in use' ){ alert( 'Sorry, It seems the facebook user is already related with other user.' ); } } else { App.config.user = json; App.signin.checkUser(); if( App.giftcard.callback ){ App.giftcard.callback(); } } $( '.signin-container' ).dialog( 'close' ); $( '.signup-container' ).dialog( 'close' ); // If the user is at the restaurant's page - reload it if( App.currentPage == 'restaurant' && App.restaurant.permalink ){ App.page.restaurant( App.restaurant.permalink ); } if( App.currentPage == 'orders' ){ App.page.orders() } App.recommend.relateUser(); } } ); } } }); } } } /** * signin with facebook and get email */ App.signin.facebook.login = function() { App.signin.facebook.shouldAuth = true; FB.login( App.signin.facebook.processStatus,{ scope: App.facebookScope } ); }; /** * show the signin modal */ App.signin.show = function(){ App.signin.passwordHelp.hide(); $('.signin-facebook-message').hide(); $('.signin-facebook').show(); $( 'input[name=signin-email]' ).val( '' ); $( 'input[name=signin-password]' ).val( '' ); $('.signin-error').hide(); $( '.signin-container' ) .dialog( { dialogClass: 'modal-fixed-dialog', modal: true, width: App.modal.contentWidth(), open: function( event, ui ) { $( '.signin-email' ).focus(); } } ); } App.signin.checkUser = function(){ // If the user is logged if( App.config.user.id_user && $.trim( App.config.user.id_user ) != '' ){ $( '.signin-user' ).show(); $( '.signin-icon' ).hide(); $( '.signout-icon' ).hide(); $( '.signin-box-header' ).addClass( 'signin-box-header-min' ); } else { $( '.signin-user' ).hide(); $( '.signin-icon' ).show(); $( '.signup-icon' ).show(); $( '.signout-icon' ).hide(); $( '.signin-box-header' ).removeClass( 'signin-box-header-min' ); } if( App.currentPage == 'home' ){ $( '.config-icon' ).addClass( 'config-icon-desktop-hide' ); } else { $( '.config-icon' ).removeClass( 'config-icon-desktop-hide' ); } } App.signin.passwordHelp = {}; App.signin.passwordHelp.show = function(){ if( $.trim( $( 'input[name=signin-email]' ).val() ) != '' ){ $( 'input[name=password-help-email]' ).val( $.trim( $( 'input[name=signin-email]' ).val() ) ); } $( '.signin-password-help-button' ).show(); $( '.signin-password-help-back' ).show(); $( '.signin-help-container' ).show(); $( '.signin-form-options' ).hide(); $( '.signin-password-help-message' ).hide(); $( '.signin-password-help-message' ).html( '' ); $( 'input[name=password-help-email]' ).focus(); } App.signin.passwordHelp.hide = function(){ $( '.signin-help-container' ).hide(); $( '.signin-form-options' ).show(); } App.signin.passwordHelp.sendForm = function(){ // Checks it fhe login is a phone var login = $( 'input[name=password-help-email]' ).val(); login = login.replace(/[^\d]*/gi,'') if( !App.phone.validate( login ) ){ // It seems not to be a phone number, lets check if it is a email login = $.trim( $( 'input[name=password-help-email]' ).val() ); if( !/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( login ) ){ login = false; } } if( !login ){ alert( 'Please enter a valid email or phone.' ); $( 'input[name=password-help-email]' ).focus(); return; } $( '.password-help-error' ).html( '' ); $( '.password-help-error' ).hide(); var url = App.service + 'user/reset'; $.ajax( { type: 'POST', url: url, data: { 'email' : login }, dataType: 'json', success: function( json ){ if( json.error ){ if( json.error == 'user is not registred' ){ $( '.password-help-error' ).html( 'Sorry, that email/phone is not registered with us.' ); $( '.password-help-error' ).fadeIn(); $( 'input[name=password-help-email]' ).focus() } } else { if( json.success = 'success' ){ $( '.signin-password-help-message' ).show(); $( '.signin-password-help-button' ).hide(); $( '.signin-password-help-back' ).hide(); $( '.signin-password-help-message' ).html( 'You will receive a code to reset your password! It will expire in 24 hours.' ); } } } } ); } App.signin.passwordHelp.reset = {}; App.signin.passwordHelp.reset.init = function(){ $( '.password-reset-container' ) .dialog( { modal: true, dialogClass: 'modal-fixed-dialog', width: App.modal.contentWidth(), close: function( event, ui ) { App.signin.passwordHelp.reset.close(); }, open: function( event, ui ) { $( 'input[name=password-reset-code]' ).focus(); } } ); $( '.password-reset-code-button' ).on( 'click', function(){ App.signin.passwordHelp.reset.sendForm(); } ); $( '.password-change-button' ).on( 'click', function(){ App.signin.passwordHelp.reset.change(); } ); $( '.password-reset-form' ).submit(function() { return false; } ); $( '.password-change-form' ).submit(function() { return false; } ); } App.signin.passwordHelp.reset.sendForm = function(){ $( '.password-reset-code-error' ).html( '' ); $( '.password-reset-code-error' ).hide(); var code = $.trim( $( 'input[name=password-reset-code]' ).val() ); if( code == '' ){ alert( 'Please enter the reset code.' ); $( 'input[name=password-reset-code]' ).focus(); return; } var url = App.service + 'user/code-validate'; $.ajax( { type: 'POST', url: url, data: { 'code' : code }, dataType: 'json', success: function( json ){ if( json.error ){ if( json.error == 'invalid code' ){ $( '.password-reset-code-error' ).html( 'Sorry, this code is invalid.' ); } if( json.error == 'expired code' ){ $( '.password-reset-code-error' ).html( 'Sorry, this code is expired.' ); } $( '.password-reset-code-error' ).fadeIn(); $( 'input[name=password-reset-code]' ).focus() } else { if( json.success = 'valid code' ){ $( '.password-reset-block' ).hide(); $( '.password-change-block' ).show(); $( 'input[name=password-new]' ).focus(); } } } } ); } App.signin.passwordHelp.reset.change = function(){ var code = $.trim( $( 'input[name=password-reset-code]' ).val() ); var password = $.trim( $( 'input[name=password-new]' ).val() ); if( password == '' ){ alert( 'Please enter your password.' ); $( 'input[name=password-new]' ).focus(); return; } var url = App.service + 'user/change-password'; $.ajax( { type: 'POST', url: url, data: { 'code' : code, 'password' : password }, dataType: 'json', success: function( json ){ if( json.error ){ if( json.error == 'invalid code' ){ $( '.password-change-error' ).html( 'Sorry, this code is invalid.' ); } if( json.error == 'expired code' ){ $( '.password-change-error' ).html( 'Sorry, this code is expired.' ); } $( '.password-change-error' ).fadeIn(); } else { if( json.success = 'password changed' ){ $( '.password-change-message' ).fadeIn(); $( '.password-change-block' ).find( 'h1' ).html( 'Done!' ); $( '.password-change-message' ).html( 'Your password has changed!' ); App.signin.passwordHelp.hasChanged = true; } } $( 'input[name=password-new]' ).hide(); $( '.password-change-button' ).hide(); } } ); } App.signin.passwordHelp.reset.close = function(){ if( App.signin.passwordHelp.hasChanged ){ location.href = '/'; } } App.signin.passwordHelp.reset.html = function( path ){ var code = ( path.length > 1 ) ? ( path[ 1 ] ? path[ 1 ] : '' ) : ''; return App.render('passwordhelp', { code: code }); } App.signup = {}; /** * event binding */ App.signup.init = function() { $('.wrapper').append(App.render('signup')); $(document).on('click','.signup-add-password-button', function() { App.signup.show(false); }); $(document).on('click','.signup-icon', function() { App.signup.show( false ); }); $(document).on('click','.signup-form-button', function() { App.signup.sendForm(); }); $(document).on('click','.signup-facebook-button', function() { App.signin.facebook.login(); }); $(document).on('click','.signin-link', function() { App.signin.show(); $('.signup-container').dialog('close'); }); $(document).on('submit','.signup-form', function() { App.signup.sendForm(); return false; }); } /** * show the signup modal */ App.signup.show = function( justFacebook ){ $( '.signup-facebook' ).show(); $( '.signup-facebook-message' ).hide(); if( App.config.user.facebook ){ $( '.signup-facebook-container' ).hide(); } else { $( '.signup-facebook-container' ).show(); } $( 'input[name=signup-password]' ).val( '' ); $( '.signup-form-options' ).show(); $( '.signup-success-container' ).hide(); if( justFacebook ){ $( '.signup-form' ).hide(); } else { $( '.signup-form' ).show(); } $( '.signin-error' ).hide(); $( '.signup-container' ) .dialog( { modal: true, dialogClass: 'modal-fixed-dialog', width: App.modal.contentWidth(), open: function( event, ui ) { $( '.signup-phone' ).focus(); } } ); } App.signup.checkLogin = function(){ var login = $( 'input[name=pay-phone]' ).val().replace(/[^\d]*/gi,''); if( App.phone.validate( login ) ){ var url = App.service + 'user/verify/' + login $.getJSON( url, function( json ) { if( json.error ){ if( json.error == 'user exists' ){ $( 'input[name=pay-password]' ).val( '' ); $( '.password-field' ).hide(); } } else { $( '.password-field' ).fadeIn(); $( 'input[name=pay-password]' ).val( '' ); $( 'input[name=pay-password]' ).focus(); } } ); } else { $( 'input[name=pay-password]' ).val( '' ); $( '.password-field' ).hide(); } } App.signup.sendForm = function(){ login = $.trim( $( 'input[name=signup-email]' ).val() ); if( !/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( login ) ){ login = false; } if( !login ){ alert( 'Please enter a valid email email address.' ); $( 'input[name=signup-email]' ).focus(); return; } if( $.trim( $( 'input[name=signup-password]' ).val() ) == '' ){ alert( 'Please enter your password.' ); $( 'input[name=signup-password]' ).focus(); return; } var password = $.trim( $( 'input[name=signup-password]' ).val() ), url = App.service + 'user/create/local'; $( '.signup-error' ).hide(); $.ajax( { type: 'POST', url: url, data: { 'email' : login, 'password' : password }, dataType: 'json', success: function( json ){ if( json.error ){ if( json.error == 'user exists' ){ $('.signup-error').html( 'It seems that the email is already registered!' ); } $('.signup-error').fadeIn(); } else{ App.config.user = json; $( '.success-phone' ).html( login ); $( '.signup-call-to-action' ).hide(); $( '.signup-form-options' ).hide(); $( '.signup-success-container' ).show(); App.signin.checkUser(); // If the user is at the restaurant's page - reload it if( App.currentPage == 'restaurant' && App.restaurant.permalink ){ App.page.restaurant( App.restaurant.permalink ); } if( App.giftcard.callback ){ $( '.signup-container' ).dialog( 'close' ); App.giftcard.callback(); } App.recommend.relateUser(); } } } ); }