;(function(_, session){ /** * @class Sign In * @extends Backbone.View * @requires Session * @view */ portalGGA.views.SignIn = Backbone.View.extend( /** @lends portalGGA.views.DrawResults.prototype */{ events:{ "submit form" : "login" }, /** {Q.Defer} last triggered login has been processed */ _loginComplete: Q.defer(), /** * Betslip own error notifier * @type {portalGGA.utils.ErrorNotifier} */ errorNotifier: null, /** Redirect URL after login, setting to false prevents redirect */ _redirectURL: null, /** * Rename object, and render on init. * @author mulleti.satyanarayana@gtech.com * @param {Object} options */ constructor: function SignIn( options ){ Backbone.View.apply(this, arguments); this.createErrorNotifier(); var self = this; jQuery.validator.setDefaults({ highlight: function(element, errorClass, validClass) { if (element.type === "radio" || element.type === "checkbox") { this.findByName(element.name).addClass(errorClass).removeClass(validClass); } else if ($(element).parent().hasClass('input-inline') || $(element).parent().hasClass('input-group')) { $(element).closest('.form-group').addClass('has-error'); } else { $(element).closest('.form-group').removeClass('has-success has-feedback').addClass('has-error has-feedback').find('span').remove(); $(element).closest('.form-row').find('span').remove(); $(element).parent().find('span.glyphicon').remove(); //$('').insertAfter(element); } }, unhighlight: function(element, errorClass, validClass) { if (element.type === "radio" || element.type === "checkbox") { this.findByName(element.name).removeClass(errorClass).addClass(validClass); } else if ($(element).parent().hasClass('input-inline') || $(element).parent().hasClass('input-group')) { $(element).closest('.form-group').removeClass('has-error'); } else { $(element).closest('.form-group').removeClass('has-error has-feedback').find('span').remove(); $(element).closest('.form-group').find('.error').remove(); /* $(element).closest('.form-group').removeClass('has-error has-feedback').addClass('has-success has-feedback').find('span').remove(); $(element).parent().find('span.glyphicon').remove(); $('').insertAfter(element); */ } }, errorPlacement: function(error, element) { if (element.parent('.input-group').length || element.prop('type') === 'checkbox' || element.prop('type') === 'radio') { error.insertAfter(element.parent()); } else if ($(element).parent().hasClass('input-inline') || $(element).parent().hasClass('input-group')) { $(element).closest('.form-group').find('>div').append(error); } else { error.insertAfter(element); } } }); $("#sign-inform").validate({}); }, /** * Creates error notifier if the login modal is shown */ createErrorNotifier: function() { if (!this.errorNotifier) { this.errorNotifier = new portalGGA.utils.ErrorNotifier( this.$('.errorNotifier') ); } }, /** * Does an asynchronous login * @param {Event} [event] * @returns {portalGGA.views.BetslipLoginModal} self */ login: function login(e){ e && e.preventDefault(); console.log("In Login function......."); if (this.$("form[name='sign-inform']").valid()) { var self = this, button = self.$("form[name='sign-inform'] button[type='submit']"); button.button('loading'); errorNotifier = new portalGGA.utils.LoginErrorNotifier( $('.errorNotifier') ); errorNotifier.clear(); var username = self.$('[name=loginModal-username]').val(); var password = self.$('[name=loginModal-password]').val(); console.log('Starting login for ' + username, self, self._loginComplete); if(location.href.indexOf("closeAccount")!=-1){ self._redirectURL = "/en-us/myaccount/playerinformation.html/closeAccount" } return Q.when(portalGGA.utils.session.login(username, password, self._redirectURL)) .then(function loginSuccess() { console.log('Login processed for ' + username, self, self._loginComplete); self.hide(); button.button('reset'); return self._loginComplete.resolve(self); }, function loginError(reason) { console.log("Authentication error occurred", reason); button.button('reset'); return errorNotifier.show(reason,"alert-danger") .then(function(){ button.button('reset'); return Q.reject(reason); }); } ).fin(function removeCheckout(){ sessionStorage.removeItem("checkout"); sessionStorage.removeItem('quickcheckout'); }); } return Q.reject('validation'); } }); }(_, portalGGA.utils.session))