Code:
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
// Identify the questions
var thisQuestion = $('#question{QID}');
var thisQuestionID = {QID};
var qHidden = thisQuestion.nextAll('.multiple-short-txt:eq(0)');
var hiddenInput1 = $('input.text:eq(0)', qHidden);
var hiddenInput2 = $('input.text:eq(1)', qHidden);
var qHidden2 = thisQuestion.nextAll('.multiple-opt:eq(0)');
var qHidden2ID = qHidden2.attr('id').replace(/question/, '');
// Hide the control questions
qHidden.hide();
qHidden2.hide();
// Listener on the checkboxes
$('input.checkbox', thisQuestion).on('change', function(e) {
handleChecked();
});
function handleChecked() {
// Build an array of checked sub-question codes
var checkedAnswers = [];
$('input.checkbox:checked', thisQuestion).each(function(i) {
var thisSQCode = $(this).attr('id').split('X'+thisQuestionID)[1];
checkedAnswers.push(thisSQCode);
});
// Shuffle the array
shuffleArray(checkedAnswers);
// Reset the hidden multi-choice
$('input.checkbox', qHidden2).each(function(i) {
$(this).prop('checked', false);
$(this).nextAll('input:hidden:eq(0)').val('');
});
// Load the hidden questions with 2 random items from the visible multi-choice
$(hiddenInput1).val($.trim($('.question-item[id$="X'+thisQuestionID+checkedAnswers[0]+'"] .label-text').text()));
$('input.checkbox[id$="X'+qHidden2ID+checkedAnswers[0]+'"]', qHidden2).trigger('click');
if(checkedAnswers.length > 1) {
$(hiddenInput2).val($.trim($('.question-item[id$="X'+thisQuestionID+checkedAnswers[1]+'"] .label-text').text()));
$('input.checkbox[id$="X'+qHidden2ID+checkedAnswers[1]+'"]', qHidden2).trigger('click');
}
else {
$(hiddenInput2).val('');
}
// Fire Expression Manager
checkconditions(hiddenInput1.value, hiddenInput1.name, hiddenInput1.type);
checkconditions(hiddenInput2.value, hiddenInput2.name, hiddenInput2.type);
$('input.checkbox', qHidden2).each(function(i) {
checkconditions(this.value, this.name, this.type);
});
}
});
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
</script>