(function($){
"use strict";
$(document).ready(function(){
var progress_bar=false;
var rhLoginMessageBox=$('.rh_login_modal_messages');
var rhLoginMessagesCommon=$('.rh_login_modal_messages .rh_modal__msg');
var rhLoginModalLoader=$('.rh_modal_login_loader');
if($('#rh_progress').length){
progress_bar=new ProgressBar.Line('#rh_progress', {
easing: 'easeInOut',
color: '#1ea69a',
strokeWidth: 0.3,
});
}
if(jQuery().validate&&jQuery().ajaxSubmit){
var loginButton=$('#login-button'),
loginError=$("#login-error"),
loginMessage=$('#login-message');
var loginOptions={
beforeSubmit: function (){
if(progress_bar){
progress_bar.set(0);
progress_bar.animate(1);
}
loginButton.attr('disabled', 'disabled');
rhLoginModalLoader.removeClass('rh_modal_login_loader_hide');
},
success: function (ajax_response, statusText, xhr, $form){
var response=$.parseJSON(ajax_response);
loginButton.removeAttr('disabled');
rhLoginModalLoader.addClass('rh_modal_login_loader_hide');
if(response.success){
if(response.requires_otp){
rhShowOtpPanel(response.user_id, response.otp_nonce, 'login', response.redirect);
}else{
rhLoginMessagesCommon.fadeOut(50,'swing',function (){
rhLoginMessageBox.slideDown('fast');
});
loginMessage.html(response.message).fadeIn(200);
if(window.location.href==response.redirect){
window.location.reload(true);
}else{
window.location.replace(response.redirect);
}}
}else{
rhLoginMessagesCommon.fadeOut(50,'swing',function (){
rhLoginMessageBox.slideDown('fast');
});
loginError.html(response.message).fadeIn(200);
if(typeof inspiryResetReCAPTCHA=='function'){
inspiryResetReCAPTCHA();
}}
}};
$('#rh_modal__login_form, #login-form').validate({
submitHandler: function (form){
$(form).ajaxSubmit(loginOptions);
}});
var registerButton=$('#register-button'),
registerError=$("#register-error"),
registerMessage=$('#register-message');
var registerOptions={
beforeSubmit: function (){
if(progress_bar){
progress_bar.set(0);
progress_bar.animate(1);
}
registerButton.attr('disabled', 'disabled');
rhLoginModalLoader.removeClass('rh_modal_login_loader_hide');
},
success: function (ajax_response, statusText, xhr, $form){
var response=$.parseJSON(ajax_response);
registerButton.removeAttr('disabled');
rhLoginMessagesCommon.fadeOut(50,'swing',function (){
rhLoginMessageBox.slideDown('fast');
});
rhLoginModalLoader.addClass('rh_modal_login_loader_hide');
if(response.success){
registerMessage.html(response.message).fadeIn('fast');
$form.resetForm();
}else{
registerError.html(response.message).fadeIn('fast');
if(typeof inspiryResetReCAPTCHA=='function'){
inspiryResetReCAPTCHA();
}}
}};
$('#rh_modal__register_form, #register-form').validate({
rules: {
register_username: {
required: true
},
register_email: {
required: true,
email: true
}},
submitHandler: function (form){
$(form).ajaxSubmit(registerOptions);
}});
var forgotButton=$('#forgot-button'),
forgotError=$("#forgot-error"),
forgotMessage=$('#forgot-message');
var forgotOptions={
beforeSubmit: function (){
if(progress_bar){
progress_bar.set(0);
progress_bar.animate(1);
}
forgotButton.attr('disabled', 'disabled');
rhLoginModalLoader.removeClass('rh_modal_login_loader_hide');
},
success: function (ajax_response, statusText, xhr, $form){
var response=$.parseJSON(ajax_response);
forgotButton.removeAttr('disabled');
rhLoginMessagesCommon.fadeOut(50,'swing',function (){
rhLoginMessageBox.slideDown('fast');
});
rhLoginModalLoader.addClass('rh_modal_login_loader_hide');
if(response.success){
forgotMessage.html(response.message).fadeIn('fast');
$form.resetForm();
}else{
forgotError.html(response.message).fadeIn('fast');
if(typeof inspiryResetReCAPTCHA=='function'){
inspiryResetReCAPTCHA();
}}
}};
$('#rh_modal__forgot_form, #forgot-form').validate({
submitHandler: function (form){
$(form).ajaxSubmit(forgotOptions);
}});
}
$('.rh_form #rh_modal__forgot_form').slideUp('fast');
$('.rh_form .toggle-forgot-form').on('click', function(event){
event.preventDefault();
$('.rh_form #rh_modal__forgot_form').slideToggle('fast');
});
function rhSetLoginFormHeight(){
var $visibleForms=$("div.rh_form_modal");
var $otpPanel=$('.rh_otp_verification_panel');
if($otpPanel.is(':visible') ){
$visibleForms=$visibleForms.add($otpPanel);
}
var heights=$visibleForms.map(function (){
return $(this).outerHeight();
}).get();
var maxHeight=Math.max.apply(null, heights);
$('.rh_wrapper_login_forms').css('height',maxHeight);
}
$(window).resize(rhSetLoginFormHeight);
$('.rh_login_target').on('click',function (){
if(!$(this).hasClass('rh_active')){
$('.rh_login_tab').removeClass('rh_active');
$(this).addClass('rh_active');
$('.rh_form_modal').slideUp(500);
$('.rh_login_form').slideDown(500);
}});
$('.rh_register_target').on('click',function (){
if(!$(this).hasClass('rh_active')){
$('.rh_login_tab').removeClass('rh_active');
$(this).addClass('rh_active');
$('.rh_form_modal').slideUp(500);
$('.rh_register_form').slideDown(500);
}});
$('.rh_forget_password_trigger').on('click',function (){
$('.rh_login_tab').removeClass('rh_active');
$('.rh_form_modal').slideUp(500);
$('.rh_password_reset_form').slideDown(500);
});
var rhLoginViz=false;
$('.rh-ultra-menu-user-profile, .rh_menu__user_profile, .rhea_menu__user_profile svg, .rhea_menu__user_profile > span, .rh-user-account-profile-image .user-icon').on('click',function (e){
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
rhSetLoginFormHeight();
rhLoginViz=true;
});
function checkLoginTrigger(){
const urlParams=new URLSearchParams(window.location.search);
if(urlParams.has('show_login') ){
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
rhSetLoginFormHeight();
rhLoginViz=true;
history.replaceState(null, null, window.location.pathname);
}}
checkLoginTrigger();
$('.ask-for-login').on('click',function (event){
event.preventDefault();
$('.rh_login_modal_wrapper').css("display", "flex").hide().fadeIn(500);
rhSetLoginFormHeight();
rhLoginViz=true;
});
$('.rh_login_close, .close-login-modal').on('click',function (){
$('.rh_login_modal_wrapper').fadeOut(500);
rhLoginViz=false;
$('.rh_modal_field').val('');
});
$('body').on('click','.rh_login_modal_wrapper',function(e){
if(e.target===this){
$(this).fadeOut(500);
rhLoginMessageBox.slideUp('fast');
}});
$('body').on('click','.rh_login_modal_box',function(e){
if(e.target!==rhLoginMessageBox){
rhLoginMessageBox.slideUp('fast');
}});
$('.rh_login_close_message').on('click',function (){
rhLoginMessageBox.slideUp('fast');
});
var otpTimerInterval=null;
var otpVerifyInProgress=false;
var otpPendingTimeout=null;
var otpPreviousActiveTab=null;
var otpStrings=(typeof inspiryOTPStrings!=='undefined') ? inspiryOTPStrings:{};
function rhGetOtpElements(){
var $otpPanel=$('.rh_otp_verification_panel');
return {
$panel:       $otpPanel,
$overlay:     $otpPanel.find('.rh_otp_status_overlay'),
$formContent: $otpPanel.find('.rh_otp_form_content'),
$digits:      $otpPanel.find('.rh_otp_digit'),
$statusText:  $otpPanel.find('.rh_otp_status_overlay .rh_otp_status_text')
};}
function rhClearOtpTimers(){
if(otpTimerInterval){
clearInterval(otpTimerInterval);
otpTimerInterval=null;
}
if(otpPendingTimeout){
clearTimeout(otpPendingTimeout);
otpPendingTimeout=null;
}}
function rhRestoreLoginForm(){
rhClearOtpTimers();
var els=rhGetOtpElements();
otpVerifyInProgress=false;
els.$overlay.hide();
els.$formContent.show();
els.$panel.find('.rh_otp_attempts').hide();
els.$panel.slideUp(300);
$('.rh_login_tabs').slideDown(300);
$('.rh_wrapper_login_forms').slideDown(300);
$('.rh_login_form').slideDown(300);
$('.inspiry_social_login').slideDown(300, function (){
rhSetLoginFormHeight();
});
$('.rh_login_tab').removeClass('rh_active');
if(otpPreviousActiveTab){
$('.' + otpPreviousActiveTab).addClass('rh_active');
}else{
$('.rh_login_target').addClass('rh_active');
}
otpPreviousActiveTab=null;
setTimeout(rhSetLoginFormHeight, 350);
}
function rhShowOtpPanel(userId, otpNonce, context, redirectTo){
var els=rhGetOtpElements();
otpVerifyInProgress=false;
var $activeTab=$('.rh_login_tab.rh_active');
otpPreviousActiveTab=$activeTab.length ? $activeTab.attr('class').split(/\s+/).filter(function(c){
return c!=='rh_login_tab'&&c!=='rh_active';
})[0]||null:null;
$('.rh_form_modal').slideUp(300);
$('.rh_login_tabs').slideUp(300);
$('.rh_wrapper_login_forms').slideUp(300);
$('.inspiry_social_login').slideUp(300);
els.$panel.find('.rh_otp_user_id').val(userId);
els.$panel.find('.rh_otp_nonce').val(otpNonce);
els.$panel.find('.rh_otp_context').val(context);
els.$panel.find('.rh_otp_redirect').val(redirectTo);
var $verifyBtn=els.$panel.find('.rh_otp_verify_btn');
$verifyBtn.prop('disabled', false).text(otpStrings.verifyOTP);
els.$digits.val('');
els.$panel.find('.rh_otp_error').hide().text('');
els.$panel.find('.rh_otp_message').hide().text('');
els.$panel.find('.rh_otp_attempts').hide();
els.$overlay.hide();
els.$formContent.show();
els.$panel.slideDown(300, function (){
els.$digits.first().focus();
});
rhStartOtpTimer();
}
function rhStartOtpTimer(){
var els=rhGetOtpElements();
var timeRemaining=parseInt(otpStrings.timerDuration, 10)||300;
var $timer=els.$panel.find('.rh_otp_timer');
var $verifyBtn=els.$panel.find('.rh_otp_verify_btn');
rhClearOtpTimers();
function updateDisplay(){
var m=Math.floor(timeRemaining / 60);
var s=timeRemaining % 60;
$timer.text(( m < 10 ? '0':'') + m + ':' +(s < 10 ? '0':'') + s);
}
updateDisplay();
otpTimerInterval=setInterval(function (){
if(--timeRemaining <=0){
clearInterval(otpTimerInterval);
otpTimerInterval=null;
$timer.text('00:00');
$verifyBtn.prop('disabled', true);
els.$panel.find('.rh_otp_error').text(otpStrings.otpExpired).fadeIn(200);
setTimeout(function (){
if(els.$panel.is(':visible') ){
rhRestoreLoginForm();
}}, 1500);
}else{
updateDisplay();
}}, 1000);
}
$(document).on('input', '.rh_otp_digit', function (){
var $this=$(this);
var value=$this.val().replace(/\D/g, '');
if(value.length > 1){
value=value.charAt(value.length - 1);
}
$this.val(value);
if(value&&$this.next('.rh_otp_digit').length){
$this.next('.rh_otp_digit').focus();
}
rhCheckAutoVerify();
});
$(document).on('keydown', '.rh_otp_digit', function(e){
if(e.key==='Backspace'&&! $(this).val()){
$(this).prev('.rh_otp_digit').focus();
}});
$(document).on('paste', '.rh_otp_digit', function(e){
e.preventDefault();
var clipboardData=e.originalEvent.clipboardData||window.clipboardData;
if(! clipboardData) return;
var digits=clipboardData.getData('text').replace(/\D/g, '').substring(0, 6);
if(! digits.length) return;
var els=rhGetOtpElements();
for(var i=0; i < digits.length; i++){
els.$digits.eq(i).val(digits.charAt(i) );
}
var $nextEmpty=els.$digits.filter(function (){ return ! $(this).val(); }).first();
($nextEmpty.length ? $nextEmpty:els.$digits.last()).focus();
rhCheckAutoVerify();
});
function rhCheckAutoVerify(){
if(otpVerifyInProgress) return;
var els=rhGetOtpElements();
var allFilled=els.$digits.filter(function (){
return $(this).val().length===1;
}).length===6;
if(allFilled){
otpPendingTimeout=setTimeout(function (){
otpPendingTimeout=null;
if(! otpVerifyInProgress){
rhVerifyOtp();
}}, 150);
}}
function rhFormatOtpMessage(message){
return message;
}
function rhShowOtpStatus(state, message){
var els=rhGetOtpElements();
els.$formContent.stop(true, true);
els.$overlay.stop(true, true);
els.$overlay.find('svg').hide();
els.$statusText.removeClass('rh_otp_status_success rh_otp_status_error').text('');
if(state==='loading'){
els.$formContent.fadeOut(200, function (){
els.$overlay.find('.rh_otp_spinner').show();
els.$statusText.html(rhFormatOtpMessage(message||otpStrings.verifying) ).show();
els.$overlay.fadeIn(200);
});
}else if(state==='success'){
els.$formContent.hide();
els.$overlay.find('.rh_otp_spinner').hide();
var $check=els.$overlay.find('.rh_otp_checkmark');
var $clone=$check.clone(true);
$check.replaceWith($clone);
$clone.show();
els.$statusText.addClass('rh_otp_status_success').html(rhFormatOtpMessage(message||otpStrings.verified) );
els.$overlay.show();
}else if(state==='error'){
els.$formContent.hide();
els.$overlay.find('.rh_otp_spinner').hide();
var $cross=els.$overlay.find('.rh_otp_cross');
var $crossClone=$cross.clone(true);
$cross.replaceWith($crossClone);
$crossClone.show();
els.$statusText.addClass('rh_otp_status_error').html(rhFormatOtpMessage(message||otpStrings.verifyFailed) );
els.$overlay.show();
}}
function rhResetOtpForm(remainingAttempts){
var els=rhGetOtpElements();
els.$overlay.fadeOut(200, function (){
els.$overlay.find('svg').hide();
els.$digits.val('');
els.$panel.find('.rh_otp_error').hide().text('');
els.$panel.find('.rh_otp_message').hide().text('');
els.$panel.find('.rh_otp_verify_btn').prop('disabled', false).text(otpStrings.verifyOTP);
otpVerifyInProgress=false;
var $attempts=els.$panel.find('.rh_otp_attempts');
if(typeof remainingAttempts!=='undefined'&&remainingAttempts > 0){
var attemptWord=remainingAttempts!==1 ? otpStrings.attemptPlural:otpStrings.attemptSingular;
$attempts.text(remainingAttempts + ' ' + attemptWord + ' ' + otpStrings.remaining).show();
}else{
$attempts.hide();
}
els.$formContent.fadeIn(200, function (){
els.$digits.first().focus();
});
});
}
function rhVerifyOtp(){
if(otpVerifyInProgress) return;
var els=rhGetOtpElements();
if(els.$panel.find('.rh_otp_verify_btn').prop('disabled') ){
return;
}
var otpCode='';
els.$digits.each(function (){
otpCode +=$(this).val();
});
if(otpCode.length!==6){
els.$panel.find('.rh_otp_error').text(otpStrings.enterAllDigits).fadeIn(200);
return;
}
otpVerifyInProgress=true;
rhShowOtpStatus('loading', otpStrings.verifyingCode);
$.ajax({
url: $('#rh_modal__login_form, #login-form').first().attr('action')||ajaxurl,
type: 'POST',
data: {
action: 'ere_verify_otp',
user_id: els.$panel.find('.rh_otp_user_id').val(),
otp_nonce: els.$panel.find('.rh_otp_nonce').val(),
otp_code: otpCode,
otp_context: els.$panel.find('.rh_otp_context').val(),
redirect_to: els.$panel.find('.rh_otp_redirect').val()
},
success: function(response){
if(response.success){
rhShowOtpStatus('success', response.data.message||otpStrings.otpVerified);
rhClearOtpTimers();
if(response.data.redirect){
otpPendingTimeout=setTimeout(function (){
window.location.replace(response.data.redirect);
}, 1200);
}}else{
var errorMsg=(response.data&&response.data.message)||otpStrings.verifyFailed;
rhShowOtpStatus('error', errorMsg);
var attemptsLeft=(response.data&&typeof response.data.remaining_attempts!=='undefined')
? response.data.remaining_attempts:-1;
if(attemptsLeft===0){
rhClearOtpTimers();
els.$panel.find('.rh_otp_verify_btn').prop('disabled', true);
otpPendingTimeout=setTimeout(rhRestoreLoginForm, 1500);
}else{
otpPendingTimeout=setTimeout(function (){
rhResetOtpForm(attemptsLeft);
}, 1800);
}}
},
error: function (){
rhShowOtpStatus('error', otpStrings.connectionError);
otpPendingTimeout=setTimeout(function (){
rhResetOtpForm();
}, 1800);
}});
}
$(document).on('click', '.rh_otp_verify_btn', rhVerifyOtp);
$(document).on('click', '.rh_otp_cancel_btn', rhRestoreLoginForm);
});
})(jQuery);