As promised a sample survey.
In group "GPool" I created a question (Q0) of type array(text) with two columns (X & Y) and 17 rows (16 for the randomly chosen X- and Y-values, 1 for the constant Z-value)
Code:
<script type="text/javascript" charset="utf-8">
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
$(document).on('ready pjax:scriptcomplete',function(){
// Fill the arrays
var arrX = ["Adam", "Bert", "Carol", "Deborah", "Esther", "Frank", "George", "Henry", "Iris", "Jacob", "Ken", "Larry", "Michael", "Noemi", "Ottilie", "Paula" ];
var arrY = ["Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7", "Y8", "Y9", "Y10", "Y11", "Y12", "Y13", "Y14", "Y15", "Y16" ];
var arrZ = ["Z1", "Z2", "Z3", "Z4", "Z5", "Z6", "Z7", "Z8", "Z9", "Z10", "Z11", "Z12", "Z13", "Z14", "Z15", "Z16" ];
//Shuffle arrays X and Y
arrX = shuffle(arrX);
arrY = shuffle(arrY);
//Fill the LimeSurvey array
$('#question{QID} tr[id^="javatbd"]:eq(0) input[type="text"]:eq(0)').val(arrX[0]);
$('#question{QID} tr[id^="javatbd"]:eq(1) input[type="text"]:eq(0)').val(arrX[1]);
$('#question{QID} tr[id^="javatbd"]:eq(2) input[type="text"]:eq(0)').val(arrX[2]);
$('#question{QID} tr[id^="javatbd"]:eq(3) input[type="text"]:eq(0)').val(arrX[3]);
$('#question{QID} tr[id^="javatbd"]:eq(4) input[type="text"]:eq(0)').val(arrX[4]);
$('#question{QID} tr[id^="javatbd"]:eq(5) input[type="text"]:eq(0)').val(arrX[5]);
$('#question{QID} tr[id^="javatbd"]:eq(6) input[type="text"]:eq(0)').val(arrX[6]);
$('#question{QID} tr[id^="javatbd"]:eq(7) input[type="text"]:eq(0)').val(arrX[7]);
$('#question{QID} tr[id^="javatbd"]:eq(8) input[type="text"]:eq(0)').val(arrX[8]);
$('#question{QID} tr[id^="javatbd"]:eq(9) input[type="text"]:eq(0)').val(arrX[9]);
$('#question{QID} tr[id^="javatbd"]:eq(10) input[type="text"]:eq(0)').val(arrX[10]);
$('#question{QID} tr[id^="javatbd"]:eq(11) input[type="text"]:eq(0)').val(arrX[11]);
$('#question{QID} tr[id^="javatbd"]:eq(12) input[type="text"]:eq(0)').val(arrX[12]);
$('#question{QID} tr[id^="javatbd"]:eq(13) input[type="text"]:eq(0)').val(arrX[13]);
$('#question{QID} tr[id^="javatbd"]:eq(14) input[type="text"]:eq(0)').val(arrX[14]);
$('#question{QID} tr[id^="javatbd"]:eq(15) input[type="text"]:eq(0)').val(arrX[15]);
$('#question{QID} tr[id^="javatbd"]:eq(0) input[type="text"]:eq(1)').val(arrY[0]);
$('#question{QID} tr[id^="javatbd"]:eq(1) input[type="text"]:eq(1)').val(arrY[1]);
$('#question{QID} tr[id^="javatbd"]:eq(2) input[type="text"]:eq(1)').val(arrY[2]);
$('#question{QID} tr[id^="javatbd"]:eq(3) input[type="text"]:eq(1)').val(arrY[3]);
$('#question{QID} tr[id^="javatbd"]:eq(4) input[type="text"]:eq(1)').val(arrY[4]);
$('#question{QID} tr[id^="javatbd"]:eq(5) input[type="text"]:eq(1)').val(arrY[5]);
$('#question{QID} tr[id^="javatbd"]:eq(6) input[type="text"]:eq(1)').val(arrY[6]);
$('#question{QID} tr[id^="javatbd"]:eq(7) input[type="text"]:eq(1)').val(arrY[7]);
$('#question{QID} tr[id^="javatbd"]:eq(8) input[type="text"]:eq(1)').val(arrY[8]);
$('#question{QID} tr[id^="javatbd"]:eq(9) input[type="text"]:eq(1)').val(arrY[9]);
$('#question{QID} tr[id^="javatbd"]:eq(10) input[type="text"]:eq(1)').val(arrY[10]);
$('#question{QID} tr[id^="javatbd"]:eq(11) input[type="text"]:eq(1)').val(arrY[11]);
$('#question{QID} tr[id^="javatbd"]:eq(12) input[type="text"]:eq(1)').val(arrY[12]);
$('#question{QID} tr[id^="javatbd"]:eq(13) input[type="text"]:eq(1)').val(arrY[13]);
$('#question{QID} tr[id^="javatbd"]:eq(14) input[type="text"]:eq(1)').val(arrY[14]);
$('#question{QID} tr[id^="javatbd"]:eq(15) input[type="text"]:eq(1)').val(arrY[15]);
// Capture the SAVEDID
var id={SAVEDID};
id=(id-1) % 16;
// Fill the last field of the LimeSurvey array with the calculated index
$('#question{QID} tr[id^="javatbd"]:eq(16) input[type="text"]:eq(0)').val(arrZ[id]);
// Remove the slashes to hilde the question after test
// $('#question{QID}').hide();
});
</script>
And remember: SAVEDID is only available in active surveys.
Generally I do not see any advantage of this cyclic selection (remember: drop-outs) over a simple selection by random number.