PageSourceSearch

https://ambivert.club/wp-content/plugins/quiz-master-next/js/qsm-quiz.js?ver=9.0.0

js ambivert.club collected 2026-10-09 23:22:02 UTC 84,082 bytes, 2,030 lines download raw bytes

1/**************************
2 * Quiz And Survey Master
3 *************************/
4
5/**************************
6 * This object contains the newer functions. All global functions under are slowly
7 * being deprecated and replaced with rewritten newer functions
8 **************************/
9
10var QSM;
11var qsmTimerInterval = [];
12(function ($) {
13	QSM = {
14		/**
15		 * Initializes all quizzes or surveys on the page
16		 */
17		init: function () {
18			// Makes sure we have quizzes on this page
19			if (typeof qmn_quiz_data != 'undefined' && qmn_quiz_data) {
20				// hide the recaptcha by default
21				$('.g-recaptcha').hide();
22				// Cycle through all quizzes
23				_.each(qmn_quiz_data, function (quiz) {
24					let quizID = parseInt(quiz.quiz_id);
25					if ( null == localStorage.getItem('mlw_quiz_start_date' + quizID) ) {
26						localStorage.setItem('mlw_quiz_start_date' + quizID, qmn_ajax_object.start_date);
27						localStorage.setItem('mlw_time_consumed_quiz' + quizID, 1);
28					}
29					jQuery.ajax({
30						url: qmn_ajax_object.ajaxurl,
31						data: {
32							action: "qsm_create_quiz_nonce",
33							quiz_id: quizID,
34						},
35						type: 'POST',
36						success: function (response) {
37							jQuery('.qsm-quiz-container-' + quizID + ' #qsm_unique_key_'+quizID).val(response.data.unique_key);
38							jQuery('.qsm-quiz-container-' + quizID + ' #qsm_nonce_'+quizID).val(response.data.nonce);
39						}
40					});
41					QSM.initPagination(quizID);
42					if ( ( quiz.hasOwnProperty('pagination') || ( _.keys(quiz.qpages).length > 1 && !jQuery('.qsm-quiz-container-'+quizID+' .qsm-auto-page-row').length ) ) ) {
43						qsmEndTimeTakenTimer(quizID);
44						jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(0);
45						jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").val(0);
46						quizType = 'paginated';
47						jQuery(document).trigger('start_stop_page_timer', [quizID]);
48					}
49					if (quiz.hasOwnProperty('timer_limit') && 0 != quiz.timer_limit) {
50						QSM.initTimer(quizID);
51						quizType = 'timer';
52					} else {
53						qsmTimerInterval[quizID] = setInterval(function () { qmnTimeTakenTimer(quizID) }, 1000);
54					}
55					if (jQuery('.qsm-quiz-container-' + quizID + ' .qsm-submit-btn').is(':visible') && !jQuery('.qsm-quiz-container-' + quizID).hasClass('qsm_auto_pagination_enabled') ) {
56						jQuery('.qsm-quiz-container-' + quizID + ' .qsm-quiz-comment-section').fadeIn();
57					}
58				});
59			}
60		},
61
62		/**
63		 * Sets up timer for a quiz
64		 *
65		 * @param int quizID The ID of the quiz
66		 */
67		initTimer: function (quizID) {
68
69			jQuery(document).trigger('qsm_init_timer_before', [quizID]);
70
71			// Gets our form
72			var $quizForm = QSM.getQuizForm(quizID);
73
74			// Creates timer status key.
75			qmn_quiz_data[quizID].timerStatus = false;
76
77			// If we are using the newer pagination system...
78			if (0 < $quizForm.children('.qsm-page').length) {
79				// If there is a first page...
80				if (!qmn_quiz_data[quizID].hasOwnProperty('first_page') || !qmn_quiz_data[quizID].first_page) {
81					QSM.activateTimer(quizID);
82					$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
83				}
84				// ...else, we must be using the questions per page option.
85			} else if (qmn_quiz_data[quizID].hasOwnProperty('pagination') && qmn_quiz_data[quizID].first_page) {
86				$(document).on('click', '.qsm-quiz-container-' + quizID + ' .mlw_next', function (event) {
87					event.preventDefault();
88					if ( qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') ) {
89						var start_timer = parseInt(qmn_quiz_data[quizID].advanced_timer.start_timer_page);
90						if ($('.qsm-quiz-container-' + quizID).find('.qmn_pagination > .slide_number_hidden').val() == start_timer) {
91							QSM.activateTimer(quizID);
92							$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
93						}
94					} else if (!qmn_quiz_data[quizID].timerStatus && (0 == $('.quiz_begin:visible').length || (1 == $('.quiz_begin:visible').length && qmnValidatePage('quizForm' + quizID)))) {
95						QSM.activateTimer(quizID);
96						$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
97					}
98				});
99			} else {
100				QSM.activateTimer(quizID);
101				$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
102			}
103			jQuery(document).trigger('qsm_init_timer_after', [quizID]);
104		},
105		/**
106		 * Starts the timer for the quiz.
107		 *
108		 * @param int quizID The ID of the quiz.
109		 */
110		activateTimer: function (quizID) {
111			var timer_ms = jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").val();
112			if (timer_ms == 0) {
113				jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(0);
114				qsmTimerInterval[quizID] = setInterval(function () { qmnTimeTakenTimer(quizID) }, 1000);
115				jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").each(function () {
116					var timems = qsmTimeInMS();
117					jQuery(this).val(timems);
118				});
119			}
120
121			jQuery(document).trigger('qsm_activate_time_before', [quizID, qmn_quiz_data]);
122			// Gets our form.
123			var $timer = QSM.getTimer(quizID);
124
125			// Sets up our variables.
126			qmn_quiz_data[quizID].timerStatus = true;
127			var seconds = 0;
128
129			// Calculates starting time.
130			var timerTotal = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60;
131			var timerStarted = localStorage.getItem('mlw_started_quiz' + quizID);
132			var timerConsumed = parseInt(localStorage.getItem('mlw_time_consumed_quiz' + quizID));
133			var timerRemaning = timerTotal - timerConsumed;
134			if ('yes' == timerStarted && 0 < timerRemaning) {
135				seconds = parseInt(timerRemaning);
136			} else {
137				seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60;
138			}
139			qmn_quiz_data[quizID].timerRemaning = seconds;
140			qmn_quiz_data[quizID].timerConsumed = timerConsumed;
141
142			//hidden timer
143			jQuery(".hiddentimer").html(seconds);
144
145			// Makes the timer appear.
146			$timer.show();
147			$timer.text(QSM.secondsToTimer(seconds));
148
149			// Sets up timer interval.
150			if (!isNaN(qmn_quiz_data[quizID].timerRemaning)) {
151				clearInterval(qmn_quiz_data[quizID].timerInterval);
152				qmn_quiz_data[quizID].timerInterval = setInterval(QSM.timer, 1000, quizID);
153			}
154			jQuery(document).trigger('qsm_activate_time_after', [quizID, qmn_quiz_data]);
155		},
156		/**
157		 * Reduces the timer by one second and checks if timer is 0
158		 *
159		 * @param int quizID The ID of the quiz.
160		 */
161		timer: function (quizID) {
162			qmn_quiz_data[quizID].timerRemaning -= 1;
163			qmn_quiz_data[quizID].timerConsumed += 1;
164			if (0 > qmn_quiz_data[quizID].timerRemaning) {
165				qmn_quiz_data[quizID].timerRemaning = 0;
166			}
167			var secondsRemaining = qmn_quiz_data[quizID].timerRemaning;
168			var secondsConsumed = qmn_quiz_data[quizID].timerConsumed;
169			if (localStorage.getItem('mlw_time_quiz' + quizID) != null ) {
170				secondsRemaining = (parseFloat(qmn_quiz_data[quizID].timer_limit) * 60) - secondsConsumed + 1;
171				if(secondsRemaining < 0) {
172					secondsRemaining = 0;
173				}
174			}
175			var display = QSM.secondsToTimer(secondsRemaining);
176			var systemTime = new Date().getTime() / 1000;
177			systemTime = Math.round(systemTime);
178			if ('1' === qmn_quiz_data[quizID].not_allow_after_expired_time && systemTime > qmn_quiz_data[quizID].scheduled_time_end) {
179				MicroModal.show('modal-4');
180				return false;
181			}
182			// Sets our local storage values for the timer being started and current timer value.
183			localStorage.setItem('mlw_time_consumed_quiz' + quizID, secondsConsumed );
184			localStorage.setItem('mlw_time_quiz' + quizID, secondsRemaining);
185			localStorage.setItem('mlw_started_quiz' + quizID, "yes");
186
187			// Updates timer element and title on browser tab.
188			var $timer = QSM.getTimer(quizID);
189			$timer.text(display);
190			if (0 < qmn_quiz_data[quizID].timer_limit) {
191				document.title = display + ' ' + qsmTitleText;
192			}
193
194			var $quizForm = QSM.getQuizForm(quizID);
195			var total_seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60;
196			var ninety_sec = total_seconds - (total_seconds * 90 / 100);
197			/*CUSTOM TIMER*/
198			jQuery(document).trigger('load_timer_faces', [quizID, secondsRemaining, total_seconds, display]);
199			if (ninety_sec == secondsRemaining) {
200				$quizForm.closest('.qmn_quiz_container').find('.qsm_ninety_warning').fadeIn();
201			}
202
203			// If timer is run out, disable fields.
204			if (0 >= secondsRemaining && 0 < qmn_quiz_data[quizID].timer_limit) {
205				clearInterval(qmn_quiz_data[quizID].timerInterval);
206				$(".mlw_qmn_quiz input:radio").attr('disabled', true);
207				$(".mlw_qmn_quiz input:checkbox").attr('disabled', true);
208				$(".mlw_qmn_quiz select").attr('disabled', true);
209				$(".mlw_qmn_question_comment").attr('disabled', true);
210				$(".mlw_answer_open_text").attr('disabled', true);
211				$(".mlw_answer_number").attr('readonly', true);
212
213				$quizForm.closest('.qmn_quiz_container').addClass('qsm_timer_ended');
214				$quizForm.closest('.qmn_quiz_container').prepend('<p class="qmn_error_message" style="color: red;">' + qmn_ajax_object.quiz_time_over + '</p>');
215				if (qmn_quiz_data[quizID].enable_result_after_timer_end == 1) {
216					$quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click');
217				} else {
218					$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').hide();
219					MicroModal.show('modal-3');
220				}
221				return;
222			}
223		},
224		/**
225		 * Clears timer interval
226		 *
227		 * @param int quizID The ID of the quiz
228		 */
229		endTimer: function (quizID) {
230			localStorage.setItem('mlw_time_quiz' + quizID, 'completed');
231			localStorage.setItem('mlw_started_quiz' + quizID, 'no');
232			localStorage.removeItem('mlw_time_consumed_quiz' + quizID);
233			document.title = qsmTitleText;
234			if (typeof qmn_quiz_data[quizID].timerInterval != 'undefined') {
235				clearInterval(qmn_quiz_data[quizID].timerInterval);
236			}
237			jQuery(document).trigger('qsm_end_timer', [quizID, qmn_quiz_data]);
238		},
239		/**
240		 * Converts seconds to 00:00:00 format
241		 *
242		 * @param int seconds The number of seconds
243		 * @return string A string in H:M:S format
244		 */
245		secondsToTimer: function (seconds) {
246			var formattedTime = '';
247			seconds = parseInt(seconds);
248
249			// Prepares the hours part.
250			var hours = Math.floor(seconds / 3600);
251			if (0 === hours) {
252				formattedTime = '00:';
253			} else if (10 > hours) {
254				formattedTime = '0' + hours + ':';
255			} else {
256				formattedTime = hours + ':';
257			}
258
259			// Prepares the minutes part.
260			var minutes = Math.floor((seconds % 3600) / 60);
261			if (0 === minutes) {
262				formattedTime = formattedTime + '00:';
263			} else if (10 > minutes) {
264				formattedTime = formattedTime + '0' + minutes + ':';
265			} else {
266				formattedTime = formattedTime + minutes + ':';
267			}
268
269			// Prepares the seconds part.
270			var remainder = Math.floor((seconds % 60));
271			if (0 === remainder) {
272				formattedTime = formattedTime + '00';
273			} else if (10 > remainder) {
274				formattedTime = formattedTime + '0' + remainder;
275			} else {
276				formattedTime = formattedTime + remainder;
277			}
278			return formattedTime;
279		},
280		/**
281		 * Gets the jQuery object for the timer
282		 */
283		getTimer: function (quizID) {
284			var $quizForm = QSM.getQuizForm(quizID);
285			return $quizForm.children('.mlw_qmn_timer');
286		},
287
288		/**
289		 * Sets up pagination for a quiz
290		 *
291		 * @param int quizID The ID of the quiz.
292		 */
293		initPagination: function (quizID) {
294			var $quizForm = QSM.getQuizForm(quizID);
295			/**
296			 *
297			 * CHecking if the quiz is random
298			 */
299			$is_random = $('.qmn_quiz_container').hasClass('random');
300			if (0 < $quizForm.children('.qsm-page').length) {
301				$quizForm.children('.qsm-page').hide();
302				template = wp.template('qsm-pagination-' + quizID);
303				$quizForm.append(template());
304				if ($quizForm.find('.qsm-pagination > .current_page_hidden').length == 0) {
305					$quizForm.find('.qsm-pagination').append('<input type="hidden" value="
3050" name="current_page" class="current_page_hidden" />');
306				}
307				if ('1' == qmn_quiz_data[quizID].progress_bar) {
308					jQuery(document).trigger('qsm_init_progressbar_before', [quizID, qmn_quiz_data]);
309					$('#quizForm' + quizID).find('.qsm-progress-bar').show();
310					qmn_quiz_data[quizID].bar = new ProgressBar.Line('#quizForm' + quizID + ' .qsm-progress-bar', {
311						strokeWidth: 2,
312						easing: 'easeInOut',
313						duration: 1400,
314						color: '#3498db',
315						trailColor: '#eee',
316						trailWidth: 1,
317						svgStyle: { width: '100%', height: '100%' },
318						text: {
319							style: {
320								// color: '#999',
321								position: 'absolute',
322								padding: 0,
323								margin: 0,
324								top: 0,
325								right: '10px',
326								'font-size': '13px',
327								'font-weight': 'bold',
328								transform: null
329							},
330							autoStyleContainer: false
331						},
332						from: { color: '#3498db' },
333						to: { color: '#ED6A5A' },
334						step: function (state, bar) {
335							//bar.setText(Math.round(bar.value() * 100) + ' %');
336						}
337					});
338					jQuery(document).trigger('qsm_init_progressbar_after', [quizID, qmn_quiz_data]);
339				}
340				QSM.goToPage(quizID, 1);
341				jQuery(document).on('click', '.qsm-quiz-container-' + quizID + ' .qsm-pagination .qsm-next', function (event) {
342					jQuery(document).trigger('qsm_next_button_click_before', [quizID]);
343					event.preventDefault();
344					let $quizForm = QSM.getQuizForm(quizID);
345					jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').addClass('qsm-disabled-btn');
346					jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').append('<div class="qsm-spinner-loader" style="font-size: 3.5px;margin-right: -5px;margin-left: 10px;"></div>');
347					jQuery('.qsm-multiple-response-input:checked, .qmn-multiple-choice-input:checked , .qsm_select:visible').each(function () {
348						if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) {
349							if (jQuery(this).parents('.qmn_radio_answers, .qsm_check_answer')) {
350								let question_id = jQuery(this).attr('name').split('question')[1],
351								value = jQuery(this).val(),
352								$this = jQuery(this).parents('.quiz_section');
353								if (value !== "") {
354									qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm);
355								}
356							}
357						}
358					})
359					jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').removeClass('qsm-disabled-btn');
360					jQuery('.qsm-quiz-container-' + quizID + ' .qsm-spinner-loader').remove();
361					QSM.nextPage(quizID);
362					var $container = jQuery('.qsm-quiz-container-' + quizID);
363					if (qmn_quiz_data[quizID].disable_scroll_next_previous_click != 1) {
364						qsmScrollTo($container);
365					}
366					jQuery(document).trigger('qsm_next_button_click_after', [quizID]);
367				});
368				jQuery(document).on('click', '.qsm-quiz-container-' + quizID + ' .qsm-pagination .qsm-previous', function (event) {
369					jQuery(document).trigger('qsm_previous_button_click_before', [quizID]);
370					event.preventDefault();
371					QSM.prevPage(quizID);
372					var $container = jQuery('.qsm-quiz-container-' + quizID);
373					if (qmn_quiz_data[quizID].disable_scroll_next_previous_click != 1) {
374						qsmScrollTo($container);
375					}
376					jQuery(document).trigger('qsm_previous_button_click_after', [quizID]);
377				});
378			}
379			// Gets timer element.
380			let $timer = QSM.getTimer(quizID);
381
382			// Calculates starting time.
383			let timerStarted = localStorage.getItem('mlw_started_quiz' + quizID);
384			let timerConsumed = parseInt(localStorage.getItem('mlw_time_consumed_quiz' + quizID));
385			let seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60;
386			let timerRemaning = seconds - timerConsumed;
387			if ('yes' == timerStarted && 0 < timerRemaning) {
388				seconds = parseInt(timerRemaning);
389			}
390			$timer.text(QSM.secondsToTimer(seconds));
391		},
392		/**
393		 * Navigates quiz to specific page
394		 *
395		 * @param int pageNumber The number of the page
396		 */
397		goToPage: function (quizID, pageNumber) {
398			jQuery(document).trigger('qsm_go_to_page_before', [quizID, pageNumber]);
399			var $quizForm = QSM.getQuizForm(quizID);
400			var $pages = $quizForm.children('.qsm-page');
401			var $currentPage = $quizForm.children('.qsm-page:nth-of-type(' + pageNumber + ')');
402			var $container = jQuery( '.qsm-quiz-container-' + quizID );
403			$pages.hide();
404			$currentPage.show();
405			jQuery(document).trigger('end_page_timer_init_page_timer', [quizID, $currentPage]);
406			$quizForm.find('.current_page_hidden').val(pageNumber - 1);
407			$quizForm.find('.qsm-previous').hide();
408			$quizForm.find('.qsm-next').hide();
409			$quizForm.find('.qsm-submit-btn').hide();
410			$quizForm.find('.g-recaptcha').hide();
411			if (pageNumber < $pages.length) {
412				$quizForm.find('.qsm-next').show();
413				check_if_show_start_quiz_button($container, $pages.length, pageNumber);
414			} else {
415				$quizForm.find('.qsm-submit-btn').show();
416				if ( !jQuery('.qsm-quiz-container-'+ quizID +'.random') || !qmn_quiz_data[quizID].hasOwnProperty('pagination') ) {
417					$quizForm.find('.g-recaptcha').show();
418				}
419			}
420			if (1 < pageNumber) {
421				$quizForm.find('.qsm-previous').show();
422			}
423			if (1 == $currentPage.data('prevbtn')) {
424				$quizForm.find('.qsm-previous').hide();
425			}
426			if ('1' == qmn_quiz_data[quizID].disable_first_page) {
427				if (pageNumber == 1) {
428					$quizForm.find(".mlw_previous").hide();
429					$quizForm.find('.qsm-page-' + (parseInt(pageNumber))).show();
430				}
431			}
432			if ('1' == qmn_quiz_data[quizID].progress_bar) {
433				var current_page = jQuery('#quizForm' + quizID).find('.current_page_hidden').val();
434				var total_page_length = $pages.length - 1;
435				if (qmn_quiz_data[quizID].contact_info_location == 0) {
436					//Do nothing.
437				} else if (qmn_quiz_data[quizID].contact_info_location == 1) {
438					if ($quizForm.children('.qsm-page').find('.qsm_contact_div ').length > 0) {
439						//total_page_length = total_page_length - 1;
440					}
441				}
442				var animate_value = current_page / total_page_length;
443				if (animate_value <= 1) {
444					qmn_quiz_data[quizID].bar.animate(animate_value);
445					var old_text = jQuery('#quizForm' + quizID).find('.progressbar-text').text().replace(' %', '');
446					var new_text = Math.round(animate_value * 100);
447					jQuery({
448						Counter: old_text
449					}).animate({
450						Counter: new_text
451					}, {
452						duration: 1000,
453						easing: 'swing',
454						step: function () {
455							jQuery('#quizForm' + quizID).find('.progressbar-text').text(Math.round(this.Counter) + ' %');
456						}
457					});
458				}
459			}
460			QSM.savePage(quizID, pageNumber);
461			jQuery(document).trigger('qsm_go_to_page_after', [quizID, pageNumber]);
462		},
463		/**
464		 * Moves forward or backwards through the pages
465		 *
466		 * @param int quizID The ID of the quiz
467		 * @param int difference The number of pages to forward or back
468		 */
469		changePage: function (quizID, difference) {
470			var page = QSM.getPage(quizID);
471			if (qmn_quiz_data[quizID].hasOwnProperty('first_page') && qmn_quiz_data[quizID].first_page) {
472				if (qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') ) {
473					var start_timer = parseInt(qmn_quiz_data[quizID].advanced_timer.start_timer_page);
474					if (page == start_timer) { // check current page
475						QSM.activateTimer(quizID);
476						$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
477					}
478				} else if (!qmn_quiz_data[quizID].timerStatus) {
479					QSM.activateTimer(quizID);
480					$('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show();
481				}
482
483			}
484			page += difference;
485			QSM.goToPage(quizID, page);
486		},
487		nextPage: function (quizID) {
488			if (qmnValidatePage('quizForm' + quizID)) {
489				QSM.changePage(quizID, 1);
490			}
491		},
492		prevPage: function (quizID) {
493			QSM.changePage(quizID, -1);
494		},
495		savePage: function (quizID, pageNumber) {
496			sessionStorage.setItem('quiz' + quizID + 'page', pageNumber);
497		},
498		getPage: function (quizID) {
499			pageNumber = parseInt(sessionStorage.getItem('quiz' + quizID + 'page'));
500			if (isNaN(pageNumber) || null == pageNumber) {
501				pageNumber = 1;
502			}
503			return pageNumber;
504		},
505		/**
506		 * Scrolls to the top of supplied element
507		 *
508		 * @param jQueryObject The jQuery version of an element. i.e. $('#quizForm3')
509		 */
510		scrollTo: function ($element) {
511			jQuery('html, body').animate(
512				{
513					scrollTop: $element.offset().top - 150
514				},
515				1000);
516		},
517		/**
518		 * Gets the jQuery object of the quiz form
519		 */
520		getQuizForm: function (quizID) {
521			return $('#quizForm' + quizID);
522		},
523		q_counter: Backbone.Model.extend({
524			defaults: {
525				answers: []
526			}
527		}),
528		changes: function (data, question_id, quiz_id) {
529			answers = qsmLogicModel.get('answers');
530			answers.push({
531				'q_id': question_id,
532				'incorrect': data.success == 'correct' ? 0 : 1,
533			});
534			qsmLogicModel.set({ 'answers': QSM.filter_question(qsmLogicModel.get('answers')) });
535			let update_answers = qsmLogicModel.get('answers');
536			let incorrect = 0;
537
538			update_answers.forEach(function(obj){
539			if(obj.incorrect == 1){
540				incorrect++;
541			}
542			});
543			if( qmn_quiz_data[quiz_id].end_quiz_if_wrong <= incorrect ) {
544				submit_status = true;
545			}else{
546				submit_status = false;
547			}
548		},
549		filter_question: function(arr) {
550			let result = {};
551			arr.forEach(function(obj) {
552				if (obj.q_id) {
553					result[obj.q_id] = obj;
554				}
555			});
556			return Object.values(result);
557		},
558	};
559	// On load code
560	$(function () {
561		qmnDoInit();
562	});
563}(jQuery));
564
565// Global Variables
566var qsmTitleText = document.title;
567var qsmLogicModel = new QSM.q_counter({});
568
569/**
570 * Validates an email ID.
571 *
572 * @param email The Email Id to validate.
573 * @returns Boolean
574 */
575function isEmail(email) {
576	var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
577	if (!regex.test(email)) {
578		return false;
579	} else {
580		return true;
581	}
582}
583/**
584 * Validates an email ID from specific domains.
585 *
586 * @param email The Email Id to validate.
587 * @returns Boolean
588 */
589function isValidDomains(email, domains) {
590	if ('undefined' == domains) {
591		return true;
592	}
593	if (0 == domains.length) {
594		return true;
595	}
596	for (var i = 0; i < domains.length; i++) {
597		if (email.indexOf(domains[i]) != -1) {
598			return true;
599		}
600	}
601	return false;
602}
603/**
604 * Validates a URL.
605 *
606 * @param url URL to validate.
607 * @returns Boolean
608 */
609function isUrlValid(url) {
610	return /^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test(url);
611}
612
613/**
614 * Limit multiple response based on question limit
615 * @returns
616 */
617function qsmCheckMR(event, limit) {
618	var checked = jQuery(event).parents('.quiz_section').find(':checkbox:checked').length;
619	if (checked > limit) {
620		event.checked = false;
621		if (jQuery(event).parents('.quiz_section').find('.multi-checkbox-limit-reach').length == 0) {
622			jQuery(event).parents('.quiz_section').append('<span class="multi-checkbox-limit-reach">' + qmn_ajax_object.multicheckbox_limit_reach + '</span>');
623		}
624	} else {
625		jQuery(event).parents('.quiz_section').find('.multi-checkbox-limit-reach').remove();
626	}
627}
628
629function qmnDoInit() {
630	// Legacy init.
631	qmnInit();
632
633	// Call main initialization.
634	qsminstance = QSM.init();
635
636	jQuery(document).on("qsm_next_button_click_after", function (_event, _quiz_id) {
637		if (quizType == 'paginated') {
638			var timer_ms = jQuery(".qsm-quiz-container-" + _quiz_id + " input[name='timer_ms']").val();
639			if (timer_ms == 0) {
640				jQuery('.qsm-quiz-container-' + _quiz_id + ' #timer').val(0);
641				qsmTimerInterval[_quiz_id] = setInterval(function () { qmnTimeTakenTimer(_quiz_id) }, 1000);
642				jQuery(".qsm-quiz-container-" + _quiz_id + " input[name='timer_ms']").each(function () {
643					var timems = qsmTimeInMS();
644					jQuery(this).val(timems);
645				});
646			}
647		}
648		if ( jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-submit-btn').is(':visible') || jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-quiz-comment-section').closest('.qsm-page').is(':visible') ) {
649			jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-quiz-comment-section').fadeIn();
650		}
651	});
652}
653
654function qmnTimeTakenTimer(quizID) {
655	var x = +jQuery('.qsm-quiz-container-' + quizID + ' #timer').val();
656	if (NaN === x) {
657		x = 0;
658	}
659	x = x + 1;
660	jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(x);
661}
662
663function qsmEndTimeTakenTimer(quiz_id) {
664	clearInterval(qsmTimerInterval[quiz_id]);
665}
666
667function qsmTimeInMS() {
668	var d = new Date();
669	var n = d.getTime();
670	return n;
671}
672
673function qmnClearField(field) {
674	if (field.defaultValue == field.value) field.value = '';
675}
676
677var qsmPagescrolling = false;
678function qsmScrollTo($element) {
679    if ($element.length > 0 && !qsmPagescrolling) {
680        qsmPagescrolling = true;
681        jQuery(document).trigger('qsm_scroll_to_top_before', [$element]);
682        jQuery('html, body').animate({ scrollTop: $element.offset().top - 150 }, 1000, function() {
683            qsmPagescrolling = false;
684            jQuery(document).trigger('qsm_scroll_to_top_after', [$element]);
685        });
686    }
687}
688
689
690function qmnDisplayError(message, field, quiz_form_id) {
691	jQuery('#' + quiz_form_id + ' .qmn_error_message_section').addClass('qmn_error_message');
692	jQuery('#' + quiz_form_id + ' .qmn_error_message').text(message);
693	if (field.parents('.qsm_contact_div').length) {
694		field.parents('.qsm_contact_div').addClass('qmn_error');
695	} else {
696		field.closest('.quiz_section').addClass('qmn_error');
697	}
698}
699
700function qmnResetError(quiz_form_id) {
701	jQuery('#' + quiz_form_id + ' .qmn_error_message').text('');
702	jQuery('#' + quiz_form_id + ' .qmn_error_message_section').removeClass('qmn_error_message');
703	jQuery('#' + quiz_form_id + ' .qsm_contact_div').removeClass('qmn_error');
704	jQuery('#' + quiz_form_id + ' .quiz_section').removeClass('qmn_error');
705}
706var show_result_validation = true;
707function qmnValidation(element, quiz_form_id) {
708	show_result_validation = true;
709	jQuery(document).trigger('qsm_before_validation', [element, quiz_form_id]);
710	let quiz_id = quiz_form_id.replace('quizForm', '');
711	var error_messages = qmn_quiz_data[quiz_id].error_messages;
712	qmnResetError(quiz_form_id);
713	jQuery(element).each(function () {
714		if ( jQuery(this).attr('class') && ( jQuery(this).is(':visible') || jQuery(this).attr('class').indexOf('mlwRequiredAccept') || ( jQuery(this).attr('class').indexOf('mlwRequiredPolar') > -1 && jQuery(this).parent().is(':visible') ) ) ) {
715			if (jQuery(this).attr('class').indexOf('mlwEmail') !== -1 && this.value !== "") {
716				// Remove any trailing and preceeding space.
717				var x = jQuery.trim(this.value);
718				if (!isEmail(x)) {
719					qmnDisplayError(error_messages.email_error_text, jQuery(this), quiz_form_id);
720					show_result_validation = false;
721				}
722				/**
723				 * Validate email from allowed domains.
724				 */
725				var domains = jQuery(this).attr('data-domains');
726				if ('undefined' != typeof domains) {
727					if (!isValidDomains(x, domains.split(","))) {
728						qmnDisplayError(error_messages.email_error_text, jQuery(this), quiz_form_id);
729						show_result_validation = false;
730					}
731				}
732			}
733			if (jQuery(this).attr('class').indexOf('mlwUrl') !== -1 && this.value !== "") {
734				// Remove any trailing and preceeding space.
735				if (!isUrlValid(jQuery.trim(this.value))) {
736					qmnDisplayError(error_messages.url_error_text, jQuery(this), quiz_form_id);
737					show_result_validation = false;
738				}
739			}
740			if (jQuery(this).attr('class').indexOf('mlwMinLength') !== -1 && this.value !== "") {
741				// Remove any trailing and preceeding space.
742				if (jQuery.trim(this.value).length < jQuery(this).attr('minlength')) {
743					var minlength_error = error_messages.minlength_error_text;
744					minlength_error = minlength_error.replace('%minlength%', jQuery(this).attr('minlength'));
745					qmnDisplayError(minlength_error, jQuery(this), quiz_form_id);
746					show_result_validation = false;
747				}
748			}
749			if ( jQuery(this).hasClass('mlw_answer_open_text') || jQuery(this).hasClass('qmn_fill_blank') || jQuery(this).hasClass('mlw_answer_number')) {
750				if (jQuery.trim(this.value).length < jQuery(this).attr('minlength')) {
751					let minCharError = error_messages.minlength_error_text;
752					minCharError = minCharError.replace('%minlength%', jQuery(this).attr('minlength'));
753					qmnDisplayError(minCharError, jQuery(this), quiz_form_id);
754					show_result_validation = false;
755				}
756			}
757			if (jQuery(this).attr('class').indexOf('mlwMaxLength') !== -1 && this.value !== "") {
758				// Remove any trailing and preceeding space.
759				if (jQuery.trim(this.value).length > jQuery(this).attr('maxlength')) {
760					var maxlength_error = error_messages.maxlength_error_text;
761					maxlength_error = maxlength_error.replace('%maxlength%', jQuery(this).attr('maxlength'));
762					qmnDisplayError(maxlength_error, jQuery(this), quiz_form_id);
763					show_result_validation = false;
764				}
765			}
766			var by_pass = true;
767			if (qmn_quiz_data[quiz_id].timer_limit_val > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('skip_validation_time_expire') && qmn_quiz_data[quiz_id].skip_validation_time_expire != 1) {
768				by_pass = false;
769			}
770			if (localStorage.getItem('mlw_time_quiz' + quiz_id) === null || (0 == localStorage.getItem('mlw_time_quiz' + quiz_id) && by_pass == false) || localStorage.getItem('mlw_time_quiz' + quiz_id) > 0.08 || by_pass === false) {
771				if (jQuery(this).attr('class').indexOf('mlwRequiredNumber') > -1 && this.value === "" && +this.value != NaN) {
772					qmnDisplayError(error_messages.number_error_text, jQuery(this), quiz_form_id);
773					show_result_validation = false;
774				}
775				if (jQuery(this).attr('class').indexOf('mlwRequiredDate') > -1 && this.value === "") {
776					qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
777					show_result_validation = false;
778				}
779				if (jQuery(this).attr('class').indexOf('mlwRequiredText') > -1 && jQuery.trim(this.value) === "") {
780					qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
781					show_result_validation = false;
782				}
783				if (jQuery(this).attr('class').indexOf('mlwRequiredCaptcha') > -1 && this.value != mlw_code) {
784					qmnDisplayError(error_messages.incorrect_error_text, jQuery(this), quiz_form_id);
785					show_result_validation = false;
786				}
787				if (jQuery(this).attr('class').indexOf('mlwRequiredAccept') > -1 && !jQuery(this).prop('checked')) {
788					qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
789					show_result_validation = false;
790				}
791				if (jQuery(this).attr('class').indexOf('mlwRequiredRadio') > -1) {
792					check_val = jQuery(this).find('input:checked').val();
793					if (check_val == "" || check_val == undefined) {
794						qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
795						show_result_validation = false;
796					}
797				}
798				if (jQuery(this).attr('class').indexOf('mlwRequiredFileUpload') > -1) {
799					var selected_file = jQuery(this).get(0).files.length;
800					if (selected_file === 0) {
801						qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
802						show_result_validation = false;
803					}
804				}
805				if (jQuery(this).attr('class').indexOf('qsmRequiredSelect') > -1) {
806					check_val = jQuery(this).val();
807					if (check_val == "" || check_val == null) {
808						qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
809						show_result_validation = false;
810					}
811				}
812				if (jQuery(this).attr('class').indexOf('mlwRequiredCheck') > -1) {
813					if (!jQuery(this).find('input:checked').length) {
814						qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id);
815						show_result_validation = false;
816					}
817				}
818				//Google recaptcha validation
819				if (jQuery(this).attr('class').indexOf('g-recaptcha-response') > -1) {
820					let recaptcha_id = jQuery(this).attr('id');
821					let recaptcha_index = 'g-recaptcha-response' === recaptcha_id ? 0 : recaptcha_id.replace("g-recaptcha-response-", "");
822					if (grecaptcha.getResponse(recaptcha_index) == "") {
823						alert(error_messages.recaptcha_error_text);
824						show_result_validation = false;
825					}
826				}
827			}
828		}
829	});
830	jQuery(document).trigger('qsm_after_validation', [element, quiz_form_id]);
831	return show_result_validation;
832}
833
834function getFormData($form) {
835	var unindexed_array = $form.serializeArray();
836	var indexed_array = {};
837
838	jQuery.map(unindexed_array, function (n, i) {
839		indexed_array[n['name']] = n['value'];
840	});
841
842	return indexed_array;
843}
844
845function qmnFormSubmit(quiz_form_id, $this) {
846	var quiz_id = +jQuery('#' + quiz_form_id).find('.qmn_quiz_id').val();
847	let $container = jQuery($this).closest('.qmn_quiz_container');
848	let result = qmnValidation( $container.find('*'), quiz_form_id);
849	if (!result) { return result; }
850
851	/**
852	 * Update Timer in MS
853	 */
854	var timer_ms = jQuery('#' + quiz_form_id).find(".qsm-quiz-container-" + quiz_id + " input[name='timer_ms']").val();
855	var new_timer_ms = qsmTimeInMS();
856	jQuery('#' + quiz_form_id).find(".qsm-quiz-container-" + quiz_id + " input[name='timer_ms']").val(Math.abs(new_timer_ms - timer_ms));
857
858	jQuery('.mlw_qmn_quiz input:radio').attr('disabled', false);
859	jQuery('.mlw_qmn_quiz input:checkbox').attr('disabled', false);
860	jQuery('.mlw_qmn_quiz select').attr('disabled', false);
861	jQuery('.mlw_qmn_question_comment').attr('disabled', false);
862	jQuery('.mlw_answer_open_text').attr('disabled', false);
863	//Convert serialize data into index array
864	var unindexed_array = jQuery('#' + quiz_form_id).serializeArray();
865	unindexed_array.push(
866		{
867			name: 'quiz_start_date',
868			value: localStorage.getItem('mlw_quiz_start_date' + quiz_id)
869		}
870	)
871	jQuery(document).trigger('qsm_before_form_data_process', [quiz_form_id, unindexed_array]);
872	var fd = new FormData();
873	jQuery.each(unindexed_array, function (key, input) {
874		fd.append(input.name, input.value);
875	});
876	fd.append("action", 'qmn_process_quiz');
877	fd.append("nonce", jQuery('#qsm_nonce_' + quiz_id ).val() );
878	fd.append("qsm_unique_key", jQuery('#qsm_unique_key_' + quiz_id ).val() );
879	fd.append("currentuserTime", Math.round(new Date().getTime() / 1000));
880	fd.append("currentuserTimeZone", Intl.DateTimeFormat().resolvedOptions().timeZone);
881
882	qsmEndTimeTakenTimer(quiz_id);
883
884	if (qmn_quiz_data[quiz_id].hasOwnProperty('timer_limit')) {
885		QSM.endTimer(quiz_id);
886	}
887	jQuery(document).trigger('qsm_before_quiz_submit', [quiz_form_id]);
888	jQuery('#' + quiz_form_id + ' input[type=submit]').attr('disabled', 'disabled');
889	qsmDisplayLoading($container, quiz_id);
890	jQuery.ajax({
891		url: qmn_ajax_object.ajaxurl,
892		data: fd,
893		contentType: false,
894		processData: false,
895		type: 'POST',
896		success: function (response) {
897			response = JSON.parse(response);
898			if (window.qsm_results_data === undefined) {
899				window.qsm_results_data = new Object();
900			}
901			window.qsm_results_data[quiz_id] = {
902				'save_response': response.result_status['save_response'],
903				'id': response.result_status['id']
904			};
905
906			if (response.quizExpired) {
907				MicroModal.show('modal-4');
908				return false;
909			} else {
910				qmnDisplayResults(response, quiz_form_id, $container, quiz_id);
911				// run MathJax on the new content
912				if (1 != qmn_quiz_data[quiz_id].disable_mathjax) {
913					MathJax.typesetPromise();
914				}
915				jQuery(document).trigger('qsm_after_quiz_submit_load_chart');
916				jQuery(document).trigger('qsm_after_quiz_submit', [quiz_form_id]);
917			}
918		},
919		error: function (errorThrown) {
920			let response = { display: errorThrown.responseText + "<br/> Error:" + errorThrown.statusText};
921			qmnDisplayResults(response, quiz_form_id, $container, quiz_id);
922			console.log(errorThrown);
923		}
924	});
925
926	return false;
927}
928
929jQuery(document).on('qsm_after_quiz_submit', function(e, quiz_form_id) {
930	let quiz_id = quiz_form_id.replace("quizForm", "");
931	if( localStorage.getItem('mlw_quiz_start_date' + quiz_id) ) {
932		localStorage.removeItem('mlw_quiz_start_date' + quiz_id);
933	}
934})
935
936function qsmDisplayLoading($container, quiz_id) {
937	jQuery(document).trigger('qsm_before_loader_init', [$container,quiz_id]);
938	var loader_html = '<div class="qsm_quiz_processing_box">';
939	loader_html += '<div class="qsm-spinner-loader qsm_quiz_processing_loader"></div>';
940	if (qmn_quiz_data[quiz_id].hasOwnProperty('quiz_processing_message') && qmn_quiz_data[quiz_id].quiz_processing_message != '') {
941		loader_html += '<div class="qsm_quiz_processing_message">' + qmn_quiz_data[quiz_id].quiz_processing_message + '</div>';
942	}
943	loader_html += '</div>';
944	$container.empty();
945	$container.append(loader_html);
946	if (qmn_quiz_data[quiz_id].hasOwnProperty('disable_scroll_next_previous_click') && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) {
947		qsmScrollTo($container);
948	}
949	jQuery(document).trigger('qsm_after_loader_init', [$container,quiz_id]);
950}
951
952function qmnDisplayResults(results, quiz_form_id, $container, quiz_id) {
953	$container.empty();
954	jQuery(document).trigger('qsm_before_display_result', [results, quiz_form_id, $container]);
955	if (results.redirect) {
956		window.location.replace(results.redirect);
957	} else {
958		$container.append('<div class="qmn_results_page"></div>');
959		$container.find('.qmn_results_page').html(results.display);
960		if (qmn_quiz_data[quiz_id].hasOwnProperty('disable_scroll_next_previous_click') && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) {
961			qsmScrollTo($container);
962		}
963		// Fires after result is populates via ajax
964		jQuery(document).trigger('qsm_after_display_result', [results, quiz_form_id, $container]);
965	}
966}
967
968function qmnInit() {
969	if (typeof qmn_quiz_data != 'undefined' && qmn_quiz_data) {
970		_.each(qmn_quiz_data, function (quiz) {
971			let key = parseInt(quiz.quiz_id);
972			if (qmn_quiz_data[key].ajax_show_correct === '1') {
973				jQuery('.qmn-multiple-choice-input, .qsm_dropdown, .qsm-multiple-response-input').change(function () {
974					let $this = jQuery(this);
975					let value = $this.val();
976					let quiz_form_id = $this.parents('.qsm-quiz-form').attr('id');
977					let quiz_id = quiz_form_id.replace('quizForm', '');
978					let question_id = $this.attr('name').replace(/question/i, '');
979					let data = qsm_question_quick_result_js(question_id, value, '', qmn_quiz_data[quiz_id].enable_quick_correct_answer_info,quiz_id);
980					if (data.success == 'correct') {
981						$this.parent().addClass("qmn_correct_answer");
982					} else if (data.success == 'incorrect') {
983						$this.parent().addClass("qmn_incorrect_answer");
984					}
985				});
986			}
987
988			if (qmn_quiz_data[key].disable_answer === '1') {
989
990				jQuery('#quizForm' + qmn_quiz_data[key].quiz_id + ' .qmn_quiz_radio').change(function () {
991					var radio_group = jQuery(this).attr('name');
992					jQuery('input[type=radio][name=' + radio_group + ']').prop('disabled', true);
993					let radio_value = jQuery(this).val();
994					let disableAnswer = {};
995					if (localStorage.getItem("disable_answer")) {
996						disableAnswer = JSON.parse(localStorage.getItem("disable_answer"));
997					}
998					if (!disableAnswer[key]) {
999						disableAnswer[key] = [];
1000					}
1001					let disabledQuestions = disableAnswer[key].map(element => element[0]);
1002					if (!disabledQuestions.includes(radio_group)) {
1003						disableAnswer[key].push([radio_group, radio_value]);
1004					}
1005					localStorage.setItem("disable_answer", JSON.stringify(disableAnswer));
1006				});
1007
1008				if (localStorage.getItem("disable_answer")) {
1009					let disabledAnswer = JSON.parse(localStorage.getItem("disable_answer"));
1010					if (disabledAnswer[key]) {
1011						disabledAnswer[key].forEach(element => {
1012							let element1 = element[1].replaceAll(' ', '-');
1013							jQuery('#' + element[0] + '-' + element1 + ' input').prop('checked', true).trigger('change');
1014						});
1015					}
1016				}
1017				jQuery(document).on('qsm_after_quiz_submit', function (event, quiz_form_id) {
1018					event.preventDefault();
1019					if (localStorage.getItem("disable_answer")) {
1020						let disabledAnswer2 = JSON.parse(localStorage.getItem("disable_answer"));
1021						if (disabledAnswer2[key]) {
1022							delete disabledAnswer2[key];
1023							localStorage.setItem("disable_answer", JSON.stringify(disabledAnswer2));
1024						}
1025					}
1026				});
1027			}
1028
1029			if (qmn_quiz_data[key].hasOwnProperty('pagination')) {
1030				qmnInitPagination(qmn_quiz_data[key].quiz_id);
1031			}
1032		});
1033	}
1034}
1035
1036//Function to validate the answers provided in quiz
1037function qmnValidatePage(quiz_form_id) {
1038	var result = qmnValidation('#' + quiz_form_id + ' .quiz_section:visible *', quiz_form_id);
1039	return result;
1040}
1041
1042// Show start quiz button if first page is visible
1043function check_if_show_start_quiz_button(container, total_pages, page_number) {
1044	if(container.find('.quiz_begin').is(':visible')){
1045		container.find(".mlw_custom_start").show();
1046		container.find(".mlw_custom_next").hide();
1047	}else{
1048		container.find(".mlw_custom_start").hide();
1049		if(total_pages != parseInt(page_number) + 2){ // check if not last page based on condition (1140)
1050			container.find(".mlw_custom_next").show();
1051			if (jQuery('.quiz_end').is(':visible')) {
1052				container.find(".mlw_custom_next").hide();
1053			}
1054		}
1055	}
1056}
1057
1058//Function to advance quiz to next page
1059function qmnNextSlide(pagination, go_to_top, quiz_form_id) {
1060	jQuery(document).trigger('qsm_next_button_click_before', [quiz_form_id]);
1061	var quiz_id = +jQuery(quiz_form_id).find('.qmn_quiz_id').val();
1062	var $container = jQuery(quiz_form_id).closest('.qmn_quiz_container');
1063	var slide_number = +$container.find('.slide_number_hidden').val();
1064	var page_number = +$container.find('.current_page_hidden').val();
1065	var section_totals = +$container.find('.total_sections_hidden').val();
1066	if (pagination == 1) {
1067		section_totals = section_totals - 1;
1068	}
1069	var total_pages = $container.find('.total_pages_hidden').val();
1070
1071	jQuery(quiz_form_id + " .qsm-auto-page-row").hide();
1072	if (page_number >= total_pages) {
1073		alert('Next page not found.');
1074		$container.find(".mlw_next").hide();
1075		$container.find(".qsm-submit-btn").show();
1076		jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_end").show();
1077		return true;
1078	}
1079	if (slide_number == 0 && page_number == 0) {
1080		jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_begin").show();
1081		$container.find(".mlw_previous").hide();
1082		$container.find('.current_page_hidden').val('1');
1083	} else if (total_pages == parseInt(page_number) + 1) { //Last page
1084		$container.find(".mlw_next").hide();
1085		$container.find(".qsm-submit-btn").show();
1086		jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_end").show();
1087		$container.find('.slide_number_hidden').val(parseInt(slide_number) + 1);
1088		$container.find('.current_page_hidden').val(parseInt(page_number) + 1);
1089		$container.find(".mlw_previous").show();
1090		$container.find('.g-recaptcha').show();
1091	} else if (slide_number >= 0 && page_number >= 1) {
1092		if (total_pages == parseInt(page_number) + 2) { // if last page empty
1093			if (jQuery(quiz_form_id + " .qsm-auto-page-row.empty_quiz_end").length) {
1094				jQuery(quiz_form_id + " .qsm-auto-page-row.empty_quiz_end").show();
1095				$container.find(".qsm-submit-btn").show();
1096				$container.find(".mlw_next").hide();
1097				$container.find('.g-recaptcha').show();
1098			}
1099			if (qmn_quiz_data[quiz_id].contact_info_location == 1) {
1100				$container.find(".qsm-submit-btn").hide();
1101				$container.find(".mlw_next").show();
1102			}
1103		}
1104		$container.find('.qsm-auto-page-row.qsm-apc-' + page_number).show();
1105		$container.find('.slide_number_hidden').val(parseInt(slide_number) + 1);
1106		$container.find('.current_page_hidden').val(parseInt(page_number) + 1);
1107		$container.find(".mlw_previous").show();
1108	}
1109	check_if_show_start_quiz_button($container, total_pages, page_number);
1110	if (jQuery(quiz_form_id + " .quiz_section.quiz_end").is(':visible')) {
1111		var button_width = jQuery(quiz_form_id + ' .qsm-submit-btn').width();
1112		var progress_width = jQuery(quiz_form_id).parent().find('.qmn_pagination').width();
1113		jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', progress_width - button_width - 40);
1114	} else {
1115		jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', '100%');
1116	}
1117	if (go_to_top == 1 && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) {
1118		qsmScrollTo($container);
1119	}
1120	if (!qmn_quiz_data[quiz_id].hasOwnProperty('first_page') || !qmn_quiz_data[quiz_id].first_page) {
1121		if (slide_number == 0 && page_number == 0) {
1122			$container.find(".qsm-auto-page-row.quiz_begin").hide();
1123			$container.find('.qsm-auto-page-row.qsm-apc-' + (parseInt(page_number) + 1)).show();
1124			$container.find('.slide_number_hidden').val(parseInt(slide_number) + 1);
1125			$container.find('.current_page_hidden').val(parseInt(page_number) + 2);
1126			$container.find(".mlw_previous").hide();
1127		}
1128	}
1129	//Show the page counts
1130	if (page_number > 0 && jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').length > 0) {
1131		var actual_pages = total_pages - 2;
1132		if (page_number <= actual_pages) {
1133			jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').text('').text(page_number + qmn_ajax_object.out_of_text + actual_pages);
1134			jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').show();
1135		} else {
1136			jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide();
1137		}
1138	} else {
1139		jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide();
1140	}
1141	qmnInitProgressbarOnClick(quiz_id, page_number, total_pages);
1142	jQuery(document).trigger('qsm_auto_next_button_click_after', [quiz_form_id]);
1143}
1144
1145function qmnPrevSlide(pagination, go_to_top, quiz_form_id) {
1146	jQuery(document).trigger('qsm_previous_button_click_before', [quiz_form_id]);
1147	var quiz_id = +jQuery(quiz_form_id).find('.qmn_quiz_id').val();
1148	var $container = jQuery(quiz_form_id).closest('.qmn_quiz_container');
1149	var slide_number = +$container.find('.slide_number_hidden').val();
1150	var previous = +$container.find('.previous_amount_hidden').val();
1151	var section_totals = +$container.find('.total_sections_hidden').val();
1152	var page_number = +$container.find('.current_page_hidden').val();
1153	var total_pages = $container.find('.total_pages_hidden').val();
1154	jQuery(quiz_form_id + " .qsm-auto-page-row").hide();
1155	jQuery(quiz_form_id + " .g-recaptcha").hide();
1156	var slide_original_val = parseInt(slide_number) - 1;
1157	if (slide_original_val == 0) {
1158		$container.find(".mlw_next").show();
1159		$container.find(".qsm-submit-btn").hide();
1160		jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_begin").show();
1161		$container.find('.slide_number_hidden').val(slide_original_val);
1162		$container.find('.current_page_hidden').val(parseInt(page_number) - 1);
1163		$container.find(".mlw_previous").hide();
1164	} else {
1165		$container.find('.qsm-auto-page-row.qsm-apc-' + slide_original_val).show();
1166		$container.find('.slide_number_hidden').val(slide_original_val);
1167		$container.find('.current_page_hidden').val(parseInt(page_number) - 1);
1168		$container.find(".mlw_next").show();
1169		$container.find(".qsm-submit-btn").hide();
1170	}
1171	check_if_show_start_quiz_button($container, total_pages, page_number);
1172	if (go_to_top == 1 && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) {
1173		qsmScrollTo($container);
1174	}
1175	if (qmn_quiz_data[quiz_id].disable_first_page == 1) {
1176		if (page_number == 3) {
1177			$container.find(".qsm-auto-page-row.quiz_begin").hide();
1178			$container.find(".mlw_previous").hide();
1179		}
1180	}
1181	if (page_number > 0 && jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').length > 0) {
1182		var actual_pages = total_pages - 2;
1183		if (slide_original_val <= actual_pages) {
1184			jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').text('').text(slide_original_val + qmn_ajax_object.out_of_text + actual_pages);
1185			if (slide_original_val == 0) {
1186				jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide();
1187			} else {
1188				jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').show();
1189			}
1190		} else {
1191			jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide();
1192		}
1193	}
1194	jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', '100%');
1195	qmnInitProgressbarOnClick(quiz_id, slide_original_val, total_pages);
1196	jQuery(document).trigger('qsm_auto_previous_button_click_after', [quiz_form_id]);
1197}
1198
1199/**
1200 * @since 6.4.11
1201 * @param {int} quiz_id
1202 * @param {int} page_number
1203 * @param {int} total_page_number
1204 * @returns Change progress bar on next and previous button click
1205 */
1206function qmnInitProgressbarOnClick(quiz_id, page_number, total_page_number) {
1207	if ('1' == qmn_quiz_data[quiz_id].progress_bar) {
1208		if ( ( !qmn_quiz_data[quiz_id].hasOwnProperty('first_page') || !qmn_quiz_data[quiz_id].first_page ) && 0 == page_number ) {
1209			page_number++;
1210		}
1211		var qmn_total_questions = qmn_quiz_data[quiz_id].pagination.total_questions;
1212		var pagination = qmn_quiz_data[quiz_id].pagination.amount;
1213		total_page_number = Math.ceil(qmn_total_questions / pagination);
1214		if (!jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.empty_quiz_end').length) {
1215			total_page_number = total_page_number + 1; //Increase for quiz end section
1216		}
1217		var animate_value = page_number / total_page_number;
1218		if (animate_value <= 1) {
1219			qmn_quiz_data[quiz_id].bar.animate(animate_value);
1220			var old_text = jQuery('#qsm_progress_bar_' + quiz_id).find('.progressbar-text').text().replace(' %', '');
1221			var new_text = Math.round(animate_value * 100);
1222			jQuery({
1223				Counter: old_text
1224			}).animate({
1225				Counter: new_text
1226			}, {
1227				duration: 500,
1228				easing: 'swing',
1229				step: function () {
1230					jQuery('#qsm_progress_bar_' + quiz_id).find('.progressbar-text').text(Math.round(this.Counter) + ' %');
1231				}
1232			});
1233		}
1234	}
1235}
1236
1237function qmnUpdatePageNumber(amount, quiz_form_id) {
1238	var current_page = +jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.current_page_hidden').val();
1239	var total_pages = jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.total_pages_hidden').val();
1240	current_page += amount;
1241	//jQuery( quiz_form_id ).siblings( '.qmn_pagination' ).find( " .qmn_page_counter_message" ).text( current_page + "/" + total_pages );
1242}
1243
1244function qmnInitPagination(quiz_id) {
1245	var qmn_section_total = +qmn_quiz_data[quiz_id].pagination.total_questions;
1246	var qmn_total_questions = jQuery('#quizForm' + quiz_id).find('#qmn_all_questions_count').val();
1247	var qmn_total_pages = Math.ceil(qmn_total_questions / +qmn_quiz_data[quiz_id].pagination.amount);
1248
1249	qmn_total_pages = qmn_total_pages + 1; //quiz begin
1250	qmn_total_pages = qmn_total_pages + 1; //quiz end
1251
1252
1253	jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').append('<div class="qmn_pagination border margin-bottom"></div>');
1254	jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.qmn_pagination').append('<input type="hidden" value="0" name="slide_number" class="slide_number_hidden" />')
1255		.append('<input type="hidden" value="0" name="current_page" class="current_page_hidden" />')
1256		.append('<input type="hidden" value="' + qmn_total_pages + '" name="total_pages" class="total_pages_hidden" />')
1257		.append('<input type="hidden" value="' + qmn_section_total + '" name="total_sections" class="total_sections_hidden" />')
1258		.append('<input type="hidden" value="0" name="previous_amount" class="previous_amount_hidden" />')
1259		.append('<a class="qmn_btn mlw_qmn_quiz_link mlw_previous" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.previous_text + '</a>')
1260		.append('<span class="qmn_page_message"></span>')
1261		.append('<div class="qmn_page_counter_message"></div>')
1262		.append('<div class="qsm-progress-bar" id="qsm_progress_bar_' + quiz_id + '" style="display:none;"><div class="progressbar-text"></div></div>')
1263		.append('<a class="qmn_btn mlw_qmn_quiz_link mlw_next mlw_custom_start" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.start_quiz_survey_text + '</a>')
1264		.append('<input type="submit" value="' + qmn_quiz_data[quiz_id].pagination.submit_quiz_text + '" class="qsm-btn qsm-submit-btn qmn_btn" style="display:none;"/>')
1265		.append('<a class="qmn_btn mlw_qmn_quiz_link mlw_next mlw_custom_next" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.next_text + '</a>');
1266
1267	if ('1' == qmn_quiz_data[quiz_id].progress_bar) {
1268		jQuery(document).trigger('qsm_init_progressbar_before', [quiz_id, qmn_quiz_data]);
1269		jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.qsm-progress-bar').show();
1270		qmn_quiz_data[quiz_id].bar = new ProgressBar.Line('#qsm_progress_bar_' + quiz_id, {
1271			strokeWidth: 2,
1272			easing: 'easeInOut',
1273			duration: 500,
1274			color: '#3498db',
1275			trailColor: '#eee',
1276			trailWidth: 1,
1277			svgStyle: { width: '100%', height: '100%' },
1278			text: {
1279				style: {
1280					// color: '#999',
1281					position: 'absolute',
1282					padding: 0,
1283					margin: 0,
1284					top: 0,
1285					right: '10px',
1286					'font-size': '13px',
1287					'font-weight': 'bold',
1288					transform: null
1289				},
1290				autoStyleContainer: false
1291			},
1292			from: { color: '#3498db' },
1293			to: { color: '#ED6A5A' },
1294			step: function (state, bar) {
1295			}
1296		});
1297		jQuery(document).trigger('qsm_init_progressbar_after', [quiz_id, qmn_quiz_data]);
1298	}
1299
1300	jQuery(document).on("click", ".qsm-quiz-container-" + quiz_id + " .mlw_next", function (event) {
1301		let quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val();
1302		jQuery(document).trigger('qsm_auto_next_button_click_before', [quiz_id]);
1303		event.preventDefault();
1304		let $quizForm = QSM.getQuizForm(quiz_id);
1305		jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').addClass('qsm-disabled-btn');
1306		jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').append('<div class="qsm-spinner-loader" style="font-size: 3.5px;margin-right: -5px;margin-left: 10px;"></div>');
1307
1308		jQuery('.qsm-multiple-response-input:checked, .qmn-multiple-choice-input:checked , .qsm_select:visible').each(function () {
1309			if (qmn_quiz_data[quiz_id].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) {
1310				if (jQuery(this).parents('.qmn_radio_answers, .qsm_check_answer')) {
1311					let question_id = jQuery(this).attr('name').split('question')[1],
1312					value = jQuery(this).val(),
1313					$this = jQuery(this).parents('.quiz_section');
1314					if (value !== "") {
1315						qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm);
1316					}
1317				}
1318			}
1319		});
1320
1321		jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn');
1322		jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove();
1323		if (qmnValidatePage('quizForm' + quiz_id)) {
1324			qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id);
1325		}
1326
1327		jQuery(document).trigger('qsm_next_button_click_after', [quiz_id]);
1328	});
1329
1330	jQuery(document).on("click", ".qsm-quiz-container-" + quiz_id + " .mlw_previous", function (event) {
1331		event.preventDefault();
1332		var quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val();
1333		qmnPrevSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id);
1334		jQuery(document).trigger('qsm_previous_button_click_after', [quiz_id]);
1335	});
1336
1337	if (qmn_quiz_data[quiz_id].first_page) {
1338		qmnNextSlide(1, 0, '#quizForm' + quiz_id);
1339	} else {
1340		qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 0, '#quizForm' + quiz_id);
1341	}
1342
1343	jQuery(document).trigger('qsm_init_pagination_after', [quiz_id, qmn_quiz_data]);
1344}
1345jQuery(document).on('qsm_next_button_click_after qsm_previous_button_click_after', function(event, quiz_id) {
1346	jQuery(document).trigger('qsm_before_iframe_section',[quiz_id]);
1347	let video_sections = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container').find('video');
1348	let iframeVideos = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container .qsm
1348-page, .qsm-quiz-container-' + quiz_id + '.qmn_quiz_container .qsm-auto-page-row').find('iframe');
1349	let audio_sections = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container').find('audio');
1350	iframeVideos.each(function() {
1351		let src = this.src;
1352		jQuery(this).attr('src', src);
1353	});
1354	video_sections.each(function() {
1355		if (!this.paused) {
1356			this.pause();
1357		}
1358	});
1359	audio_sections.each(function() {
1360		if (!this.paused) {
1361			this.pause();
1362		}
1363	});
1364	jQuery(document).trigger('qsm_after_iframe_section',[quiz_id]);
1365});
1366function qmnSocialShare(network, mlw_qmn_social_text, mlw_qmn_title, facebook_id, share_url) {
1367	var sTop = window.screen.height / 2 - (218);
1368	var sLeft = window.screen.width / 2 - (313);
1369	var sqShareOptions = "height=400,width=580,toolbar=0,status=0,location=0,menubar=0,directories=0,scrollbars=0,top=" + sTop + ",left=" + sLeft;
1370	var pageUrl = window.location.href;
1371	var pageUrlEncoded = encodeURIComponent(share_url);
1372	var url = '';
1373	if (network == 'facebook') {
1374		url = "https://www.facebook.com/dialog/feed?" + "display=popup&" + "app_id=" + facebook_id +
1375			"&" + "link=" + pageUrlEncoded + "&" + "name=" + encodeURIComponent(mlw_qmn_social_text) +
1376			"&" + "description=";
1377	}
1378	if (network == 'twitter') {
1379		url = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(mlw_qmn_social_text);
1380	}
1381	window.open(url, "Share", sqShareOptions);
1382	return false;
1383}
1384
1385function maxLengthCheck(object) {
1386	if (object.value.length > object.maxLength) {
1387		object.value = object.value.slice(0, object.maxLength)
1388	}
1389}
1390
1391jQuery(function () {
1392	jQuery('.qmn_quiz_container').tooltip({
1393		position: {
1394		  my: "center top+10",
1395		  at: "center bottom",
1396		  classes: {
1397			"ui-tooltip": "hint-qsm-tooltip"
1398		  },
1399		  using: function( position, feedback ) {
1400			jQuery( this ).css( position );
1401			jQuery( "<div>" )
1402			  .addClass( "qsm-tooltip-arrow" )
1403			  .addClass( feedback.vertical )
1404			  .addClass( feedback.horizontal )
1405			  .appendTo( this );
1406		  }
1407		}
1408	  });
1409
1410	jQuery('.qmn_quiz_container input').on('keypress', function (e) {
1411		if (e.which === 13) {
1412			e.preventDefault();
1413		}
1414	});
1415
1416	jQuery(document).on('click', ".qsm-submit-btn", function (event) {
1417		event.preventDefault();
1418		let $this = jQuery(this);
1419		let quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val();
1420		let form_id = "quizForm"+quiz_id;
1421		jQuery(document).trigger('qsm_quiz_submit_trigger', [quiz_id]);
1422		let recaptcha = jQuery('#' + form_id).find("#qsm_grecaptcha_v3");
1423		if (!recaptcha.length) {
1424			qmnFormSubmit(form_id, $this);
1425			return false;
1426		}
1427
1428		// Proceed reCaptcha v3
1429		let site_key = jQuery('#' + form_id).find("#qsm_grecaptcha_v3_sitekey").val();
1430		let submit_action = jQuery('#' + form_id).find("#qsm_grecaptcha_v3_nonce").val();
1431		grecaptcha.ready(function () {
1432			grecaptcha.execute(site_key, { action: submit_action }).then(function (token) {
1433				jQuery('#' + form_id).find("#qsm_grecaptcha_v3_response").val(token);
1434				qmnFormSubmit(form_id, $this);
1435			});
1436		});
1437	});
1438
1439	jQuery(document).on('click', '.btn-reload-quiz', function (e) {
1440		e.preventDefault();
1441		var quiz_id = jQuery(this).data('quiz_id');
1442		var parent_div = jQuery(this).parents('.qsm-quiz-container');
1443		qsmDisplayLoading(parent_div, quiz_id);
1444		jQuery.ajax({
1445			type: 'POST',
1446			url: qmn_ajax_object.ajaxurl,
1447			data: {
1448				action: "qsm_get_quiz_to_reload",
1449				quiz_id: quiz_id,
1450			},
1451			success: function (response) {
1452				parent_div.replaceWith(response);
1453				//Reload the timer and pagination
1454				qmnDoInit();
1455
1456				if (1 != qmn_quiz_data[quiz_id].disable_mathjax) {
1457					MathJax.typesetPromise();
1458				}
1459
1460				// trigger fired on successfull retake quiz
1461				jQuery(document).trigger('qsm_retake_quiz', [quiz_id]);
1462			},
1463			error: function (errorThrown) {
1464				console.log('error');
1465			}
1466		});
1467	});
1468
1469	jQuery(document).on('change', '.qmn-multiple-choice-input, .qsm_dropdown' , function (e) {
1470		let $i_this = jQuery(this);
1471		var quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val();
1472		var $quizForm = QSM.getQuizForm(quizID);
1473		let value = jQuery(this).val();
1474		let $this = jQuery(this).parents('.quiz_section');
1475		let question_id = $i_this.attr('name').split('question')[1];
1476		if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) {
1477			qsm_show_inline_result(quizID, question_id, value, $this, 'radio', $i_this)
1478		}
1479		jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, value, $this, 'radio']);
1480		if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) {
1481			qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm);
1482		}
1483	});
1484	let qsm_inline_result_timer;
1485	jQuery(document).on('keyup', '.mlw_answer_open_text, .mlw_answer_number, .qmn_fill_blank ', function (e) {
1486		let $i_this = jQuery(this);
1487		let quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val();
1488		let question_id = $i_this.attr('name').split('question')[1];
1489		let value = $i_this.val();
1490		let $this = $i_this.parents('.quiz_section');
1491		clearTimeout(qsm_inline_result_timer);
1492		qsm_inline_result_timer = setTimeout(() => {
1493			if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) {
1494				qsm_show_inline_result(quizID, question_id, value, $this, 'input', $i_this, $this.find('.qmn_fill_blank').index($i_this));
1495			}
1496			jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, value, $this, 'input', $this.find('.qmn_fill_blank').index($i_this)]);
1497		}, 2000);
1498	});
1499
1500	//inline result status function
1501
1502	// Autocomplete off
1503	jQuery('.qsm-quiz-container').find('.qmn_quiz_id').each(function () {
1504		var quizID = jQuery(this).val();
1505		if (qmn_quiz_data[quizID].form_disable_autofill == 1) {
1506			jQuery('#quizForm' + quizID).attr('autocomplete', 'off');
1507		}
1508	});
1509
1510	jQuery(document).on('change ', '.qsm-multiple-response-input', function (e) {
1511		let $i_this = jQuery(this);
1512		let quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val();
1513		let $quizForm = QSM.getQuizForm(quizID);
1514		let question_id = jQuery(this).attr('name').split('question')[1],
1515		$this = jQuery(this).parents('.quiz_section');
1516		let parent = jQuery(this).closest('.qmn_check_answers');
1517		let checkedValues = parent.find('input[type="checkbox"]:checked').map(function() {
1518			return jQuery(this).val();
1519		}).get();
1520		if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) {
1521			qsm_submit_quiz_if_answer_wrong(question_id, checkedValues, $this, $quizForm, 'checkbox');
1522		}
1523		if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) {
1524			qsm_show_inline_result(quizID, question_id, checkedValues, $this, 'checkbox', $i_this)
1525		}
1526		jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, checkedValues, $this, 'checkbox']);
1527	});
1528
1529	//Ajax upload file code
1530	jQuery('.quiz_section .mlw_answer_file_upload').on('change', function () {
1531		var $this = jQuery(this);
1532		var file_data = jQuery(this).prop('files')[0];
1533		var form_data = new FormData();
1534		form_data.append('file', file_data);
1535		form_data.append('action', 'qsm_upload_image_fd_question');
1536		var question_id = $this.parent('.quiz_section').find('.mlw_file_upload_media_id').attr("name").replace('question', '');
1537		form_data.append('question_id', question_id);
1538		$this.next('.loading-uploaded-file').show();
1539		$this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-error qsm-success');
1540		$this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-processing');
1541		$this.parent('.quiz_section').find('.qsm-file-upload-status').html('Uploading...').show();
1542		$this.parent('.quiz_section').find('.qsm-file-upload-name').html(jQuery(this)[0].files[0].name).show();
1543		jQuery(".qsm-submit-btn, .mlw_custom_next").attr('disabled', true);
1544		jQuery.ajax({
1545			url: qmn_ajax_object.ajaxurl,
1546			type: 'POST',
1547			data: form_data,
1548			cache: false,
1549			contentType: false,
1550			processData: false,
1551			success: function (response) {
1552				var obj = jQuery.parseJSON(response);
1553				$this.next('.loading-uploaded-file').hide();
1554				jQuery(".qsm-submit-btn, .mlw_custom_next").attr('disabled', false);
1555				if (obj.type == 'success') {
1556					$this.next().next().next('.remove-uploaded-file').show();
1557					$this.parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val(obj.wp_nonoce);
1558					$this.parent('.quiz_section').find('.mlw_file_upload_hidden_path').val(obj.file_path);
1559					$this.parent('.quiz_section').find('.mlw_file_upload_media_id').val(obj.media_id);
1560					$this.parent('.quiz_section').find('.qsm-file-upload-status').hide();
1561					$this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-error');
1562					$this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-success').text(obj.message);
1563					$this.parent('.quiz_section').find('.qsm-file-upload-status').show();
1564				} else {
1565					$this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-success');
1566					$this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-error').text('').text(obj.message);
1567					$this.parent('.quiz_section').find('.qsm-file-upload-status').show();
1568					$this.parent('.quiz_section').find('.mlw_answer_file_upload').val('');
1569				}
1570				// triggers after file uploads
1571				jQuery(document).trigger('qsm_after_file_upload', [$this.parent(), obj]);
1572			}
1573		});
1574		return false;
1575	});
1576
1577	//Ajax remove file code
1578	jQuery(document).on('click ', '.quiz_section .remove-uploaded-file', function () {
1579		let $this = jQuery(this);
1580		let media_id = jQuery(this).parent('.quiz_section').find('.mlw_file_upload_media_id').val();
1581		let nonce = jQuery(this).parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val();
1582		let form_data = new FormData();
1583		form_data.append('action', 'qsm_remove_file_fd_question');
1584		form_data.append('media_id', media_id);
1585		form_data.append('nonce', nonce);
1586		$this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-success');
1587		$this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-error');
1588		$this.parent('.quiz_section').find('.qsm-file-upload-status').html('Removing...').show();
1589		$this.parent('.quiz_section').find('.qsm-file-upload-name').html('').show();
1590		jQuery.ajax({
1591			url: qmn_ajax_object.ajaxurl,
1592			type: 'POST',
1593			data: form_data,
1594			cache: false,
1595			contentType: false,
1596			processData: false,
1597			success: function (response) {
1598				let obj = jQuery.parseJSON(response);
1599				if (obj.type == 'success') {
1600					$this.hide();
1601					$this.parent('.quiz_section').find('.mlw_file_upload_hidden_path').val('');
1602					$this.parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val('');
1603					$this.parent('.quiz_section').find('.mlw_file_upload_media_id').val('');
1604					$this.parent('.quiz_section').find('.mlw_answer_file_upload').val('');
1605					$this.parent('.quiz_section').find('.qsm-file-upload-status').text(obj.message);
1606				} else {
1607					$this.parent('.quiz_section').find('.qsm-file-upload-status').text('').text(obj.message);
1608					$this.parent('.quiz_section').find('.qsm-file-upload-status').show();
1609				}
1610			}
1611		});
1612		return false;
1613	});
1614	jQuery('.quiz_section .qsm-file-upload-container').on('click', function (e) {
1615		e.preventDefault();
1616		jQuery(this).prev('.mlw_answer_file_upload').trigger('click');
1617	});
1618	jQuery('.quiz_section .qsm-file-upload-container').on(
1619		'dragover',
1620		function (e) {
1621			e.preventDefault();
1622			e.stopPropagation();
1623			jQuery(this).addClass('file-hover');
1624		}
1625	)
1626	jQuery('.quiz_section .qsm-file-upload-container').on(
1627		'dragenter',
1628		function (e) {
1629			e.preventDefault();
1630			e.stopPropagation();
1631		}
1632	)
1633	jQuery('.quiz_section .qsm-file-upload-container').on(
1634		'dragleave',
1635		function (e) {
1636			e.preventDefault();
1637			e.stopPropagation();
1638			jQuery(this).removeClass('file-hover');
1639		}
1640	)
1641	jQuery('.quiz_section .qsm-file-upload-container').on(
1642		'drop',
1643		function (e) {
1644			jQuery(this).removeClass('file-hover');
1645			jQuery(this).find('.qsm-file-upload-name').html(e.originalEvent.dataTransfer.files[0].name).fadeIn();
1646			if (e.originalEvent.dataTransfer) {
1647				if (e.originalEvent.dataTransfer.files.length) {
1648					e.preventDefault();
1649					e.stopPropagation();
1650					jQuery(this).prev('.mlw_answer_file_upload').prop('files', e.originalEvent.dataTransfer.files);
1651					jQuery(this).prev('.mlw_answer_file_upload').trigger('change');
1652				}
1653			}
1654		}
1655	);
1656	jQuery('.quiz_section .qsm-file-upload-container').on('mouseleave', function () {
1657		jQuery(this).removeClass('file-hover');
1658	});
1659	//Deselect all answer on select
1660	jQuery('.qsm-deselect-answer').click(function (e) {
1661		e.preventDefault();
1662		jQuery(this).parents('.quiz_section').find('input[type="radio"]').prop('checked', false);
1663		jQuery(this).parents('.quiz_section').find('input[type="radio"]:hidden').prop('checked', true);
1664	});
1665
1666	//Submit the form on popup click
1667	jQuery(document).on('click', '.submit-the-form', function (e) {
1668		e.preventDefault();
1669		// Triggger the click event on the quiz form's submit button.
1670		jQuery('.qsm-submit-btn').trigger('click');
1671		jQuery('#modal-3').removeClass('is-open');
1672	});
1673
1674	jQuery('.pagetime-goto-nextpage').click(function (e) {
1675		e.preventDefault();
1676		var quiz_id = jQuery(this).data('quiz_id');
1677		var $container = jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container');
1678		if(!$container.find('.qsm-submit-btn').is(':visible')) {
1679			QSM.nextPage(quiz_id);
1680			qsmScrollTo($container);
1681		}else{
1682			$container.find(".mlw_custom_next").hide();
1683		}
1684	});
1685
1686	jQuery(document).on('keyup', '.mlwPhoneNumber', function (e) {
1687		this.value = this.value.replace(/[^- +()0-9\.]/g, '');
1688	});
1689
1690	jQuery(document).on('click', '.qsm_social_share_link', function (e) {
1691		e.preventDefault();
1692		var network = jQuery(this).attr('data-network');
1693		var share_url = jQuery(this).attr('data-link');
1694		var social_text = jQuery(this).attr('data-text');
1695		var social_id = jQuery(this).attr('data-id');
1696		var url = '';
1697		if (network == 'facebook') {
1698			url = "https://www.facebook.com/dialog/feed?" + "display=popup&" + "app_id=" + social_id +
1699				"&" + "link=" + encodeURIComponent(share_url) + "&" + "name=" + social_text;
1700		}
1701		if (network == 'twitter') {
1702			url = "https://twitter.com/intent/tweet?text=" + social_text;
1703		}
1704		var sTop = window.screen.height / 2 - (218);
1705		var sLeft = window.screen.width / 2 - (313);
1706		var sqShareOptions = "height=400,width=580,toolbar=0,status=0,location=0,menubar=0,directories=0,scrollbars=0,top=" + sTop + ",left=" + sLeft;
1707		window.open(url, "Share", sqShareOptions);
1708		return false;
1709	});
1710});
1711
1712const videoAttributePatterns = [
1713	/\ssrc="([^"]+)"/,
1714	/\smp4="([^"]+)"/,
1715	/\sm4v="([^"]+)"/,
1716	/\swebm="([^"]+)"/,
1717	/\sogv="([^"]+)"/,
1718	/\swmv="([^"]+)"/,
1719	/\sflv="([^"]+)"/,
1720	/\swidth="(\d+)"/,
1721	/\sheight="(\d+)"/
1722];
1723
1724function parseAttributes(match, src, width, height) {
1725	let videoAttrs = { src: '', width: '', height: '' };
1726
1727	videoAttributePatterns.forEach(pattern => {
1728		const attrMatch = match.match(pattern);
1729		if (attrMatch) {
1730			const value = attrMatch[1] || '';
1731			if (pattern.toString().includes('width')) {
1732				videoAttrs.width = value;
1733			} else if (pattern.toString().includes('height')) {
1734				videoAttrs.height = value;
1735			} else {
1736				videoAttrs.src = value;
1737			}
1738		}
1739	});
1740
1741	return videoAttrs;
1742}
1743
1744function generateVideoTag(src, width, height, content) {
1745	return `<video src="${src}" width="${width}" height="${height}" controls>${content}</video>`;
1746}
1747
1748function qsm_check_shortcode(message = null) {
1749	const videoContentRegex = /\[video(?:\s(?:src|mp4|m4v|webm|ogv|wmv|flv|width|height)="[^"]*")*\](.*?)\[\/video\]/g;
1750	let videoMatch = message.match(videoContentRegex);
1751
1752	if (videoMatch) {
1753		let videoHTML = message.replace(videoContentRegex, function(match, content) {
1754			const { src, width, height } = parseAttributes(match);
1755			const videoTag = generateVideoTag(src, width, height, content);
1756			return `<div class="video-content">${videoTag}</div>`;
1757		});
1758		return videoHTML;
1759	}
1760
1761	// Check if message contains an image shortcode
1762	let imageRegex = /\[img(?:(?:\ssrc="([^"]+)")|(?:\salt="([^"]+)")|(?:\swidth="(\d+)")|(?:\sheight="(\d+)")){0,4}\s*\]/g;
1763	let imageMatch = message.match(imageRegex);
1764
1765	if (imageMatch) {
1766		let imageHTML = message.replace(imageRegex, function(match, src, alt, width, height) {
1767			return '<img src="' + (src || '') + '" alt="' + (alt || '') + '" width="' + (width || '') + '" height="' + (height || '') + '">';
1768		});
1769		return '<div class="image-content">' + imageHTML + '</div>';
1770	}
1771
1772	return message;
1773}
1774
1775function qsm_show_inline_result(quizID, question_id, value, $this, answer_type, $i_this, index = null) {
1776	jQuery('.qsm-spinner-loader').remove();
1777	addSpinnerLoader($this,$i_this);
1778	let data = qsm_question_quick_result_js(question_id, value, answer_type, qmn_quiz_data[quizID].enable_quick_correct_answer_info,quizID);
1779	$this.find('.quick-question-res-p, .qsm-inline-correct-info').remove();
1780	$this.find('.qmn_radio_answers').children().removeClass('data-correct-answer');
1781	if ( 0 < value.length && data.success == 'correct') {
1782		$this.append('<div style="color: green" class="quick-question-res-p qsm-correct-answer-info">' + qmn_quiz_data[quizID].quick_result_correct_answer_text + '</div>')
1783		$this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>');
1784	} else if ( 0 < value.length && data.success == 'incorrect') {
1785		$this.find('.qmn_radio_answers').children().eq(parseInt(data.correct_index)).addClass('data-correct-answer');
1786		$this.append('<div style="color: red" class="quick-question-res-p qsm-incorrect-answer-info">' + qmn_quiz_data[quizID].quick_result_wrong_answer_text + '</div>')
1787		$this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>');
1788	}
1789	if (1 != qmn_quiz_data[quizID].disable_mathjax) {
1790		MathJax.typesetPromise();
1791	}
1792	jQuery('.qsm-spinner-loader').remove();
1793}
1794function addSpinnerLoader($this,$i_this) {
1795	if ($this.find('.mlw_answer_open_text').length) {
1796		$this.find('.mlw_answer_open_text').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;margin-left:10px;"></div>');
1797	  } else if ($this.find('.mlw_answer_number').length) {
1798		$this.find('.mlw_answer_number').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;margin-left:10px;"></div>');
1799	  } else {
1800		$i_this.next('.qsm-input-label').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;"></div>');
1801	  }
1802  }
1803
1804// captcha question type
1805var mlw_code;
1806jQuery(document).ready(function () {
1807	let captchaElement = jQuery('#mlw_code_captcha');
1808	if (captchaElement.length !== 0) {
1809		mlw_code = '';
1810		var mlw_chars = '0123456789ABCDEFGHIJKL!@#$%^&*()MNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';
1811		var mlw_code_length = 5;
1812		for (var i = 0; i < mlw_code_length; i++) {
1813			var rnum = Math.floor(Math.random() * mlw_chars.length);
1814			mlw_code += mlw_chars.substring(rnum, rnum + 1);
1815		}
1816		var mlw_captchaCTX = document.getElementById('mlw_captcha').getContext('2d');
1817		mlw_captchaCTX.font = 'normal 24px Verdana';
1818		mlw_captchaCTX.strokeStyle = '#000000';
1819		mlw_captchaCTX.clearRect(0, 0, 100, 50);
1820		mlw_captchaCTX.strokeText(mlw_code, 10, 30, 70);
1821		mlw_captchaCTX.textBaseline = 'middle';
1822		document.getElementById('mlw_code_captcha').value = mlw_code;
1823	}
1824});
1825
1826var quizType = 'default';
1827
1828//check max lengh
1829function checkMaxLength(obj){
1830    var value = obj.value;
1831    var maxlength = obj.maxLength;
1832    if (value.length > parseInt(maxlength)) {
1833        obj.value = value.slice(0, parseInt(maxlength));
1834    }
1835}
1836let submit_status = true;
1837function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, answer_type = '') {
1838	let quiz_id = $quizForm.closest('.qmn_quiz_container').find('.qmn_quiz_id').val();
1839	let data = qsm_question_quick_result_js(question_id, value, answer_type, qmn_quiz_data[quiz_id].enable_quick_correct_answer_info,quiz_id);
1840	QSM.changes(data, question_id.replace(/\D/g, ""), quiz_id);
1841	if (data.success == 'incorrect' && submit_status) {
1842		$quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass();
1843		$quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click');
1844	}
1845	if (1 != qmn_quiz_data[quiz_id].disable_mathjax) {
1846		MathJax.typesetPromise();
1847	}
1848}
1849
1850function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '',quiz_id='') {
1851	if (typeof encryptedData[quiz_id] !== 'undefined') {
1852		let decryptedBytes = CryptoJS.AES.decrypt(encryptedData[quiz_id], encryptionKey[quiz_id]);
1853		let decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8);
1854		let decrypt = JSON.parse(decryptedData);
1855		question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0;
1856		answer = typeof answer !== 'undefined' ? answer : '';
1857		answer_type = typeof answer_type !== 'undefined' ? answer_type : '';
1858		let answer_array = decrypt[question_id].answer_array;
1859		let settings = decrypt[question_id].settings;
1860		let correct_info_text = decrypt[question_id].correct_info_text;
1861		let correct_answer_logic = decrypt.correct_answer_logic;
1862		show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : '';
1863		let got_ans = false;
1864		let correct_answer = false;
1865		let count = 0;
1866		var index = typeof index !== 'undefined' ? index : 0;
1867		let correct_index = 0;
1868		let answer_count = 0;
1869		let total_correct_answer = 0;
1870		if (answer_array && false === got_ans) {
1871			for ( let key in answer_array) {
1872				let value = answer_array[key];
1873
1874				if ('input' === answer_type) {
1875					if (!settings['case_sensitive']) {
1876						answer = answer.toUpperCase();
1877						value[0] = value[0].toUpperCase();
1878					}
1879
1880					if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (!settings['matchAnswer'] || 'random' === settings['matchAnswer'] || key == ans_index)) {
1881						got_ans = true;
1882						correct_answer = true;
1883						break;
1884					}
1885				} else if ('checkbox' === answer_type) {
1886					if (0 == correct_answer_logic) {
1887						for (let anskey in answer) {
1888							let ansvalue = answer[anskey];
1889							if (parseInt(ansvalue) === parseInt(key) && 1 == value[2]) {
1890								got_ans = true;
1891								correct_answer = true;
1892								break;
1893							}
1894						}
1895					} else {
1896
1897						if (answer_array[answer[key]] !== undefined) {
1898							if (1 == answer_array[answer[key]][2]) {
1899								answer_count++;
1900							} else if (answer[key] !== undefined) {
1901								answer_count--;
1902							}
1903						}
1904						if (1 == value[2]) {
1905							total_correct_answer++;
1906						}
1907					}
1908				} else if (parseInt(answer) === parseInt(key) && 1 === parseInt(value[2])) {
1909					got_ans = true;
1910					correct_answer = true;
1911					break;
1912				}
1913			}
1914
1915			for (let key in answer_array) {
1916				let value = answer_array[key];
1917				if (false == correct_answer) {
1918					if (1 == value[2]) {
1919						correct_index = count;
1920					}
1921					count++;
1922				}
1923			}
1924
1925			if ('checkbox' === answer_type) {
1926				if (1 == correct_answer_logic) {
1927					if (0 != answer_count && 0 != total_correct_answer && total_correct_answer == answer_count) {
1928						got_ans = true;
1929						correct_answer = true;
1930					}
1931				}
1932			}
1933		}
1934
1935		if (2 == show_correct_info) {
1936			got_ans = true;
1937		}
1938
1939		let returnObject = {
1940			"correct_index": correct_index,
1941			"success": correct_answer ? 'correct' : 'incorrect',
1942			"message": show_correct_info && got_ans ? correct_info_text : ""
1943		};
1944
1945		jQuery(document).trigger('qsm_question_quick_result_js_after', [returnObject, correct_answer, answer, answer_array, answer_type, settings, decrypt, question_id]);
1946		return returnObject;
1947	}
1948}
1949
1950jQuery(document).on( 'click', '.qsm-quiz-container', function() {
1951    jQuery('.qsm-quiz-container').removeClass('qsm-recently-active');
1952    jQuery(this).addClass('qsm-recently-active');
1953});
1954if (jQuery('.qsm-quiz-container').length > 0) {
1955    jQuery('body .qsm-quiz-container:first').addClass('qsm-recently-active');
1956}
1957
1958jQuery(document).keydown(function(event) {
1959	if (jQuery('.qsm-quiz-container.qsm-recently-active').length) {
1960		jQuery(document).trigger('qsm_keyboard_quiz_action_start', event);
1961
1962        if ([39, 37, 13, 9].includes(event.keyCode)) {
1963            event.preventDefault();
1964        }
1965        if (event.keyCode === 39) {
1966            jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_next:visible').click();
1967        }
1968        if (event.keyCode === 37) {
1969            jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_previous:visible').click();
1970        }
1971        if (event.keyCode === 13 && jQuery('textarea:focus').length === 0) {
1972            jQuery('.qsm-quiz-container.qsm-recently-active').find('.qsm-submit-btn:visible').click();
1973            jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_next:visible').click();
1974        }
1975        if (event.keyCode === 40 && jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question:visible .qmn_radio_answers:not(.qsm_multiple_grid_answers)').length) {
1976            event.preventDefault();
1977            let checkedInputs = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .qmn_mc_answer_wrap input:checked, .qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .mlw_horizontal_choice input:checked');
1978            if (checkedInputs.length === 0) {
1979                jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('input
1979:first').click();
1980            } else {
1981                let nextInput = checkedInputs.closest('.qmn_mc_answer_wrap, .mlw_horizontal_choice').next('.qmn_mc_answer_wrap, .mlw_horizontal_choice').find('input[type="radio"]');
1982                if (nextInput.length) {
1983                    nextInput.click();
1984                } else {
1985                    jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('input:first').click();
1986                }
1987            }
1988        }
1989        if (event.keyCode === 38 && jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question:visible .qmn_radio_answers:not(.qsm_multiple_grid_answers)').length) {
1990            event.preventDefault();
1991            let checkedInputs = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .qmn_mc_answer_wrap input:checked, .qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .mlw_horizontal_choice input:checked');
1992            if (checkedInputs.length === 0) {
1993                jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('.qmn_mc_answer_wrap input:last, .mlw_horizontal_choice input:last').click();
1994            } else {
1995                let prevInput = checkedInputs.closest('.qmn_mc_answer_wrap, .mlw_horizontal_choice').prev('.qmn_mc_answer_wrap, .mlw_horizontal_choice').find('input[type="radio"]');
1996                if (prevInput.length) {
1997                    prevInput.click();
1998                } else {
1999                    jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('.qmn_mc_answer_wrap input:last, .mlw_horizontal_choice input:last').click();
2000                }
2001            }
2002        }
2003        if (event.shiftKey && event.keyCode === 9) {
2004            let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question');
2005            if (active_question.length) {
2006                jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper').removeClass("qsm-active-question");
2007                active_question.prev('.qsm-question-wrapper:visible').addClass("qsm-active-question");
2008            } else {
2009                jQuery(".qsm-quiz-container.qsm-recently-active .qsm-question-wrapper:visible:first-child").addClass("qsm-active-question");
2010            }
2011        } else if (event.keyCode === 9) {
2012            let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question');
2013            if (active_question.length) {
2014                jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper').removeClass("qsm-active-question");
2015                active_question.next('.qsm-question-wrapper:visible').addClass("qsm-active-question");
2016            } else {
2017                jQuery(".qsm-quiz-container.qsm-recently-active .qsm-question-wrapper:visible:first-child").addClass("qsm-active-question");
2018            }
2019        }
2020        if (event.keyCode === 9) {
2021            let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question');
2022            if (active_question.length) {
2023                jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question input:first').focus();
2024            }
2025        }
2026		jQuery(document).trigger('qsm_keyboard_quiz_action_end', event);
2027    }
2028});
2029
2030

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.