(function($){
$.fn.ticker = function(options) {
// Extend our default options with those provided.
// Note that the first arg to extend is an empty object -d
// this is to keep from overriding our "defaults" object.
var opts = $.extend({}, $.fn.ticker.defaults, options);
// check that the passed element is actually in the DOM
if ($(this).length == 0) {
if (window.console && window.console.log) {
window.console.log('Element does not exist in DOM!');
}
else {
alert('Element does not exist in DOM!');
}
return false;
}
/* Get the id of the UL to get our news content from */
var newsID = '#' + $(this).attr('id');
/* Get the tag type - we will check this later to makde sure it is a UL tag */
var tagType = $(this).get(0).tagName;
return this.each(function() {
// get a unique id for this ticker
var uniqID = getUniqID();
/* Internal vars */
var settings = {
position: 0,
time: 0,
distance: 0,
newsArr: {},
play: true,
paused: false,
contentLoaded: false,
dom: {
contentID: '#ticker-content-' + uniqID,
titleID: '#ticker-title-' + uniqID,
titleElem: '#ticker-title-' + uniqID + ' SPAN',
tickerID : '#ticker-' + uniqID,
wrapperID: '#ticker-wrapper-' + uniqID,
revealID: '#ticker-swipe-' + uniqID,
revealElem: '#ticker-swipe-' + uniqID + ' SPAN',
controlsID: '#ticker-controls-' + uniqID,
prevID: '#prev-' + uniqID,
nextID: '#next-' + uniqID,
playPauseID: '#play-pause-' + uniqID
}
};
// if we are not using a UL, display an error message and stop any further execution
if (tagType != 'UL' && tagType != 'OL' && opts.htmlFeed === true) {
debugError('Cannot use <' + tagType.toLowerCase() + '> type of element for this plugin - must of type
or ');
return false;
}
// set the ticker direction
opts.direction == 'rtl' ? opts.direction = 'right' : opts.direction = 'left';
// lets go...
initialisePage();
/* Function to get the size of an Object*/
function countSize(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
function getUniqID() {
var newDate = new Date;
return newDate.getTime();
}
/* Function for handling debug and error messages */
function debugError(obj) {
if (opts.debugMode) {
if (window.console && window.console.log) {
window.console.log(obj);
}
else {
alert(obj);
}
}
}
/* Function to setup the page */
function initialisePage() {
// process the content for this ticker
processContent();
// add our HTML structure for the ticker to the DOM
$(newsID).wrap('');
// remove any current content inside this ticker
$(settings.dom.wrapperID).children().remove();
$(settings.dom.wrapperID).append('
');
$(settings.dom.wrapperID).removeClass('no-js').addClass('ticker-wrapper has-js ' + opts.direction);
// hide the ticker
$(settings.dom.tickerElem + ',' + settings.dom.contentID).hide();
// add the controls to the DOM if required
if (opts.controls) {
// add related events - set functions to run on given event
$(settings.dom.controlsID).live('click mouseover mousedown mouseout mouseup', function (e) {
var button = e.target.id;
if(!button){
button = $(e.target).closest('[id]').attr('id');
}
if (e.type == 'click') {
switch (button) {
case settings.dom.prevID.replace('#', ''):
// show previous item
settings.paused = true;
$(settings.dom.playPauseID).addClass('paused');
manualChangeContent('prev');
break;
case settings.dom.nextID.replace('#', ''):
// show next item
settings.paused = true;
$(settings.dom.playPauseID).addClass('paused');
manualChangeContent('next');
break;
case settings.dom.playPauseID.replace('#', ''):
// play or pause the ticker
if (settings.play == true) {
settings.paused = true;
$(settings.dom.playPauseID).addClass('paused');
pauseTicker();
}
else {
settings.paused = false;
$(settings.dom.playPauseID).removeClass('paused');
restartTicker();
}
break;
}
}
else if (e.type == 'mouseover' && $('#' + button).hasClass('controls')) {
$('#' + button).addClass('over');
}
else if (e.type == 'mousedown' && $('#' + button).hasClass('controls')) {
$('#' + button).addClass('down');
}
else if (e.type == 'mouseup' && $('#' + button).hasClass('controls')) {
$('#' + button).removeClass('down');
}
else if (e.type == 'mouseout' && $('#' + button).hasClass('controls')) {
$('#' + button).removeClass('over');
}
});
// add controls HTML to DOM
$(settings.dom.wrapperID).append('
');
}
if (opts.displayType != 'fade') {
//Anurag - Commented mouse over and mouse out events on displayType:Reveal
// add mouse over on the content
/* $(settings.dom.contentID).mouseover(function () {
if (settings.paused == false) {
pauseTicker();
}
}).mouseout(function () {
if (settings.paused == false) {
restartTicker();
}
}); */
}
// we may have to wait for the ajax call to finish here
if (!opts.ajaxFeed) {
//settings.nextnewslock = 0;
setupContentAndTriggerDisplay();
}
}
/* Start to process the content for this ticker */
function processContent() {
// check to see if we need to load content
if (settings.contentLoaded == false) {
// construct content
if (opts.ajaxFeed) {
if (opts.feedType == 'xml') {
$.ajax({
url: opts.feedUrl,
cache: false,
dataType: opts.feedType,
async: true,
success: function(data){
count = 0;
// get the 'root' node
for (var a = 0; a < data.childNodes.length; a++) {
if (data.childNodes[a].nodeName == 'rss') {
xmlContent = data.childNodes[a];
}
}
// find the channel node
for (var i = 0; i < xmlContent.childNodes.length; i++) {
if (xmlContent.childNodes[i].nodeName == 'channel') {
xmlChannel = xmlContent.childNodes[i];
}
}
// for each item create a link and add the article title as the link text
for (var x = 0; x < xmlChannel.childNodes.length; x++) {
if (xmlChannel.childNodes[x].nodeName == 'item') {
xmlItems = xmlChannel.childNodes[x];
var title, link = false;
for (var y = 0; y < xmlItems.childNodes.length; y++) {
if (xmlItems.childNodes[y].nodeName == 'title') {
title = xmlItems.childNodes[y].lastChild.nodeValue;
}
else if (xmlItems.childNodes[y].nodeName == 'link') {
link = xmlItems.childNodes[y].lastChild.nodeValue;
}
if ((title !== false && title != '') && link !== false) {
settings.newsArr['item-' + count] = { type: opts.titleText, content: '' + title + '' }; count++; title = false; link = false;
}
}
}
}
// quick check here to see if we actually have any content - log error if not
if (countSize(settings.newsArr < 1)) {
debugError('Couldn\'t find any content from the XML feed for the ticker to use!');
return false;
}
settings.contentLoaded = true;
setupContentAndTriggerDisplay();
}
});
}
else {
debugError('Code Me!');
}
}
else if (opts.htmlFeed) {
if($(newsID + ' LI').length > 0) {
$(newsID + ' LI').each(function (i) {
// maybe this could be one whole object and not an array of objects?
settings.newsArr['item-' + i] = { type: opts.titleText, content: $(this).html()};
});
}
else {
debugError('Couldn\'t find HTML any content for the ticker to use!');
return false;
}
}
else {
debugError('The ticker is set to not use any types of content! Check the settings for the ticker.');
return false;
}
}
}
function setupContentAndTriggerDisplay() {
settings.contentLoaded = true;
settings.nextnewslock = 0;//anurag - my default variable to stop animation
//settings.noAniforFirst = 0;
// update the ticker content with the correct item
// insert news content into DOM
$(settings.dom.titleElem).html(settings.newsArr['item-' + settings.position].type);
$(settings.dom.contentID).html(settings.newsArr['item-' + settings.position].content);
var dataLen = $(settings.dom.contentID).text();
$('.ticker-content').css('margin-left','0px');
$('.ticker-content span').css('margin-left','0px');
var desk_data_len = 90;
// var iOS = ( navigator.userAgent.match(/(iPad)/g) ? true : false );
// if(iOS){$('.ticker-content span').css('font-size','55%');
// $('.ticker-title span').css('font-size','80%');
// $('.ticker-title').css('width','180px');
//desk_data_len = 45;
// }
var win_outer_wid= window.innerWidth;
if(win_outer_wid >= 768 && win_outer_wid <= 999) {
desk_data_len = 40;
// $('.ticker-content span').css('font-size','75%');
// $('.ticker-title span').css('font-size','80%');
// $('.ticker-title').css('width','180px');
}
// console.log(dataLen.length);
var abc =1;
if((dataLen.length > desk_data_len) && abc==1){
//console.log('News');
settings.nextnewslock = 1;
var iOS = ( navigator.userAgent.match(/(iPad)/g) ? true : false );
if(iOS){timer = 3000;}
else{timer = 6500;}
//timer = 6500;//(90/13)*1000;
shift=0;
setTimeout(function(){
mycount = function(len,shift) {
//var iOS = ( navigator.userAgent.match(/(iPad)/g) ? true : false );
//if(iOS){shift+=12.5;}
//else{shift+=9.5;}
//console.log(iOS);
var win_outer_wid= window.innerWidth;
if(win_outer_wid >= 768 && win_outer_wid <= 999) {
shift+=8.5;
}else{
shift+=11.5;
}
len++;
// console.log(shift +" :"+ len);
// $('.ticker-content span').css('margin-left','-'+shift+'px');
if((dataLen.length- desk_data_len) >= len ){
shift = mycount(len++,shift);
}
return shift;
};
var shift_main = mycount(1,0);
if(settings.nextnewslock == 1 )
{
//console.log(settings.noAniforFirst);
// if(settings.noAniforFirst == 0){
$(".ticker-content span").css('margin-left', '').delay(1).animate( {marginLeft:'-'+shift_main+'px'}, ((dataLen.length-desk_data_len)*310),'linear',function(){try{if(homeObj.breakingNewsPause == 1){$('.ticker-content span').css('margin-left','0px');}}catch(e){console.log(e);}});
// }
}
// settings.noAniforFirst++;
// $(".ticker-content span").animate( {marginLeft:'-'+shift_main+'px'}, 6000,'linear',function(){try{if(homeObj.breakingNewsPause == 1){$('.ticker-content span').css('margin-left','0px');}}catch(e){console.log(e);}});
// $(".ticker-content span").animate( {marginLeft:'-'+shift_main+'px'}, 5000,'linear',function(){});
}, timer);
}
// set the next content item to be used - loop round if we are at the end of the content
if (settings.position == (countSize(settings.newsArr) -1)) {
settings.position = 0;
}
else {
settings.position++;
}
// get the values of content and set the time of the reveal (so all reveals have the same speed regardless of content size)
distance = $(settings.dom.contentID).width();
time = distance / opts.speed;
// start the ticker animation
revealContent();
}
// slide back cover or fade in content
function revealContent() {
//console.log('reveal content');
$(settings.dom.contentID).css('opacity', '1');
if(settings.play) {
// get the width of the title element to offset the content and reveal
var offset = $(settings.dom.titleID).width() + 45;
$(settings.dom.revealID).css(opts.direction, offset + 'px');
// show the reveal element and start the animation
if (opts.displayType == 'fade') {
//console.log('reveal content if');
// fade in effect ticker
$(settings.dom.revealID).hide(0, function () {
$(settings.dom.contentID).css(opts.direction, offset + 'px').fadeIn(opts.fadeInSpeed, postReveal);
});
}
else if (opts.displayType == 'scroll') {
// to code
}
else {
//console.log('reveal content else');
// default bbc scroll effect
$(settings.dom.revealElem).show(0, function () {
$(settings.dom.contentID).css(opts.direction, offset + 'px').show();
// set our animation direction
animationAction = opts.direction == 'right' ? { marginRight: distance + 'px'} : { marginLeft: distance + 'px' };
$(settings.dom.revealID).css('margin-' + opts.direction, '0px').delay(20).animate(animationAction, time, 'linear', postReveal);
});
}
}
else {
return false;
}
};
// here we hide the current content and reset the ticker elements to a default state ready for the next ticker item
function postReveal() {
if(settings.play) {
// we have to separately fade the content out here to get around an IE bug - needs further investigation
//console.log('a:'+opts.pauseOnItems);
$(settings.dom.contentID).delay(2500).fadeOut(opts.fadeOutSpeed);
// $(settings.dom.contentID).fadeOut(opts.fadeOutSpeed);//anurag-removing delay
// deal with the rest of the content, prepare the DOM and trigger the next ticker
if (opts.displayType == 'fade') {
$(settings.dom.contentID).fadeOut(opts.fadeOutSpeed, function () {
$(settings.dom.wrapperID)
.find(settings.dom.revealElem + ',' + settings.dom.contentID)
.hide()
.end().find(settings.dom.tickerID + ',' + settings.dom.revealID)
.show()
.end().find(settings.dom.tickerID + ',' + settings.dom.revealID)
.removeAttr('style');
setupContentAndTriggerDisplay();
});
}
else {
$(settings.dom.revealID).hide(0, function () {
$(settings.dom.contentID).fadeOut(opts.fadeOutSpeed, function () {
$(settings.dom.wrapperID)
.find(settings.dom.revealElem + ',' + settings.dom.contentID)
.hide()
.end().find(settings.dom.tickerID + ',' + settings.dom.revealID)
.show()
.end().find(settings.dom.tickerID + ',' + settings.dom.revealID)
.removeAttr('style');
//console.log('2');
setupContentAndTriggerDisplay();
});
});
}
}
else {
$(settings.dom.revealElem).hide();
}
}
// pause ticker
function pauseTicker() {
//console.log("Breaking News:Pause the Breaking News Ticker");
//Pause the Breaking News AJAX Call and Refresh
homeObj.breakingNewsPause = 1;
settings.play = false;
// stop animation and show content - must pass "true, true" to the stop function, or we can get some funky behaviour
$(settings.dom.tickerID + ',' + settings.dom.revealID + ',' + settings.dom.titleID + ',' + settings.dom.titleElem + ',' + settings.dom.revealElem + ',' + settings.dom.contentID).stop(true, true);
$(settings.dom.revealID + ',' + settings.dom.revealElem).hide();
$(settings.dom.wrapperID)
.find(settings.dom.titleID + ',' + settings.dom.titleElem).show()
.end().find(settings.dom.contentID).show();
}
// play ticker
function restartTicker() {
settings.nextnewslock = 0;
//$( ".ticker-content span" ).stop();
//console.log("Breaking News:Play the Breaking News Ticker");
settings.play = true;
settings.paused = false;
//Play the Breaking News AJAX Call and Refresh
homeObj.breakingNewsPause = 0;
// start the ticker again
postReveal();
}
// change the content on user input
function manualChangeContent(direction) {
pauseTicker();
//Pause the Breaking News AJAX Call and Refresh
homeObj.breakingNewsPause = 1;
//Set margin to zero when next/previous is clicked while news is scrolling
$('.ticker-content span').css('margin-left','0px');
switch (direction) {
case 'prev':
if (settings.position == 0) {
settings.position = countSize(settings.newsArr) -2;
}
else if (settings.position == 1) {
settings.position = countSize(settings.newsArr) -1;
}
else {
settings.position = settings.position - 2;
}
$(settings.dom.titleElem).html(settings.newsArr['item-' + settings.position].type);
$(settings.dom.contentID).html(settings.newsArr['item-' + settings.position].content);
break;
case 'next':
$(settings.dom.titleElem).html(settings.newsArr['item-' + settings.position].type);
$(settings.dom.contentID).html(settings.newsArr['item-' + settings.position].content);
break;
}
// set the next content item to be used - loop round if we are at the end of the content
if (settings.position == (countSize(settings.newsArr) -1)) {
settings.position = 0;
}
else {
settings.position++;
}
}
});
};
// plugin defaults - added as a property on our plugin function
$.fn.ticker.defaults = {
speed: 0.10,
ajaxFeed: false,
feedUrl: '',
feedType: 'xml',
displayType: 'reveal',
htmlFeed: true,
debugMode: true,
controls: true,
titleText: 'Breaking News',
direction: 'ltr',
pauseOnItems: 3000,
fadeInSpeed: 600,
fadeOutSpeed: 300
};
})(jQuery);
var TimesApps = window.TimesApps || {};
TimesApps.isIncognito = false;
(function(){
function retry(isDone, next) {
var current_trial = 0, max_retry = 50, interval = 10, is_timeout = false;
var id = window.setInterval(
function() {
if (isDone()) {
window.clearInterval(id);
next(is_timeout);
}
if (current_trial++ > max_retry) {
window.clearInterval(id);
is_timeout = true;
next(is_timeout);
}
},
10
);
}
function isIE10OrLater(user_agent) {
var ua = user_agent.toLowerCase();
if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) {
return false;
}
var match = /(?:msie|rv:)\s?([\d\.]+)/.exec(ua);
if (match && parseInt(match[1], 10) >= 10) {
return true;
}
return false;
}
function detectPrivateMode(callback) {
var is_private;
if (window.webkitRequestFileSystem) {
window.webkitRequestFileSystem(
window.TEMPORARY, 1,
function() {
is_private = false;
},
function(e) {
// console.log(e);
is_private = true;
}
);
} else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
var db;
try {
db = window.indexedDB.open('test');
} catch(e) {
is_private = true;
}
if (typeof is_private === 'undefined') {
retry(
function isDone() {
return db.readyState === 'done' ? true : false;
},
function next(is_timeout) {
if (!is_timeout) {
is_private = db.result ? false : true;
}
}
);
}
} else if (isIE10OrLater(window.navigator.userAgent)) {
is_private = false;
try {
if (!window.indexedDB) {
is_private = true;
}
} catch (e) {
is_private = true;
}
} else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
try {
window.localStorage.setItem('test', 1);
} catch(e) {
is_private = true;
}
if (typeof is_private === 'undefined') {
is_private = false;
window.localStorage.removeItem('test');
}
}
retry(
function isDone() {
return typeof is_private !== 'undefined' ? true : false;
},
function next(is_timeout) {
callback(is_private);
}
);
}
detectPrivateMode(
function(is_private) {
TimesApps.isIncognito = typeof is_private === 'undefined' ? false : is_private ? true : false;
if(TimesApps.isIncognito && typeof ga!="undefined"){
ga('send', 'event', 'Incognito_WEB', window.navigator.userAgent, window.location.href); // Remove redundant GA events
}
}
);
})();
/*mousewheel*/
(function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type="mousewheel",c.wheelDelta&&(e=c.wheelDelta/120),c.detail&&(e=-c.detail/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY/120),c.wheelDeltaX!==undefined&&(g=-1*c.wheelDeltaX/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=["DOMMouseScroll","mousewheel"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
/*custom scrollbar*/
(function(c){var b={init:function(e){var f={set_width:false,set_height:false,horizontalScroll:false,scrollInertia:950,mouseWheel:true,mouseWheelPixels:"auto",autoDraggerLength:true,autoHideScrollbar:false,alwaysShowScrollbar:false,snapAmount:null,snapOffset:0,scrollButtons:{enable:false,scrollType:"continuous",scrollSpeed:"auto",scrollAmount:40},advanced:{updateOnBrowserResize:true,updateOnContentResize:false,autoExpandHorizontalScroll:false,autoScrollOnFocus:true,normalizeMouseWheelDelta:false},contentTouchScroll:true,callbacks:{onScrollStart:function(){},onScroll:function(){},onTotalScroll:function(){},onTotalScrollBack:function(){},onTotalScrollOffset:0,onTotalScrollBackOffset:0,whileScrolling:function(){}},theme:"light"},e=c.extend(true,f,e);return this.each(function(){var m=c(this);if(e.set_width){m.css("width",e.set_width)}if(e.set_height){m.css("height",e.set_height)}if(!c(document).data("mCustomScrollbar-index")){c(document).data("mCustomScrollbar-index","1")}else{var t=parseInt(c(document).data("mCustomScrollbar-index"));c(document).data("mCustomScrollbar-index",t+1)}m.wrapInner("").addClass("mCustomScrollbar _mCS_"+c(document).data("mCustomScrollbar-index"));var g=m.children(".mCustomScrollBox");if(e.horizontalScroll){g.addClass("mCSB_horizontal").wrapInner("");var k=g.children(".mCSB_h_wrapper");k.wrapInner("").children(".mCSB_container").css({width:k.children().outerWidth(),position:"relative"}).unwrap()}else{g.wrapInner("")}var o=g.children(".mCSB_container");if(c.support.touch){o.addClass("mCS_touch")}o.after("
'
+ 'We have sent a 6 digit verification code ' + (loginType !== 'email'? 'on +91-': 'to ') + inputVal + ''
+ '
'
+ ''
+ '
'
+ '
';
cachedElements.formContainer.html(fpScreen);
};
/**
* Creates Verify OTP Screen UI to be shown after Register page and inserts in page
*
* @param Mobile will be set when user tries to Register with mobile and email
* @param emailId will be set once user verifies Mobile. Format email#mobile
*/
mod_login.showSignUpOtpScreen = function (ssoid, mobile, emailId, callback) {
var emailIdArr = emailId && emailId.length > 0? emailId.split('#'): [];
var inputVal = emailIdArr[0] || $('#register-inputVal').val();
var email = '';
var pageName = '';
var loginType = mod_login.getLoginType();
if(loginType === 'email' && mobile && mobile.length) {
pageName = 'mobile';
} else if(emailIdArr && emailIdArr.length > 0) {
pageName = 'email';
} else if(loginType === 'email') {
pageName = 'email';
} else {
pageName = 'mobile';
}
mod_login.setPageName(pageName);
if(mobile && mobile.length) {
loginType = 'mobile';
email = inputVal;
inputVal = mobile;
}
var fpScreen = '';
fpScreen += '
'
+ '
'
+ '
'
+ 'Complete Your Profile'
+ '
';
if(emailIdArr.length > 0) {
fpScreen += '
Mobile number verified: +91-' + emailIdArr[1] + ''
+ '
Verify your email id
';
} else {
fpScreen += '
We have sent a 6 digit verification code on your ' + (loginType !== 'email'? 'Mobile Number': 'Email Id') + '
';
}
fpScreen += ''
+ '
*Email or mobile no. verification is mandatory to complete the registration process.
'
+ '
'
+ '
';
cachedElements.formContainer.html(fpScreen);
};
mod_login.showSuccessMsgScreen = function (isForgotPassword, data) {
var successScreen = '';
successScreen += '
';
cachedElements.formContainer.html(successScreen);
setTimeout(function(){
var $loginPopUp = $("#login-popup");
if($loginPopUp.hasClass('active')) {
mod_login.closeBtnHandler();
}
}, 5000);
};
/**
* Sets recaptcha code once it is validated
*
* @param data - Recaptcha string returned in callback
* @param
*/
mod_login.recaptchaResponse = function (data) {
var $errorElement = $('li.recaptcha-wrapper');
mod_login.handleError($errorElement);
mod_login.setRecaptchaCode(data);
};
mod_login.recaptchaErrorCallback = function (err) {
var $errorElement = $('li.recaptcha-wrapper');
mod_login.handleError($errorElement, errorConfig.serverError);
};
mod_login.recaptchaExpiredCallback = function (data) {
};
/**
* Sets recaptcha code
*
* @param data - Recaptcha string
* @param
*/
mod_login.setRecaptchaCode = function (data) {
recaptchaCode = data;
};
/**
* returns recaptcha code
*
* @param
* @param
*/
mod_login.getRecaptchaCode = function () {
return recaptchaCode;
};
mod_login.setMobileNumber = function (ticketId, callback){
require(["tiljs/cookie"], function(cookie) {
var url = 'http://jsso.jeetbetwin.com/sso/crossdomain/v1liteUserProfile?ticketId=' + ticketId + '&channel=' + page.getChannel().toLowerCase();
ajax.getJSONP(url, function (data) {
ajax.getJSONP(url, function (data) {
var exist = data.code=='200' && data.verifiedMobile && data.verifiedMobile.length ==10;
callback(exist);
});
});
});
};
mod_login.checkMobileInfo = function(ticketId, force, callback){
var tthis = this;
require(["tiljs/cookie"], function(cookie) {
var ckVal = cookie.get('usermn');
if (ckVal && ckVal=='1' && !force){
return;
}
function setCookieForMobileNumber(status){
var ckVal = status ? 1 : 2;
cookie.set('usermn', ckVal, 1, '/', document.domain);
callback(status);
}
if (!ticketId){
var jssoObj = mod_login.setAndGetJssoCrosswalkObj();
jssoObj.getValidLoggedInUser(function(response){
if (response.code=='200'){
tthis.setMobileNumber(response.data.encTicket, setCookieForMobileNumber);
}
mod_login.setNativePrc();
});
}else{
tthis.setMobileNumber(ticketId, setCookieForMobileNumber);
}
});
};
mod_login.logout = function (callback) {
loginCallback = function () {
event.publish("user.logout");
if (callback) {
callback();
}
};
reset();
var logout_url = "http://jsso.jeetbetwin.com/sso/identity/profile/logout/external?channel=" + page.getChannel().toLowerCase();
var ifr = load.iframe(logout_url);
$(ifr).load(function () {
$(ifr).remove();
mod_login.removeUser();
if (window.__sso) {
window.__sso();
}
});
localstorage.remove("sso_user");
sessionStorage.removeItem('nativePrc');
sessionStorage.removeItem('expirydate');
var domain = page.getDomain();
var cookieList = [
{name: 'ssoid', path: '/', domain: domain},
{name: 'Fbsecuritykey', path: '/', domain: domain},
{name: 'fbookname', path: '/', domain: domain},
{name: 'CommLogP', path: '/', domain: domain},
{name: 'CommLogU', path: '/', domain: domain},
{name: 'FaceBookEmail', path: '/', domain: domain},
{name: 'Fbimage', path: '/', domain: domain},
{name: 'fbooklocation', path: '/', domain: domain},
{name: 'Fboauthid', path: '/', domain: domain},
{name: 'fbname', path: '/', domain: domain},
{name: 'fbLocation', path: '/', domain: domain},
{name: 'fbimage', path: '/', domain: domain},
{name: 'fbOAuthId', path: '/', domain: domain},
{name: 'MSCSAuth', path: '/', domain: domain},
{name: 'MSCSAuthDetail', path: '/', domain: domain},
{name: 'MSCSAuthDetails', path: '/', domain: domain},
{name: 'Twimage', path: '/', domain: domain},
{name: 'TwitterUserName', path: '/', domain: domain},
{name: 'Twoauthid', path: '/', domain: domain},
{name: 'Twsecuritykey', path: '/', domain: domain},
{name: 'ssosigninsuccess', path: '/', domain: domain},
{name: 'prc', path: '/', domain: domain},
{name: 'ipr', path: '/', domain: domain},
{name: 'gdpr', path: '/', domain: domain},
{name: 'usermn', path: '/', domain: domain},
{name: 'ssoid'},
{name: 'MSCSAuthDetail'},
{name: 'articleid'},
{name: 'txtmsg'},
{name: 'tflocation'},
{name: 'tfemail'},
{name: 'setfocus'},
{name: 'fbookname'},
{name: 'CommLogP'},
{name: 'CommLogU'},
{name: 'FaceBookEmail'},
{name: 'Fbimage'},
{name: 'fbooklocation'},
{name: 'Fboauthid'},
{name: 'Fbsecuritykey'},
{name: 'fbname'},
{name: 'fbLocation'},
{name: 'fbimage'},
{name: 'fbOAuthId'},
{name: 'MSCSAuth'},
{name: 'MSCSAuthDetails'},
{name: 'ssosigninsuccess'},
{name: 'Twimage'},
{name: 'TwitterUserName'},
{name: 'Twoauthid'},
{name: 'Twsecuritykey'},
{name: 'prc'},
{name: 'ipr'},
{name: 'usermn'}
];
var counter = 0;
for(; counter < cookieList.length; counter++) {
if(cookieList[counter].path) {
cookie.remove(cookieList[counter].name, cookieList[counter].path, cookieList[counter].domain);
} else {
cookie.remove(cookieList[counter].name);
}
};
// Remove GDPR cookie.
// document.cookie = 'gdpr=null; expires=Thu, 01 Jan 1970 00:00:01 GMT;'
callbackToCallAfterConsent = null;
userObj = null;
var jssoObj = mod_login.setAndGetJssoCrosswalkObj();
jssoObj.signOutUser();
// if (typeof toiprops === 'object' && toiprops.toipr === 1) {
// toiprops.toipr = -1;
// }
};
var mod_login_config = {
check_user_status: function (params, callback) {
var ssoid = cookie.get("ssoid") || cookie.get("ssoId");
var MSCSAuthDetails = cookie.get("MSCSAuthDetails");
if (!ssoid && MSCSAuthDetails) {
ssoid = MSCSAuthDetails.split("=")[1];
}
if(ssoid && ssoid.length > 0) {
var jssoCrosswalkObj = mod_login.setAndGetJssoCrosswalkObj();
jssoCrosswalkObj.getUserDetails( function (response)
{
if (callback) {
callback(response.data);
}
});
}else{
var jssoCrosswalkObj = mod_login.setAndGetJssoCrosswalkObj();
jssoCrosswalkObj.getValidLoggedInUser(function(response){
if (response.code=='200'){
var data = response.data;
var jssonappcdurl = 'http://jsso.jeetbetwin.com/sso/crossdomain/v1validateTicket?ticketId=' + data.encTicket + '&channel=' + page.getChannel().toLowerCase();
ajax.getJSONP(jssonappcdurl, function (data) {
if (location.hostname.indexOf(".jeetbetwin.com") > -1) {
var prc = cookie.get("prc");
if(prc){sessionStorage.setItem('_etnativePrc', prc);}
jssoCrosswalkObj.getUserDetails( function (response)
{
mod_login.setNativePrc()
if (callback) {
callback(response.data);
}
});
}
});
// }
}else {
if (callback) {
callback(null);
}
}
});
}
},
mapping: {
"uid": "uid",
"email": "EMAIL", // map email
"mobileNumber": "M_N", // map mobile
"id": "_id",
"name": "FL_N",
"username": "D_N_U",
"fullName": "FL_N",
"firstName": "F_N",
"lastName": "L_N",
"icon": "tiny",
"link": "profile",
"CITY": "CITY",
"thumb": "thumb",
"followersCount": "F_C",
"FE_C": "FE_C",
"I_U_A": "I_U_A",
"I_I_L": "I_I_L",
"badges": "badges",
"rewards": "rewards",
"whatsonid": "W_ID",
"ps": "SUB_U_J",
"primestatus": "U_P_S"
},
mapping1: {
//to : from
"uid": "ssoid",
"email": "primaryEmail", // map email
"id": "ssoid",
"name": "firstName",
"username": "D_N_U",
"fullName": "firstName",
"firstName": "firstName",
"lastName": "lastName",
"icon": "tinyImageUrl",
"link": "profileImageUrl",
"CITY": "city",
"thumb": "thumbImageUrl",
"followersCount": "F_C",
"FE_C": "FE_C",
"I_U_A": "I_U_A",
"I_I_L": "I_I_L",
"badges": "badges",
"rewards": "rewards",
"whatsonid": "W_ID"
}
};
mod_login.renderPlugins = function (user) {
user = user || mod_login.getUser();
$(function () {
if (user) {
$("[data-plugin='user-isloggedin']").show();
$("[data-plugin='user-notloggedin']").hide();
$("[data-plugin='user-name']").text(user.getFirstName());
$("[data-plugin='user-icon']").attr("src", user.getIcon()); //todo debug data-src, was not working, fix in html also
$("[data-plugin='user-thumb']").attr("src", user.getThumb());
api.getRewards({
uid: user.getUid()
}, function (rewards) {
if (rewards && rewards.output && rewards.output.user && rewards.output.user.levelName) {
$("[data-plugin='user-points']").text(( rewards.output.user.statusPoints ));
$("[data-plugin='user-level']").text(( rewards.output.user.levelName ));
$("[data-plugin='user-points-wrapper']")
.show()
.addClass("points_" + rewards.output.user.levelName.toLowerCase());
} else {
$("[data-plugin='user-points-wrapper']").hide();
}
});
} else {
$("[data-plugin='user-icon']").attr("src", config.default_user_icon); //todo debug data-src, was not working, fix in html also
$("[data-plugin='user-thumb']").attr("src", config.default_user_icon);
$("[data-plugin='user-isloggedin']").hide();
$("[data-plugin='user-notloggedin']").show();
}
$("body").toggleClass("loggedin", !!user);
$("body").toggleClass("notloggedin", !user);
});
};
mod_login.register = function () {
logger.info("Register event called.");
};
mod_login.isLoggedIn = function (callback, dontCheckConsent) {
ajax.get(config.check_user_status, {}, function (result) {
var _user = user.getNewUser(result, config.mapping1);
if (_user) {
_user.loginType = cookie.get("LoginType");
_user.facebook = {
name: cookie.get("fbookname"),
location: cookie.get("fbooklocation"),
image: cookie.get("Fbimage"),
email: cookie.get("FaceBookEmail"),
oauth: cookie.get("Fboauthid")
};
_user.twitter = {
name: cookie.get("TwitterUserName"),
image: cookie.get("Twimage"),
oauth: cookie.get("Twoauthid")
};
mod_login.setUser(_user);
var gdprConsentFn = function() {
var gdprConsentObj = {
'toi_gdprcookieconsent' : result.toi_gdprcookieconsent,
'toi_gdprpersonalizedconsent' : result.toi_gdprpersonalizedconsent,
}
mod_login.checkAndUpdateGDPRConsent(_user, gdprConsentObj);
};
TimesApps.checkGdprAndCall(null, gdprConsentFn);
mod_login.checkAndUpdateTimespointValue();
} else {
mod_login.removeUser();
if (typeof callback === 'function') {
callback();
return;
}
}
if (callback) {
if (dontCheckConsent || mod_login.isConsentGiven()) {
callback(_user);
} else {
callbackToCallAfterConsent = callback;
userObj = _user;
}
}
});
};
mod_login.removeUser = function (userId) {
if (config.multiuser) {
if (userId) {
delete userList[userId];
} else {
throw new Error("'userId' is required to remove a user.");
}
} else {
delete userList[single_user_id];
}
mod_login.statusChange(null);
};
mod_login.setUser = mod_login.addUser = function (_user) {
if (typeof _user !== 'undefined' && !user.isUser(_user)) {
throw new Error("Object is not an instance of User, use 'user.getNewUser()' to get a User object.");
}
if (config.multiuser) {
userList[_user.id](_user);
} else {
userList[single_user_id] = _user;
}
mod_login.statusChange(_user);
};
mod_login.getUser = function (userId) {
if (config.multiuser) {
return util.extend(true, {}, userList[userId]);
} else {
return userList[single_user_id];
}
};
/*This flow works in EU region only - function call from EU users only*/
mod_login.checkAndUpdateGDPRConsent = function (user, consentObj) {
var userId = user.getUid();
var _mytGdprConsent = consentObj.toi_gdprcookieconsent;
var _mytGdprPersonalizedConsent = consentObj.toi_gdprpersonalizedconsent;
var _gdprConsentCookie = cookie.get('ckns_policyV2');
var _gdprPersonalizedConsentCookie = cookie.get('optout');
/*consent is present in myt - sync it to cookie*/
if(typeof _mytGdprConsent !== 'undefined' && typeof _mytGdprPersonalizedConsent !== 'undefined'){
//Set it to cookie, if cookie are not present
TimesApps.checkGdprAndCall(null, function(){
_gdprConsentCookie = _mytGdprConsent ? 1 : 0;
_gdprPersonalizedConsentCookie = _mytGdprPersonalizedConsent ? 0 : 1;
TimesGDPR.common.consentModule.setConsentToCookies(_gdprConsentCookie, _gdprPersonalizedConsentCookie);
});
}
/*consent is present in cookie - sync it to myt*/
/*Set myt consent to cookie- as it might be updated through other site*/
else if(typeof _gdprConsentCookie !== 'undefined' && typeof _gdprPersonalizedConsentCookie !== 'undefined'){
var toi_gdprcookieconsentVal = !!(parseInt(_gdprConsentCookie, 10));
var toi_gdprpersonalizedconsentVal = !(parseInt(_gdprPersonalizedConsentCookie, 10));
//FYI - optout cookie is sync to toi_gdprpersonalizedconsent field in myt.
var consentObj = { toi_gdprcookieconsent : toi_gdprcookieconsentVal, toi_gdprpersonalizedconsent : toi_gdprpersonalizedconsentVal };
// mytimes.updateGDPRConsent(userId, consentObj, function(data) { console.log('Consent updated for EU: ' + data)} );
}
};
mod_login.statusChange = function (user) {
logger.info("User Status:" + ( user ? user.toString() : null ));
event.publish("user.status", user);
// Refresh Iframes with data-refreshState attr
mod_login.refreshIframes();
};
mod_login.refreshIframes = function () {
$(window.parent.document).find('iframe[data-refreshstate]').each(function (i, ele) {
$(ele).attr('src', $(ele).attr('src'))
})
};
mod_login.onStatusChange = function (callback) {
event.subscribe("user.status", callback);
};
mod_login.updateConfig = function (init_config) {
if (init_config) {
config = util.extend(true, {}, config, init_config);
}
};
/**
* Callback that calls forgot password API
*
* @param
* @param
*/
mod_login.forgotPasswordBtnHandler = function (e) {
e.preventDefault();
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#fp-inputVal').val(),
$fpScreen = $('#toi-forgot-password'),
otp = $fpScreen.find('input[name="otpfp"]').val(),
password = $fpScreen.find('input[name="registerPwd"]').val(),
fnCall;
var checkboxLen = $fpScreen.find('.js-contentCB').length;
if (checkboxLen > 0 && !mod_login.areMandatoryFieldsSelected($fpScreen)) {
return;
}
fnCall = (loginType === 'email'? jssoObj.loginEmailForgotPassword: jssoObj.loginMobileForgotPassword);
if(typeof fnCall === 'function') {
mod_login.showLoader();
fnCall.call(jssoObj, inputVal, otp, password, password, mod_login.handleForgotPasswordVerifyCallback);
mod_login.fireGAEvent(mod_login.getPageName() + '_PW_Verify');
}
};
mod_login.getTimespointValue = function() {
return (__isEUUser? '0': '1');
}
/**
* Callback returned by Forgot password API with response
*
* @param response - Object
* @param
*/
mod_login.handleForgotPasswordVerifyCallback = function (response) {
var $errorElementOtp = $('#toi-forgot-password input[name="otpfp"]').closest('li');
var $errorElementPass = $('#toi-forgot-password input[name="registerPwd"]').closest('li');
var consentCheckboxLen = $('#toi-forgot-password input.js-contentCB').length;
var loginType = mod_login.getLoginType();
var jssoObj = mod_login.setAndGetJssoCrosswalkObj();
if(response.code === 200) {
// $('#user-sign-in').html('').hide();
mod_login.fireGAEvent( 'Login_Success_' + mod_login.getPageName());
// $('#login-popup .close-btn').click();
if (consentCheckboxLen > 0) {
jssoObj.updateUserPermissions('1', '1', mod_login.getTimespointValue(), function() {
mod_login.hideLoader();
mod_login.showSuccessMsgScreen(true);
mod_login.isLoggedIn(loginCallback);
// jssoObj.getValidLoggedInUser(function() {
// mod_login.hideLoader();
// mod_login.showSuccessMsgScreen(true);
// mod_login.isLoggedIn(loginCallback);
// });
});
} else {
mod_login.hideLoader();
mod_login.showSuccessMsgScreen(true);
mod_login.isLoggedIn(loginCallback);
}
} else {
// Reset error and success messages
mod_login.handleError($errorElementOtp);
mod_login.handleError($errorElementPass);
$('.successMsg').hide();
switch(response.code) {
case 414:
mod_login.handleError($errorElementOtp, (loginType === 'email'? errorConfig.wrongOtpEmail: errorConfig.wrongOtp));
break;
case 415:
mod_login.handleError($errorElementOtp, errorConfig.expiredOTP);
break;
case 416:
mod_login.handleError($errorElementOtp, errorConfig.limitExceeded);
break;
case 418:
mod_login.handleError($errorElementPass, errorConfig.matchLastThree);
break;
case 503:
mod_login.handleError($errorElementPass, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElementPass, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
/**
* Click handler of Forgot password link on Login Screen.
*
* @param
* @param
*/
mod_login.forgotPasswordHandler = function (e) {
if($('#sso-forgot-pass').hasClass('disabled')) {
return;
}
var $emailId = $('#toi-login input[name="emailId"]');
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#toi-login input[name="emailId"]').val(),
$errorElement = $('#toi-login li.email'),
fnCall;
if(inputVal.length === 0) {
mod_login.handleError($errorElement, errorConfig.fpNoEmailOrMobile);
return;
} else if(!loginType) {
mod_login.handleError($errorElement, errorConfig.fpInvalidEmail);
return;
}
mod_login.handleError($errorElement);
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
fnCall = (loginType === 'email'? jssoObj.getEmailForgotPasswordOtp: jssoObj.getMobileForgotPasswordOtp);
if(typeof fnCall === 'function') {
mod_login.showLoader();
fnCall.call(jssoObj, inputVal, mod_login.handleForgotPasswordOTPCallback);
}
mod_login.setPageName(mod_login.getLoginType());
mod_login.fireGAEvent(mod_login.getPageName() + '_Forgot_PW');
};
/**
* Sets error messages on screens
*
* @param $errorElement - Parent element within which error messages have to be set
* @param msg - Error message to be set
*/
mod_login.handleError = function ($errorElement, msg) {
if(msg) {
$errorElement.parent().addClass('error')
$errorElement.find('p').addClass('error');
$errorElement.find('.errorMsg').html(msg).show();
} else {
$errorElement.find('p').removeClass('error');
$errorElement.find('.errorMsg').html('').hide();
$errorElement.parent().removeClass('error')
}
};
mod_login.showForgotPasswordScreenAfterConsentCheck = function (response) {
mod_login.hideLoader();
var $errorElement = $('#toi-login li.email');
var $emailId = $('#toi-login input[name="emailId"]');
var loginType = mod_login.getLoginType();
var showConsentHtml = false;
if(response && response.code === 200 && response.data) {
if(response.data.termsAccepted !== '1' || response.data.shareDataAllowed !== '1'){
showConsentHtml = true;
}
mod_login.showForgotPasswordScreen(undefined, showConsentHtml);
// var loginType = mod_login.getLoginType();
mod_login.setScreenName('Forgot_PW');
} else {
if(response.code === 410) {
mod_login.handleError($errorElement, (loginType === 'email'? errorConfig.fpInvalidEmailOnly: errorConfig.fpInvalidMobileOnly));
} else if(response.code === 503) {
mod_login.handleError($errorElement, errorConfig.connectionError);
} else {
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
/**
* Callback after sending OTP for Forgot password
*
* @param response - Object
* @param
*/
mod_login.handleForgotPasswordOTPCallback = function (response) {
mod_login.hideLoader();
var $errorElement = $('#toi-login li.email');
var loginType = mod_login.getLoginType();
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
inputVal = $('#toi-login input[name="emailId"]').val();
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
if(response && response.code === 200) {
if(typeof jssoObj.checkUserExists === 'function') {
mod_login.showLoader();
jssoObj.checkUserExists(inputVal, mod_login.showForgotPasswordScreenAfterConsentCheck);
}
} else {
if([405, 406, 407, 408].indexOf(response.code) !== -1) {
mod_login.handleError($errorElement, errorConfig.accountUnregistered);
} else if(response.code === 503) {
mod_login.handleError($errorElement, errorConfig.connectionError);
} else if (response.code === 416) {
mod_login.handleError($errorElement, errorConfig.limitExceeded);
$('#sso-regenerate-otp, #sso-generate-otp, #sso-forgot-pass').addClass('disabled');
} else {
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
/**
* Keyup event handler for Forgot Password page
*
* @param response - Object
* @param
*/
mod_login.fpInputKeyupHandler = function (e) {
var $this = $(this);
// setTimeout required for paste events.
setTimeout(function () {
var $fpScreen = $('#toi-forgot-password');
var otp = $fpScreen.find('input[name="otpfp"]').val();
var password = $fpScreen.find('input[name="registerPwd"]').val();
var $fbBtn = $('#sso-fp-btn');
var enableFpBtn = true;
var checkboxLen = $fpScreen.find('.js-contentCB').length;
// check if OTP is number and length is 6 and password is valid
if(!(!isNaN(otp) && otp.length === 6) || !mod_login.isPasswordValid(password) || (checkboxLen > 0 && !mod_login.areMandatoryFieldsSelected($fpScreen))) {
enableFpBtn = false;
}
$fbBtn.prop('disabled', !enableFpBtn);
if(enableFpBtn) {
$fbBtn.removeClass('disabled');
} else {
$fbBtn.addClass('disabled');
}
// If keyup is for password field call password error function to handle its errors
if($this.attr('name') === 'registerPwd') {
mod_login.passwordErrors.call($this, e);
}
}, 0);
};
mod_login.areMandatoryFieldsSelected = function(parentElem) {
var $agree = parentElem.find('input[name="agree"]');
var $sharedDataAllowed = parentElem.find('input[name="sharedDataAllowed"]');
var sharedDataAllowed = $sharedDataAllowed.is(':checked');
var agree = $agree.is(':checked');
return (sharedDataAllowed && agree);
};
/**
* Handles Change Email/Mobile link click
*
* @param
* @param
*/
mod_login.changeEmailIdHandler = function (e) {
$('#sso-pwdDiv, #changeEmailIdDiv, #sso-otpLoginDiv, #sso-login-otp-msg').hide();
$('#toi-login li.checkbox').remove();
$('#user-sign-in').removeClass('extra-content');
$('#toi-login input[name="emailId"]').prop('disabled', false).val('').focus();
$('#sso-signInButtonDiv input[type="submit"]').prop('disabled', true).addClass('disabled');
$('.errorMsg, .successMsg').hide();
$('.error').removeClass('error');
$('#sso-signInButtonDiv > input').val('Continue');
$('#sso-pwdDiv input[name="password"]').val('');
$('#sso-otpLoginDiv input[type="password"]').val('');
$('#sso-regenerate-otp, #sso-fp-regenerate-otp, #sso-verify-regenerate-otp, #sso-generate-otp, #sso-forgot-pass').removeClass('disabled');
mod_login.fireGAEvent(mod_login.getPageName() + '_Change');
mod_login.setScreenName('Login_Screen');
};
/**
* Shows login screen when user clicks change email on Register page
*
* @param
* @param
*/
mod_login.changeRegisterEmailIdHandler = function (e) {
mod_login.showLoginScreen();
mod_login.fireGAEvent( mod_login.getPageName() + '_Change');
};
/**
* Handles OTP input field on Login page
*
* @param
* @param
*/
mod_login.handleOtploginKeyUp = function(e) {
var $this = $(this);
var val = $this.val();
if(val.length > 0) {
// enableSignIn = true;
$('.errorMsg').html('');
}
if(val != '' && val.length == 6) {
enableSignIn = true;
$('.errorMsg').html('');
}else {
enableSignIn = false;
}
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
$ssoSignInInputBtn.prop('disabled', !enableSignIn);
}
/**
* Handles Password input field on Login page
*
* @param
* @param
*/
mod_login.handlePasswordKeyUp = function(e) {
var $this = $(this);
var val = $this.val();
if(val.length > 0) {
enableSignIn = true;
$('.errorMsg').html('');
}else {
enableSignIn = false;
}
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
$ssoSignInInputBtn.prop('disabled', !enableSignIn);
}
/**
* Handles Email Id/ Mobile input field on Login page
*
* @param
* @param
*/
mod_login.handleEmailIdKeyUp = function (e) {
var $this = $(this);
setTimeout(function (e) {
var val = $this.val(),
checkIsEmail = val.indexOf('@'),
checkIsMobile = !isNaN(val) && val.length >= 10,
enableSignIn = false,
$errorElement = $('#toi-login li.email'),
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
if(checkIsEmail && mod_login.getValidEmailId(val).length > 0) {
mod_login.setLoginType('email');
enableSignIn = true;
} else if(checkIsMobile && mod_login.getValidMobileNumber(val).length > 0) {
mod_login.setLoginType('mobile');
enableSignIn = true;
} else {
mod_login.setLoginType('');
}
$ssoSignInInputBtn.prop('disabled', !enableSignIn);
mod_login.handleError($errorElement);
if(enableSignIn) {
$ssoSignInInputBtn.removeClass('disabled');
} else {
$ssoSignInInputBtn.addClass('disabled');
}
}, 0);
};
/**
* API callback of checkUserExists
*
* @param response - Response object
* @param
*/
mod_login.checkUserExists = function(response) {
mod_login.hideLoader();
var $errorElement = $('#toi-login li.email');
var $emailId = $('#toi-login input[name="emailId"]');
var $signInBtn = $('#sso-signInButtonDiv > input');
var errorMsg = '';
var loginType = mod_login.getLoginType();
mod_login.handleError($errorElement);
if(response && response.code === 200 && response.data) {
if(response.data.statusCode === 212 || response.data.statusCode === 213) {
$('#sso-pwdDiv, #changeEmailIdDiv').show();
$signInBtn.val('Sign In');
if(response.data.termsAccepted !== '1' || response.data.shareDataAllowed !== '1'){
if (__isEUUser) {
$signInBtn.attr('disabled', 'disabled');
}
// show and handle consent checkboxes
$(mod_login.getConsentHTML()).insertBefore($signInBtn.closest('#sso-signInButtonDiv'));
// to handle both fb and google buttons in single line when checkboxes are visible
$('#user-sign-in').addClass('extra-content');
}
} else if(response.data.statusCode === 205 || response.data.statusCode === 206 || response.data.statusCode === 214 || response.data.statusCode === 215) {
mod_login.registerUser();
mod_login.setScreenName('Register_New_User');
} else {
$emailId.prop('disabled', false);
errorMsg = response.data.statusCode === 216 ? errorConfig.fpInvalidEmailOnly: errorConfig.fpInvalidEmail;
mod_login.handleError($errorElement, errorMsg);
}
} else {
$emailId.prop('disabled', false);
if(response.code === 410) {
mod_login.handleError($errorElement, (loginType === 'email'? errorConfig.fpInvalidEmailOnly: errorConfig.fpInvalidMobileOnly));
} else if(response.code === 503) {
mod_login.handleError($errorElement, errorConfig.connectionError);
} else {
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
/**
* Shows register screen
*
* @param
* @param
*/
mod_login.registerUser = function() {
mod_login.showRegisterScreen();
};
/**
* Handles Register button click and validates Register form
*
* @param
* @param
*/
mod_login.registerButtonHandler = function (e) {
e.preventDefault();
mod_login.registerFormSubmitted(true);
var $register = $('#toi-register');
var $email = $register.find('input[name="emailId"]');
var $fullname = $register.find('input[name="fullname"]');
var $password = $register.find('input[name="registerPwd"]');
var $cnfrmPassword = $register.find('input[name="registerCnfrmPwd"]');
var $mobile = $register.find('input[name="mobile"]');
var recaptcha = mod_login.getRecaptchaCode();
var $agree = $register.find('input[name="agree"]');
var $sharedDataAllowed = $register.find('input[name="sharedDataAllowed"]');
var agree = $agree.is(':checked');
var isSendOffer = $register.find('input[name="promotions"]').is(':checked');
// this is to be changed for new value of personalization check box field
var email = $email.val();
var fullname = $fullname.val();
var password = $password.val().trim();
var cnfrmPassword = $cnfrmPassword.val().trim();
var mobile = $mobile.val() || '';
var username = {};
var validForm = true;
var loginType = mod_login.getLoginType();
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(), fnCall;
var $fullNameParent = $fullname.closest('li');
var $passwordParent = $password.closest('li');
var $cnfrmPasswordParent = $cnfrmPassword.closest('li');
var $mobileParent = $mobile.closest('li');
var $emailParent = $email.closest('li');
var $agreeParent = $agree.closest('li');
var $sharedDataAllowedParent = $sharedDataAllowed.closest('li');
var $recaptchaParent = $('#recaptcha-container').closest('li');
var isValidName = mod_login.checkAndSetFullNameError($fullname, $fullNameParent);
var isValidCnfrmPassword = mod_login.checkAndSetConfirmPasswordError($cnfrmPassword, $cnfrmPasswordParent);
var isValidEmailOrMobile = true;
var isSharedDataAllowed = mod_login.checkAndSetSharedDataTnCError($sharedDataAllowed, $sharedDataAllowedParent);
var isTnCAgreed = mod_login.checkAndSetAgreeTnCError($agree, $agreeParent);
if(loginType === 'email') {
isValidEmailOrMobile = mod_login.checkAndSetEmailOrMobileToRegisterError($mobile, $mobileParent, 'mobile');
} else {
isValidEmailOrMobile = mod_login.checkAndSetEmailOrMobileToRegisterError($email, $emailParent, 'email');
}
if(!isValidName || !isValidCnfrmPassword || !isValidEmailOrMobile || !isTnCAgreed || !isSharedDataAllowed) {
validForm = false;
}
if(!mod_login.isPasswordValid(password)) {
validForm = false;
}
if(mod_login.showCaptcha()) {
if(!recaptcha) {
validForm = false;
mod_login.handleError($recaptchaParent, errorConfig.captchaUnselected);
} else {
mod_login.handleError($recaptchaParent);
}
}
$('.password-conditions').show();
if(validForm) {
username = mod_login.getFirstAndLastName(fullname);
// Call registerUser API in case of Opera browser
fnCall = mod_login.showCaptcha()? jssoObj.registerUserRecaptcha: jssoObj.registerUser;
if(typeof fnCall === 'function') {
mod_login.showLoader();
if(mod_login.showCaptcha()) {
fnCall.call(jssoObj, username.firstName, username.lastName, '', '', email, mobile, password, isSendOffer, recaptcha, '1', '1', mod_login.getTimespointValue(), mod_login.registerUserCallback);
} else {
fnCall.call(jssoObj, username.firstName, username.lastName, '', '', email, mobile, password, isSendOffer, '1', '1', mod_login.getTimespointValue(), mod_login.registerUserCallback);
}
}
}
mod_login.fireGAEvent( mod_login.getPageName() + '_Verify' );
};
/**
* Handles keyup events on register button
*
* @param
* @param
*/
mod_login.registerFormErrorHandler = function (e) {
if(!registerFormSubmitted) {
return;
}
var $inputElem = $(e.target);
var inputFieldName = $inputElem.attr('name');
var $elemParent = $inputElem.closest('li');
if(inputFieldName === 'fullname') {
mod_login.checkAndSetFullNameError($inputElem, $elemParent);
} else if (inputFieldName === 'registerCnfrmPwd') {
mod_login.checkAndSetConfirmPasswordError($inputElem, $elemParent);
} else if (inputFieldName === 'emailId') {
mod_login.checkAndSetEmailOrMobileToRegisterError($inputElem, $elemParent, 'email');
} else if (inputFieldName === 'mobile') {
mod_login.checkAndSetEmailOrMobileToRegisterError($inputElem, $elemParent, 'mobile');
} else if (inputFieldName === 'agree') {
mod_login.checkAndSetAgreeTnCError($inputElem, $elemParent);
} else if (inputFieldName === 'sharedDataAllowed') {
mod_login.checkAndSetSharedDataTnCError($inputElem, $elemParent);
}
};
mod_login.checkAndSetFullNameError = function (inputElem, elemParent) {
var nameRegex = /^[a-zA-Z\s]*$/;
var fullname = inputElem.val();
var validField = true;
if(!(fullname && fullname.length > 0 && nameRegex.test(fullname))) {
validField = false;
if(fullname.length === 0) {
mod_login.handleError(elemParent, errorConfig.emptyName);
} else {
mod_login.handleError(elemParent, errorConfig.wrongName);
}
} else {
mod_login.handleError(elemParent);
}
return validField;
};
mod_login.checkAndSetConfirmPasswordError = function (inputElem, elemParent) {
var password = $('#toi-register input[name="registerPwd"]').val().trim();
var confirmPassword = inputElem.val().trim();
var validField = true;
if(password !== confirmPassword) {
validField = false;
mod_login.handleError(elemParent, errorConfig.passwordMismatch);
} else {
mod_login.handleError(elemParent);
}
return validField;
};
mod_login.checkAndSetEmailOrMobileToRegisterError = function (inputElem, elemParent, loginType) {
var inputFieldVal = inputElem.val();
var validField = true;
if(inputFieldVal.length === 0 ) {
mod_login.handleError(elemParent);
} else {
inputFieldVal = loginType === 'email'? mod_login.getValidEmailId(inputFieldVal): mod_login.getValidMobileNumber(inputFieldVal, true);
if(inputFieldVal.length === 0) {
validField = false;
mod_login.handleError(elemParent, (loginType === 'email'? errorConfig.wrongEmail: errorConfig.wrongMobile));
} else {
mod_login.handleError(elemParent);
}
}
return validField;
};
mod_login.checkAndSetAgreeTnCError = function (inputElem, elemParent) {
var tncAgreed = inputElem.is(':checked');
var validField = true;
if(!tncAgreed) {
validField = false;
mod_login.handleError(elemParent, errorConfig.tncNotSelected);
} else {
mod_login.handleError(elemParent);
}
return validField;
};
mod_login.checkAndSetSharedDataTnCError = function (inputElem, elemParent) {
var sharedDataAgreed = inputElem.is(':checked');
var validField = true;
if(!sharedDataAgreed) {
validField = false;
// mod_login.handleError(elemParent, errorConfig.sharedDataNotSelected);
} else {
// mod_login.handleError(elemParent);
}
return validField;
};
/**
* Handles Verify button click on Verify OTP page
*
* @param
* @param
*/
mod_login.verifyButtonHandler = function (e) {
e.preventDefault();
var $verifyParent = $('#toi-verifyotp-password');
var intent = $("#verify-inputVal").val();
var ssoId = $("#verify-ssoid").val();
var otp = $verifyParent.find('input[name="otpverify"]').val();
var actualLoginType = mod_login.getLoginType();
var loginType = $('#verify-logintype').val();
var emailId = $('#verify-email').val() || '';
var jssoObj = mod_login.setAndGetJssoCrosswalkObj();
var fnCall = (loginType === 'email'? jssoObj.verifyEmailSignUp: jssoObj.verifyMobileSignUp);
if(typeof fnCall === 'function') {
mod_login.showLoader();
fnCall.call(jssoObj, intent, ssoId, otp, mod_login.handleSignUpVerifyCallback((actualLoginType !== loginType && emailId? emailId: ''), ssoId));
mod_login.fireGAEvent(mod_login.getPageName() + '_Verify');
}
};
/**
* Handles Verify Email button click on Verify OTP page
*
* @param
* @param
*/
mod_login.verifyEmailButtonHandler = function (e) {
e.preventDefault();
// Duplicate method to handle any different functionality if any
mod_login.verifyButtonHandler(e);
};
/**
* Enable Verify button of valid OTP is entered on Verify OTP page
*
* @param
* @param
*/
mod_login.enableVerifyButton = function (e) {
var $this = $(this);
setTimeout(function(){
var otp = $this.val();
var $submitBtn = $('#sso-verify-btn');
if(!$submitBtn.is(':visible')) {
$submitBtn = $('#sso-verify-email-btn');
}
if(!isNaN(otp) && otp.length ===6 ) {
$submitBtn.prop('disabled', false).removeClass('disabled');
} else {
$submitBtn.prop('disabled', true).addClass('disabled');
}
}, 0);
};
/**
* Returns callback for Register User API
*
* @param emailId, sso - Sets in case user tries to register with both email and mobile
* @param response - API response
*/
mod_login.handleSignUpVerifyCallback = function (emailId, sso, response) {
return function (response) {
mod_login.hideLoader();
var $errorElementOtp = $('#toi-verifyotp-password input[name="otpverify"]').closest('li');
var loginType = $('#verify-logintype').val();
var mobile = '';
var $inputVal = $("#verify-inputVal");
var verifiedData = {};
if(response && response.code === 200) {
mod_login.fireGAEvent( 'Login_Success_' + mod_login.getPageName());
if(!emailId || !sso) {
if(loginType === 'email') {
verifiedData.email = $inputVal.val();
} else {
verifiedData.mobile = $inputVal.val();
}
mod_login.showSuccessMsgScreen(false, verifiedData);
} else {
mobile = $inputVal.val();
mod_login.showSignUpOtpScreen(sso, '', emailId + '#' + mobile);
}
mod_login.isLoggedIn(loginCallback);
} else {
$('.successMsg').hide();
switch(response.code) {
case 414:
mod_login.handleError($errorElementOtp, (loginType === 'email'? errorConfig.wrongOtpEmail: errorConfig.wrongOtp));
break;
case 415:
mod_login.handleError($errorElementOtp, errorConfig.expiredOTP);
break;
case 416:
mod_login.handleError($errorElementOtp, errorConfig.limitExceeded);
break;
case 503:
mod_login.handleError($errorElementOtp, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElementOtp, (errorConfig.serverError));
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
}
};
mod_login.registerUserCallback = function (response) {
mod_login.hideLoader();
var $errorElement = $('#sharedDataAllowed').closest('li');
var mobile = $('#toi-register input[name="mobile"]').val();
if(response && response.code === 200) {
mod_login.showSignUpOtpScreen(response.data.ssoid, mobile);
mod_login.setScreenName('Complete_Profile');
} else {
if(response.code === 429) {
mod_login.handleError($errorElement, errorConfig.userAlreadyRegistered);
} else if (response.code === 416) {
mod_login.handleError($errorElement, errorConfig.limitExceeded);
} else if(response.code === 503) {
mod_login.handleError($errorElement, errorConfig.connectionError);
} else {
mod_login.handleError($errorElement, errorConfig.serverError);
}
if(typeof grecaptcha === 'object' && mod_login.showCaptcha()) {
grecaptcha.reset(recaptchaWidgetId);
}
mod_login.setRecaptchaCode('');
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
mod_login.getFirstAndLastName = function (name) {
var nameArr = [];
var nameObj = {firstName: '', lastName: ''};
if(name && name.length > 0) {
name = name.replace(/ +/g, ' ');
nameArr = name.split(' ');
nameObj.firstName = nameArr[0] || '';
if(nameArr.length > 1) {
nameArr.splice(0,1);
nameObj.lastName = nameArr.join(' ');
}
}
return nameObj;
};
mod_login.loginWithOTP = function(e, isRegenerate) {
// Do not perform any action if generate otp is disabled
if($('#sso-generate-otp').hasClass('disabled')) {
return;
}
var $emailId = $('#toi-login input[name="emailId"]');
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#toi-login input[name="emailId"]').val(),
fnCall;
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
fnCall = (loginType === 'email'? jssoObj.getEmailLoginOtp: jssoObj.getMobileLoginOtp);
if($('#sso-basic-regenerate-otp-timer') && $('#sso-basic-regenerate-otp-timer-text')) {
var timeleft = 60;
if($('#sso-regenerate-otp')) {
$('#sso-regenerate-otp').hide()
}
$('#sso-basic-regenerate-otp-timer-text').text(timeleft);
$('#sso-basic-regenerate-otp-timer').show();
var otpcountdownTimer = setInterval(function(){
timeleft = timeleft - 1;
$('#sso-basic-regenerate-otp-timer-text').text(timeleft);
if(!cachedElements.loginPopup.hasClass('active')) {
clearInterval(otpcountdownTimer);
}
if(timeleft === 0) {
if($('#sso-regenerate-otp')) {
$('#sso-regenerate-otp').show();
}
$('#sso-basic-regenerate-otp-timer').hide();
clearInterval(otpcountdownTimer);
}
},1000);
}
if(typeof fnCall === 'function') {
mod_login.showLoader();
if($('#toi-login input[name="otplogin"]').val()==''){
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
$ssoSignInInputBtn.prop('disabled',true);
}
fnCall.call(jssoObj, inputVal, mod_login.handleLoginOTPCallback(isRegenerate));
if(isRegenerate) {
mod_login.fireGAEvent( mod_login.getPageName() + '_Re_OTP');
} else {
mod_login.fireGAEvent(mod_login.getPageName() + '_OTP_Submit');
}
}
};
// Duplicate method in case any message needed for regenerate OTP logic
mod_login.regenerateLoginOTP = function() {
// Do not perform any action if regenerate otp is disabled
if($('#sso-regenerate-otp').hasClass('disabled')) {
return;
}
mod_login.loginWithOTP({}, true);
};
mod_login.fpRegenerateOTP = function () {
// Do not perform any action if regenerate OTP button is disabled
if($(this).hasClass('disabled')) {
return;
}
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#fp-inputVal').val(),
fnCall;
fnCall = (loginType === 'email'? jssoObj.getEmailForgotPasswordOtp: jssoObj.getMobileForgotPasswordOtp);
if($('#sso-regenerate-otp-timer') && $('#sso-regenerate-otp-timer-text')) {
var timeleft = 60;
if($('#sso-fp-regenerate-otp')) {
$('#sso-fp-regenerate-otp').hide()
}
$('#sso-regenerate-otp-timer-text').text(timeleft);
$('#sso-regenerate-otp-timer').show();
var otpcountdownTimer = setInterval(function(){
timeleft = timeleft - 1;
$('#sso-regenerate-otp-timer-text').text(timeleft);
if(!cachedElements.loginPopup.hasClass('active')) {
clearInterval(otpcountdownTimer);
}
if(timeleft === 0) {
if($('#sso-fp-regenerate-otp')) {
$('#sso-fp-regenerate-otp').show();
}
$('#sso-regenerate-otp-timer').hide();
clearInterval(otpcountdownTimer);
}
},1000);
}
if(typeof fnCall === 'function') {
mod_login.showLoader();
fnCall.call(jssoObj, inputVal, mod_login.handleForgotPasswordRegenerateOTPCallback);
mod_login.fireGAEvent(mod_login.getPageName() + '_Re_OTP');
}
};
mod_login.handleForgotPasswordRegenerateOTPCallback = function (response) {
mod_login.hideLoader();
var $errorElement = $('input[name="otpfp"]').parent().parent();
mod_login.handleError($errorElement);
if(response && response.code === 200) {
$('#toi-forgot-password input[name="otpfp"]').val('');
$('.successMsg').text('OTP has been successfully sent.').show();
} else {
$('.successMsg').hide();
switch(response.code) {
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
$('#sso-fp-regenerate-otp').addClass('disabled');
$('#forgot-password-sent').hide();
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
mod_login.verifyPageRegenerateOTP = function () {
if($('#sso-verify-regenerate-otp').hasClass('disabled')) {
return;
}
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = $('#verify-logintype').val(),
inputVal = $('#verify-inputVal').val(),
ssoId = $('#verify-ssoid').val(),
fnCall;
fnCall = (loginType === 'email'? jssoObj.resendEmailSignUpOtp: jssoObj.resendMobileSignUpOtp);
if($('#sso-verify-regenerate-otp-timer') && $('#sso-verify-regenerate-otp-timer-text')) {
var timeleft = 60;
if($('#sso-verify-regenerate-otp')) {
$('#sso-verify-regenerate-otp').hide()
}
$('#sso-verify-regenerate-otp-timer-text').text(timeleft);
$('#sso-verify-regenerate-otp-timer').show();
var otpcountdownTimer = setInterval(function(){
timeleft = timeleft - 1;
$('#sso-verify-regenerate-otp-timer-text').text(timeleft);
if(!cachedElements.loginPopup.hasClass('active')) {
clearInterval(otpcountdownTimer);
}
if(timeleft === 0) {
if($('#sso-verify-regenerate-otp')) {
$('#sso-verify-regenerate-otp').show();
}
$('#sso-verify-regenerate-otp-timer').hide();
clearInterval(otpcountdownTimer);
}
},1000);
}
if(typeof fnCall === 'function') {
mod_login.showLoader();
fnCall.call(jssoObj, inputVal, ssoId, mod_login.handleSignUpVerifyRegenerateOTPCallback);
mod_login.fireGAEvent(mod_login.getPageName() + '_Re_OTP');
}
};
mod_login.handleSignUpVerifyRegenerateOTPCallback = function (response) {
mod_login.hideLoader();
var $errorElement = $('#toi-verifyotp-password li.password:visible');
mod_login.handleError($errorElement);
if(response && response.code === 200) {
$('#toi-verifyotp-password input[name="otpverify"]').val('');
$('.successMsg').text('OTP has been successfully sent.').show();
} else {
$('.successMsg').hide();
switch(response.code) {
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
$('#sso-verify-regenerate-otp').addClass('disabled');
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
mod_login.handleLoginOTPCallback = function(isRegenerate) {
return function (response) {
mod_login.hideLoader();
var $errorElement = $('#toi-login li.password:visible');
mod_login.handleError($errorElement);
if(response && response.code === 200) {
var loginType = mod_login.getLoginType();
var inputVal = $('#toi-login input[name="emailId"]').val();
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
$('#sso-pwdDiv').hide();
$('#sso-otpLoginDiv, #sso-login-otp-msg').show();
$('#sso-login-otp-msg > p').text('We have sent a 6 digit verification code ' + (loginType === 'email'? 'to ': 'on +91-') + inputVal);
if(isRegenerate) {
$('#toi-login input[name="otplogin"]').val('');
$('#sso-otpLoginDiv .successMsg').text('OTP has been successfully sent.').show();
}
} else {
$('#sso-otpLoginDiv .successMsg').hide();
switch(response.code) {
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
// Disable Regenerate OTP button and remove text message specifying OTP has been sent
$('#sso-regenerate-otp, #sso-generate-otp, #sso-forgot-pass').addClass('disabled');
$('#sso-login-otp-msg > p').text('');
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
}
};
mod_login.fbLoginHandler = function (e) {
var callback = function () {
mod_login.closeBtnHandler();
};
mod_login.initiateFbLogin(callback);
};
mod_login.gplusLoginHandler = function () {
var callback = function () {
mod_login.closeBtnHandler();
};
mod_login.initiateGplusLogin(callback);
};
mod_login.remvoePrcInSession = function() {
sessionStorage.removeItem('nativePrc');
}
mod_login.removeIpr = function() {
cookie.remove("ipr", "/", ".jeetbetwin.com");
}
mod_login.setPrcInSession = function() {
var prc = cookie.get("prc");
if(window && window.activePlanName!=""){
sessionStorage.setItem('planName', window.activePlanName);
localStorage.setItem('planName', window.activePlanName);
}
if(prc){
sessionStorage.setItem('nativePrc', prc);
}
}
mod_login.getFromServer=function(){
var prc = sessionStorage.getItem('nativePrc');
var fetchfromServer = false;
if (prc) {
cookie.set("prc", prc, 1, "/", ".jeetbetwin.com");
} else {
fetchfromServer = true;
}
return fetchfromServer;
}
mod_login.handleLoginCallback_andPrcFPrime = function(response) {
if (mod_login.getFromServer()) {
$.ajax({
url: constants.nativePrc,
//headers: options,
xhrFields: {
withCredentials: true
},
success: function(data) {
mod_login.setPrcInSession()
mod_login.handleLoginCallback(response);
mod_login.removeIpr()
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
mod_login.setPrcInSession()
mod_login.handleLoginCallback(response);
mod_login.removeIpr()
}
});
}
}
mod_login.setNativePrc = function() {
if (mod_login.getFromServer()) {
$.ajax({
url: constants.nativePrc,
xhrFields: {
withCredentials: true
},
success: function(data) {
mod_login.setPrcInSession();
mod_login.removeIpr()
},
error: function() {
mod_login.setPrcInSession();
mod_login.removeIpr();
}
});
}
}
mod_login.handleLoginCallback = function (response) {
mod_login.hideLoader();
var isOtpDivVisible = $('#sso-otpLoginDiv').is(':visible');
var $errorElement = $('#toi-login li.password:visible');
var loginType = mod_login.getLoginType();
if(response && response.code === 200) {
mod_login.closeBtnHandler();
mod_login.isLoggedIn(loginCallback);
mod_login.fireGAEvent('Login_Success_' + mod_login.getPageName());
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
$ssoSignInInputBtn.prop('disabled', false);
setTimeout(function(){
window.location.reload(false); //need to check with @ashok.singh1, but will improve it later...
},2000)
} else {
$('.successMsg').hide();
switch(response.code) {
case 415:
mod_login.handleError($errorElement, (!isOtpDivVisible? errorConfig.wrongPassword: errorConfig.expiredOTP));
break;
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, (!isOtpDivVisible? errorConfig.wrongPassword: (loginType === 'email'? errorConfig.wrongOtpEmail: errorConfig.wrongOtp )));
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
mod_login.handleEmailIdClick = function (e) {
e.preventDefault();
var $password = $('#sso-pwdDiv input[name="password"]');
var $otp = $('#sso-otpLoginDiv input[type="password"]');
var $emailId = $('#toi-login input[name="emailId"]');
var password = '';
var $errorMsgElem = $('#toi-login li.password:visible .errorMsg');
var $loginCont = $('#toi-login');
var $agree = $loginCont.find('input[name="agree"]');
var $sharedDataAllowed = $loginCont.find('input[name="sharedDataAllowed"]');
var $agreeParent = $agree.closest('li');
var $sharedDataAllowedParent = $sharedDataAllowed.closest('li');
var sharedDataAllowed = mod_login.checkAndSetSharedDataTnCError($sharedDataAllowed, $sharedDataAllowedParent) ? '1' : '0';
var tnCAgreed = mod_login.checkAndSetAgreeTnCError($agree, $agreeParent) ? '1' : '0';
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#toi-login input[name="emailId"]').val(),
fnCall,
isGDPRSpecific = $('#toi-login input.js-contentCB').length > 0,
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
$emailId.prop('disabled', true);
if($password.is(':visible') || $otp.is(':visible')) {
// fnCall = (loginType === 'email'? jssoObj.verifyEmailLogin: jssoObj.verifyMobileLogin);
if (isGDPRSpecific && (sharedDataAllowed !== '1' || tnCAgreed !== '1')) {
return;
}
fnCall = (function(){
var fn;
// consent checkboxes are visible on form use gdpr specific api methods
if(isGDPRSpecific){
if(loginType === 'email'){
fn = jssoObj.verifyEmailLoginGdpr;
}
else{
fn = jssoObj.verifyMobileLoginGdpr;
}
}
// use non gdpr api methods
else if(loginType === 'email'){
fn = jssoObj.verifyEmailLogin;
}
else{
fn = jssoObj.verifyMobileLogin;
}
return fn;
})();
password = $password.is(':visible')? $password.val(): $otp.val();
mod_login.fireGAEvent(mod_login.getPageName() + ($password.is(':visible')? '_PW': '_OTP') + '_Entry');
if(password.length === 0) {
$errorMsgElem.html(errorConfig.emptyPassword).show();
return;
} else if(typeof fnCall === 'function') {
$('.errorMsg').html('').hide();
mod_login.showLoader();
$ssoSignInInputBtn = $('#sso-signInButtonDiv > [type="submit"]');
$ssoSignInInputBtn.prop('disabled', true);
if(isGDPRSpecific){
fnCall.call(jssoObj, inputVal, password, tnCAgreed, sharedDataAllowed, mod_login.getTimespointValue(), mod_login.handleLoginCallback_andPrcFPrime);
}
else{
fnCall.call(jssoObj, inputVal, password, mod_login.handleLoginCallback_andPrcFPrime);
}
}
} else {
if(typeof jssoObj.checkUserExists === 'function') {
mod_login.showLoader();
jssoObj.checkUserExists(inputVal, mod_login.checkUserExists);
mod_login.setPageName(loginType);
mod_login.fireGAEvent(mod_login.getPageName() + '_Continue');
} else {
$emailId.prop('disabled', false);
}
}
};
mod_login.getValidEmailId = function (email) {
var regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,6})$/;
var emailId = '';
if(regEmail.test(email)) {
emailId = email;
}
return emailId;
};
// withoutPrefix parameter is needed to check for valid number without +91 or 0 appended
mod_login.getValidMobileNumber = function (mobile, withoutPrefix) {
var regMobile = (withoutPrefix? /^[6789]\d{9}$/ : /^(\+91)?[0]?[6789]\d{9}$/);
var notAllowedNumbers = ['6666666666', '7777777777', '8888888888', '9999999999'];
var mobileNo = '';
var length = mobile.length;
if(regMobile.test(mobile)) {
mobileNo = mobile.substring(mobile.length - 10, mobile.length);
}
if(notAllowedNumbers.indexOf(mobileNo) !== -1) {
mobileNo = '';
}
return mobileNo;
};
mod_login.closeModalOnEscapeKeyPress = function (e) {
if(!cachedElements.loginPopup.hasClass('active')) {
return;
}
var keyCode = e.keyCode || e.which;
if(keyCode === 27) {
cachedElements.closeBtn.click();
}
};
mod_login.isPasswordValid = function (password){
return password && password.length >= 6 && password.length <= 14 && mod_login.hasNumber(password) && mod_login.hasSpecialCharacters(password) && mod_login.hasLowerCase(password);
};
mod_login.hasLowerCase = function (str) {
return (/[a-z]/.test(str));
};
mod_login.hasNumber = function (str) {
return (/[0-9]/.test(str));
};
mod_login.hasSpecialCharacters = function (str) {
return (/[!@#$%^&*()]/.test(str));
};
mod_login.passwordErrors = function (e) {
var $this = $(this);
setTimeout(function(){
var password= $this.val();
if(password.length < 6 || password.length > 14){
$("#charCnt").removeClass('success').addClass('error');
}else{
$("#charCnt").removeClass('error').addClass('success');
}
if(mod_login.hasLowerCase(password)){
$("#lwCnt").removeClass('error').addClass('success');
}else{
$("#lwCnt").removeClass('success').addClass('error');
}
if(mod_login.hasNumber(password)){
$("#numCnt").removeClass('error').addClass('success');
}else{
$("#numCnt").removeClass('success').addClass('error');
}
if(mod_login.hasSpecialCharacters(password)){
$("#spclCharCnt").removeClass('error').addClass('success');
}else{
$("#spclCharCnt").removeClass('success').addClass('error');
}
}, 0);
// return validPassword;
};
mod_login.showPassword = function (e) {
var $this = $(this);
$this.prev().attr('type', 'text');
$this.removeClass('view-password').addClass('hide-password');
};
mod_login.hidePassword = function (e) {
var $this = $(this);
$this.prev().attr('type', 'password');
$this.removeClass('hide-password').addClass('view-password');
};
mod_login.showPasswordCondition = function (e) {
e.stopPropagation();
$('.password-conditions').show();
};
mod_login.stopEventProp = function (e) {
e.stopPropagation();
};
mod_login.setLoginType = function (type) {
ssoLoginType = type;
}
mod_login.getLoginType = function () {
return ssoLoginType;
}
mod_login.setPageName = function(loginType) {
pageName = (loginType === 'email'? 'Email': 'MobNo');
}
mod_login.getPageName = function() {
return pageName;
}
mod_login.setScreenName = function (name) {
screenName = name;
};
mod_login.getScreenName = function (name) {
return screenName;
};
mod_login.setAndGetJssoCrosswalkObj = function () {
var jssoObj = {};
if(typeof jssoCrosswalkObj === 'object') {
jssoObj = jssoCrosswalkObj;
} else if (typeof JssoCrosswalk === 'function') {
jssoCrosswalkObj = new JssoCrosswalk('toi', 'web');
jssoObj = jssoCrosswalkObj;
}
return jssoObj;
}
mod_login.showLoader = function() {
cachedElements.formContainer.addClass('loader');
}
mod_login.hideLoader = function() {
cachedElements.formContainer.removeClass('loader');
}
mod_login.closeBtnHandler = function() {
cachedElements.loginPopup.removeClass('active');
$('body').removeClass('scroll-block');
mod_login.setScreenName('Login_Screen');
$('body').removeClass('disable-scroll');
$('#user-sign-in.toggle').removeClass("toi-user-login");
if(typeof grecaptcha === 'object' && $('#toi-register').is(':visible') && mod_login.showCaptcha()) {
grecaptcha.reset(recaptchaWidgetId);
}
};
mod_login.showConsentPopUp = function(){
var popUpHtml = '
'
+ '
'
+ '
Welcome Back to THE TIMES OF INDIA
'
+ '+'
+ '
'
+ '
'
+ '
One Last Step!
'
+ '
We tailor your experience and understand how you and other visitors use this website by using cookies and other technologies. This means we are able to keep this site free-of-charge to use.
'
+ '
Please provide consent for the following scenarios so that we can ensure an enjoyable experience for you on our websites and mobile apps.
';
return gstScreen;
}
var handleGstSubmit = function(){
if(!checkForMandatoryAndSubmitEnablement()){
return;
}
var postformData = {
"fullName": formObj.username,
"addressLine1": formObj.address,
"addressLine2": formObj.address2,
"pinCode":formObj.pincode,
"city" : formObj.city,
"state" : formObj.state,
"country" : formObj.country,
"gstIdentificationNumber": formObj.ugstnumber
}
var params = {
"isWapView": false,
"rqtype": "POST",
"postData": postformData
};
fetchGSTFormData(params).then(function(response){
if (response.status === 'SUCCESS' || response.status === 'GST_ADDRESS_ALREADY_UPDATED') {
require(['jquery','tiljs/event'],function($, event) {
event.publish("gst.submitted", {'test': 1});
});
if(window.userPrcData){
ga(
'send',
'event',
'Address_update_form_submit',
`TOIPlus_PlanPage_View`,
`Ps-${window.userPrcData.planStatus}/${window.userPrcData.accessType}`,
);
}
window.isGSTFormSubmit = true;
$('#gst-add-form').hide();
$('body').removeClass('disable-scroll');
}
})
}
cachedElements.formContainer
.on('keyup', '.inputValue', handleInputChange)
.on('focusout', '.inputValue', handleInputChange)
.on('click focus', '.inputValue', handleInputClick)
.on('click', '.gstSubmit', handleGstSubmit)
.on('click', '.closeBtn', handleCloseButton)
.on('click', '.reconsidersubmitbtn', gstFormRestartMandateHandler)
.on('click', '.skipbtn', gstFormSkipMandateHandler)
require(['jquery','tiljs/event'],function($, event) {
event.subscribe("gst.form",function(obj) {
window.userPrcData = obj.prcData;
gstScreen = getGstScreen(obj.nudgeData);
var gstFormClosedByUser = sessionStorage && sessionStorage.getItem("gstFormClosedByUser");
if (!(gstFormClosedByUser && gstFormClosedByUser.toLowerCase() == 'true')) {
console.log('obj', obj);
$('#gst-add-form').addClass('active');
$('body').addClass('disable-scroll');
$('#gst-add-form').html(gstScreen);
var params = {
"isWapView": false,
"rqtype": "GET",
"postData": null
};
firedGaWithDimension({ actEvt: 'GF_viewed' });
fetchGSTFormData(params).then(function(response){
if (response && response.data && Object.keys(response.data).length && response.data.address) {
var gstData = response.data.address;
formObj.username = gstData.fullName;
formObj.address = gstData.addressLine1;
formObj.address2 = gstData.addressLine2;
formObj.pincode = gstData.pinCode;
formObj.city = gstData.city;
formObj.state = gstData.state;
formObj.country = gstData.country;
formObj.ugstnumber = gstData.gstIdentificationNumber;
updateFormWithData();
checkForMandatoryAndSubmitEnablement();
}
})
}else{
firedGaWithDimension({ actEvt: 'GF_closeBtnViewed' });
}
});
});
})();
/* To integrate login please do the following:
* 1. Fork toiusermanagement_js and usermanagementcss and include it in your project
* 2. Add below JS files in your project. These files should be added globally
* a)
* b)
* 3. Update GA events category in the toiusermanagement_js as per your project needs
* 4. Update usermanagementcss file to change skin of Login modal
*/
define('tiljs/apps/times/mobilelogin',[
"../../util",
"module",
"../../page",
"../../ajax",
"../times/api",
"../../is",
"../../cookie",
"../../ui",
"../../logger",
"../../event",
"../../load",
"../../localstorage",
"../../user",
"../../analytics/mytimes",
"primeuserhandler",
"tiljs/apps/times/usermanagement"
],
function(util, module, page, ajax, api, is, cookie, ui, logger, event, load, localstorage, user, mytimes, puser, mod_login){
var mod_mobilelogin = {};
var config = {
resendTimeInSec: 60,
headingText:'Log in to your account',
completeprofile:'COMPLETE YOUR PROFILE',
bottomText:''
};
var config_default = {
headingText:'Log in to your account',
bottomText:'',
};
config.primemessages={headingText:'START YOUR FREE TRIAL',bottomText:'Enjoy exclusive articles & premium benefits from'}
config.adfreeprimemessages={headingText:'START AD-FREE TRIAL',bottomText:'Enjoy an ad-free experience & premium benefits from'}
config.verifymobile={headingText:'VERIFY MOBILE TO SUBSCRIBE',bottomText:''}
config.subscribe={headingText:'LOGIN TO SUBSCRIBE',bottomText:''}
var errorConfig = {
wrongOtp: 'Please Enter a valid OTP',
limitExceeded:'Maximum number of attempts to generate otp is exceeded. Please try again later.'
}
var cachedElements = {
loginPopup: $('#login-popup'),
formContainer: $('#user-sign-in'),
mobileLoginFormContainer: $('#mobile-login'),
closeBtn: $('#login-popup .close-btn')
}
var loginCallback = null;
var updateMobileCallback = null;
var resendTimeInterval;
var fireGAEvent = function(_action, _label) {
require(["pgtrack"], function(pgtrack) {
pgtrack.track('#' + _label + '~' + _action);
});
};
mod_mobilelogin.loginWithOTP = function(e, isRegenerate) {
// Do not perform any action if generate otp is disabled
// if($('#sso-generate-otp').hasClass('disabled')) {
// return;
// }
var $emailId = $('#toi-login input[name="emailId"]');
var $errorElem = $('#sso-otpLoginDiv');
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
inputVal = $('#toi-login input[name="emailId"]').val();
inputVal = mod_login.getValidMobileNumber(inputVal);
// fnCall = (loginType === 'email'? jssoObj.getEmailLoginOtp: jssoObj.getMobileLoginOtp);
mod_login.showLoader();
if (!!config.updateMobileFlow) {
mod_mobilelogin.updateUserMobile(inputVal, mod_mobilelogin.updateUserMobileCallback(isRegenerate, $errorElem));
}
else if (mod_login.getScreenName() === 'Register_New_User') {
jssoObj.resendMobileSignUpOtp(inputVal, mod_login.ssoid, mod_mobilelogin.handleLoginOTPCallback(isRegenerate, $errorElem));
mod_mobilelogin.showstate('.verifymobilenewuser');
} else {
jssoObj.getMobileLoginOtp(inputVal, mod_mobilelogin.handleLoginOTPCallback(isRegenerate, $errorElem));
mod_mobilelogin.showstate('.verifymobile');
}
// fnCall.call(jssoObj, inputVal, mod_login.handleLoginOTPCallback(isRegenerate));
if(isRegenerate) {
if(mod_login.getGa()!=""){
mod_login.fireGAEventMetered('Login_screen_OTPScreen_OTPResend','MobNo_OTP_Entry' + '/'+mod_login.getGa());
}
else
{
mod_login.fireGAEvent( mod_login.getPageName() + '_Re_OTP');
}
} else {
mod_login.fireGAEvent(mod_login.getPageName() + '_OTP_Submit');
}
};
// Duplicate method in case any message needed for regenerate OTP logic
mod_mobilelogin.regenerateLoginOTP = function() {
// Do not perform any action if regenerate otp is disabled
if($('#sso-regenerate-otp').hasClass('disabled')) {
return;
}
mod_mobilelogin.loginWithOTP({}, true);
};
mod_mobilelogin.handleLoginOTPCallback = function(isRegenerate, $errorElement) {
return function (response) {
mod_login.hideLoader();
// var $errorElement = $('#toi-login li.password:visible');
mod_login.handleError($errorElement);
if(response && response.code === 200) {
$('#regenerate-otp-container').show();
mod_mobilelogin.startResendOtpInterval();
var loginType = mod_login.getLoginType();
var inputVal = $('#toi-login input[name="emailId"]').val();
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
$('#sso-pwdDiv').hide();
$('#sso-otpLoginDiv, #sso-login-otp-msg').show();
$('#sso-mobile-input, .sso-signin-form-data, #sso-regenerate-otp, #sso-otpLoginDiv .errorMsg').hide();
$('#sso-otpLoginDiv, #sso-send-otp-screen').show();
$('#changeEmailIdDiv').css('display', 'inline-block');
// $('#sso-login-otp-msg > p').text('We have sent a 6 digit verification code ' + (loginType === 'email'? 'to ': 'on +91-') + inputVal);
if(isRegenerate) {
$('#toi-login input[name="otplogin"]').val('');
$('#toi-login .otpCodeInput').val('');
// $('#sso-otpLoginDiv .successMsg').text('OTP has been successfully sent.').show();
}
} else {
$('#sso-otpLoginDiv .successMsg').hide();
switch(response.code) {
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
// Disable Regenerate OTP button and remove text message specifying OTP has been sent
$('#sso-regenerate-otp, #sso-generate-otp, #sso-forgot-pass').addClass('disabled');
$('#sso-mobile-input > p #changeEmailIdDivSignUpOtp').show();
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
}
};
/**
* API callback of checkUserExists
*
* @param response - Response object
* @param
*/
mod_mobilelogin.checkUserExists = function(response) {
mod_login.hideLoader();
var $errorElement = $('#toi-login li.mobile');
var $emailId = $('#toi-login input[name="emailId"]');
var errorMsg = '', userName = '';
var loginType = mod_login.getLoginType();
var $signInBtn = $('#sso-signInButtonDiv');
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
inputVal = $('#toi-login input[name="emailId"]').val();
inputVal = (loginType === 'email'? mod_login.getValidEmailId(inputVal): mod_login.getValidMobileNumber(inputVal));
mod_login.handleError($errorElement);
$('#sso-send-otp-screen span').text(inputVal);
if(response && response.code === 200 && response.data) {
if(response.data.statusCode === 212 || response.data.statusCode === 213) {
if(typeof jssoObj.getMobileLoginOtp === 'function') {
mod_login.showLoader();
mod_mobilelogin.showstate('.verifymobile');
$('.toi-user-login #sso-signInButtonDiv [type="submit"]').removeClass("arrow-btn").addClass("user-submit-btn").text("Submit")
jssoObj.getMobileLoginOtp(inputVal, mod_mobilelogin.handleLoginOTPCallback(false, $errorElement));
if(mod_login.getGa()!=""){
mod_login.fireGAEventMetered('Login_screen_OTPScreen_view','MobNo_OTP_Entry' + '/'+mod_login.getGa())
}
else
{
mod_login.fireGAEvent(mod_login.getPageName() + '_OTP_Submit');
}
}
if(response.data.termsAccepted !== '1' || response.data.shareDataAllowed !== '1'){
$signInBtn.find('input[type="submit"]').attr('disabled', 'disabled');
// show and handle consent checkboxes
$(mod_login.getConsentHTML()).insertBefore($signInBtn);
// to handle both fb and google buttons in single line when checkboxes are visible
$('#user-sign-in').addClass('extra-content');
}
} else if(response.data.statusCode === 205 || response.data.statusCode === 206 || response.data.statusCode === 214 || response.data.statusCode === 215) {
mod_login.setScreenName('Register_New_User');
mod_mobilelogin.showstate('.verifymobilenewuser');
$('#sso-register-form input[name="emailId"]').val(inputVal);
mod_mobilelogin.showRegisterView();
} else {
$emailId.prop('disabled', false);
errorMsg = response.data.statusCode === 216 ? errorConfig.fpInvalidEmailOnly: errorConfig.fpInvalidEmail;
mod_login.handleError($errorElement, errorMsg);
}
} else {
$emailId.prop('disabled', false);
if(response.code === 410) {
mod_login.handleError($errorElement, (loginType === 'email'? errorConfig.fpInvalidEmailOnly: errorConfig.fpInvalidMobileOnly));
} else if(response.code === 503) {
mod_login.handleError($errorElement, errorConfig.connectionError);
} else {
mod_login.handleError($errorElement, errorConfig.serverError);
}
mod_login.fireGAEvent('API_Error_' + response.code);
}
};
mod_mobilelogin.otpNotSucceedHandling = function (response) {
var $errorElement = $('#sso-otpLoginDiv');
$('.successMsg').hide();
switch(response.code) {
case 414:
mod_login.handleError($errorElement, errorConfig.wrongOtp);
break;
case 415:
mod_login.handleError($errorElement, errorConfig.expiredOTP);
break;
case 416:
mod_login.handleError($errorElement, errorConfig.limitExceeded);
break;
case 503:
mod_login.handleError($errorElement, errorConfig.connectionError);
break;
default:
mod_login.handleError($errorElement, errorConfig.wrongOtp );
}
mod_login.fireGAEvent('API_Error_' + response.code);
};
mod_mobilelogin.handleLoginCallback = function (response) {
mod_login.hideLoader();
if(response && response.code === 200) {
mod_login.closeBtnHandler();
mod_login.isLoggedIn(mod_login.getLoginCallback());
if(mod_login.getGa()!=""){
sessionStorage.setItem('meteredLoginSuccess', 1);
}
else
{
mod_login.fireGAEvent('Login_Success_' + mod_login.getPageName());
}
if (resendTimeInterval) {
clearInterval(resendTimeInterval);
}
} else {
mod_mobilelogin.otpNotSucceedHandling(response);
}
};
mod_mobilelogin.handleEmailIdClick = function (e) {
e.preventDefault();
var $otp = $('#sso-otpLoginDiv');
var $emailId = $('#toi-login input[name="emailId"]');
var password = '';
var $errorMsgElem = $('#toi-login li.password:visible .errorMsg');
var _checkIsOTP;
$emailId.prop('disabled', true);
var jssoObj = mod_login.setAndGetJssoCrosswalkObj(),
loginType = mod_login.getLoginType(),
inputVal = $('#toi-login input[name="emailId"]').val(),
fnCall, $form, checkboxLen = 0;
inputVal = mod_login.getValidMobileNumber(inputVal);
if($otp.is(':visible')) {
// fnCall = (mod_login.getScreenName() === 'Register_New_User'? jssoObj.verifyMobileSignUp: jssoObj.verifyMobileLogin);
$('input.otpCodeInput').each(function(index, value) {
password += $(value).val().toString();
});
_checkIsOTP = mod_mobilelogin.checkIsOTP(password);
// password = $otp.val();
if(mod_login.getGa()!=""){
mod_login.fireGAEventMetered('Login_screen_OTPScreen_Verify_OTP','MobNo_OTP_Entry/'+mod_login.getGa())
}
else
{
mod_login.fireGAEvent(mod_login.getPageName() + '_OTP_Entry');
}
if(!_checkIsOTP) {
$errorMsgElem.html(errorConfig.emptyPassword).show();
return;
} else {
if(config.updateMobileFlow){
mod_mobilelogin.verifyUserMobile(inputVal, password, mod_mobilelogin.verifyUserMobileCallback);
}
else{
$form = $('#sso-login-form');
var checkboxLen = $form.find('.js-contentCB').length;
if (checkboxLen > 0 && !mod_login.areMandatoryFieldsSelected($form)) {
return;
}
$('.errorMsg').html('').hide();
mod_login.showLoader();
if (mod_login.getScreenName() === 'Register_New_User') {
jssoObj.verifyMobileSignUp(inputVal, mod_login.ssoid, password, mod_mobilelogin.handleLoginCallback);
mod_mobilelogin.showstate('.ftanew');
} else {
mod_mobilelogin.showstate('.fta');
$form = $('#sso-login-form');
checkboxLen = $form.find('.js-contentCB').length;
if (checkboxLen > 0 && !mod_login.areMandatoryFieldsSelected($form)) {
return;
}
if(checkboxLen > 0){
jssoObj.verifyMobileLoginGdpr(inputVal, password, '1', '1', mod_login.getTimespointValue(), mod_mobilelogin.handleLoginCallback);
} else {
jssoObj.verifyMobileLogin(inputVal, password, mod_mobilelogin.handleLoginCallback);
}
}
// fnCall.call(jssoObj, inputVal, password, mod_login.handleLoginCallback);
}
}
} else {
if(!!config.updateMobileFlow){
var $errorElement = $('#sso-mobile-input');
mod_mobilelogin.updateUserMobile(inputVal, mod_mobilelogin.updateUserMobileCallback(false, $errorElement));
}
else if(typeof jssoObj.checkUserExists === 'function') {
mod_login.showLoader();
jssoObj.checkUserExists(inputVal, mod_mobilelogin.checkUserExists);
mod_login.setPageName(loginType);
if(mod_login.getGa()!=""){
mod_login.fireGAEventMetered('Login_screen_Mobile_Submit','Mobno_Continue/'+mod_login.getGa())
}
else
{
mod_login.fireGAEvent(mod_login.getPageName() + '_Continue');
}
} else {
$emailId.prop('disabled', false);
}
}
};
mod_mobilelogin.handleEmailIdKeyPress = function(e) {
var $this = $(this);
var keyCode = mod_mobilelogin.getKeyCode(e);
if (keyCode === 13) {
return true;
}
if((keyCode === 8) || !mod_mobilelogin.allowNumber(e)){
return false;
}
}
mod_mobilelogin.changeRegisterMobileHandler = function(e) {
e.stopPropagation();
$('#sso-login-form, #sso-signin-form').show();
$('#sso-register-form').hide();
mod_mobilelogin.changeEmailIdHandler(e);
};
mod_mobilelogin.changeRegisterMobileHandlerOtp = function(e) {
e.stopPropagation();
$('#sso-mobile-input > p #changeEmailIdDivSignUpOtp').hide();
mod_mobilelogin.changeEmailIdHandler(e);
};
/**
* Handles Change Email/Mobile link click
*
* @param
* @param
*/
mod_mobilelogin.changeEmailIdHandler = function (e) {
$('#sso-pwdDiv, #changeEmailIdDiv, #sso-otpLoginDiv, #sso-login-otp-msg, #sso-send-otp-screen, #regenerate-otp-container, #sso-regenerate-otp').hide();
$('#sso-mobile-input, .sso-signin-form-data').show();
$('#toi-login input[name="emailId"]').prop('disabled', false).val('');
$('#sso-signInButtonDiv [type="submit"]').prop('disabled', true).addClass('disabled');
$('.errorMsg, .successMsg').hide();
$('.error').removeClass('error');
// $('#sso-signInButtonDiv > input').val('Continue');
$('#sso-pwdDiv input[name="password"]').val('');
$('#sso-otpLoginDiv input[type="password"]').val('');
$('#sso-regenerate-otp, #sso-fp-regenerate-otp, #sso-verify-regenerate-otp, #sso-generate-otp, #sso-forgot-pass').removeClass('disabled');
mod_login.fireGAEvent(mod_login.getPageName() + '_Change');
mod_login.setScreenName('Login_Screen');
mod_mobilelogin.showstate('.startscreen');
$('#sso-signInButtonDiv [type="submit"]').removeClass("user-submit-btn").addClass("arrow-btn").text("")
clearInterval(resendTimeInterval);
mod_login.ssoid = '';
$('#toi-login .otpCodeInput').val('');
if($("#sso-signin-form").find(".checkbox").length > 0){
$("#sso-signin-form").find(".checkbox").remove()
}
};
mod_mobilelogin.allowNumber = function(event) {
var keyCode = mod_mobilelogin.getKeyCode(event);
if (event.target.value.length >= 10 ||
$.inArray(keyCode, [0, 32]) > -1 ||
(keyCode != 8 && isNaN(String.fromCharCode(keyCode)))) {
event.preventDefault(); //stop character from entering input
return false;
}
return true;
};
mod_mobilelogin.getKeyCode = function (event) {
var keyCode = event.keyCode || event.which;
if (keyCode == 0 || keyCode == 229) { //for android chrome keycode fix
var value = event.target.value;
keyCode = value.charCodeAt(value.length - 1);
}
return keyCode;
}
mod_mobilelogin.showConsentPopUp = function(){
var popUpHtml = '
'
+ '
'
+ '
Welcome Back to THE TIMES OF INDIA
'
+ '+'
+ '
'
+ '
'
+ '
One Last Step!
'
+ '
We tailor your experience and understand how you and other visitors use this website by using cookies and other technologies. This means we are able to keep this site free-of-charge to use.
'
+ '
Please provide consent for the following scenarios so that we can ensure an enjoyable experience for you on our websites and mobile apps.