;(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))