/**
* Copyright eLearning Brothers LLC 2012 All Rights Reserved
*/
var game = new function () {
var designFile = "design.ini";
var questionsFile = "questions.ini";
var soundsFile = "sounds.ini";
if (!empty(GAMEPREFIX)) {
soundsFile = GAMEPREFIX + "-sounds.ini";
questionsFile = GAMEPREFIX + "-questions.ini";
designFile = GAMEPREFIX + "-design.ini";
}
var questions;
var questionCount = 0;
var design;
var sounds;
var validity = -3;
var instance = this;
var score = 0;
var answers = {};
var questionIndex = 0;
var timerOn = false;
var timerPrev = null;
var timerCount = 0;
var angle = 0;
var gameScore = 0;
var gameTime = 0;
var timeout = 0; /* NO TIMEOUT */
var gameFee = 0;
var currentQuestionSound = null;
var statistic = {};
var start_time;
var max_incorrect=0;
var current_time;
/* ----------------------- LOADING ------------------------- */
this.reloadStyles = function () {
$.get("config/" + designFile, function (iniData) {
design = parseIni(iniData);
loadStyles();
});
}
this.readConfig = function () {
$.get("config/" + questionsFile, function (iniData) {
iniData+=prepareIni(iniData,standartQuestionPattern);
questions = parseIni(iniData);
setOriginalQuestions(questions); defaultQuestionPostProcesor(questions);
validity++;
if (validity == 0) {
$(document).trigger('gameLoaded');
}
});
$.get("config/" + designFile, function (iniData) {
design = parseIni(iniData);
validity++;
if (validity == 0) {
$(document).trigger('gameLoaded');
}
});
$.get("config/" + soundsFile, function (iniData) {
sounds = parseIni(iniData, function (val) {
var media = createSound(val);
return media;
});
validity++;
if (validity == 0) {
$(document).trigger('gameLoaded');
}
});
};
var loadStyles = function () {
instance.loadStyles();
}
var bindSounds = function () {
instance.loadSounds();
}
var fillData = function () {
instance.loadData();
}
$(document).bind('gameLoaded', function () {
loadStyles();
bindSounds();
fillData();
$('div.game').addClass('step-1');
instance.onGameLoaded();
setInterval(function () {
if (timerOn) {
var newTime = new Date().getTime();
instance.onTimePassed((newTime - timerPrev));
timerPrev = newTime;
}
}, 100);
});
/* ----------------------- FUNCTIONS ------------------------- */
function recalculateScore() {
var answeredCount = 0; var correctAnsweredCount = 0;
var answeredScore = 0;
for (var k in answers) {
answeredCount++;
answeredScore += answers[k]; if(answers[k]>0) correctAnsweredCount++;
}
gameScore = answeredScore - gameFee;
instance.onUpdateScore(gameScore);
// instance.updateQuizPercent(answeredCount);
instance.updateQuizPercent(correctAnsweredCount);
instance.updateProgressText();
}
this.updateQuizPercent = function(count) {
statistic.game_percent = (100*count/questionCount).toFixed(0);
var p = (100*count/questionCount).toFixed(2);
$('div.game .quiz-percent-value').html(p+"%");
};
this.updateProgressText = function() {
$('div.game .progress-text').html(questionIndex+" of "+questionCount);
};
function startTimer() {
timerPrev = new Date().getTime();
timerOn = true;
}
function stopTimer() {
timerOn = false;
}
/* ----------------------- GAME FLOW START ------------------------- */
/* ----------------------- STEP-0 game start, reset all ------------------------- */
this.start = function () {
questions = getOriginalQuestions(); defaultQuestionPostProcesor(questions);
instance.loadData();
tRewind(sounds.finish);
tRewind(sounds.conclusion);
if (!onlyOneSound) {
setTimeout(function () {
tRewind(sounds.start);
tPlay(sounds.start, PRIORITY_NORMAL);
}, 10);
}
statistic.correct_answers=0; //every correct answer
statistic.incorrect_answers=0; //every incorrect attempt
statistic.fail_answers=0; //when all attempts was incorrect
statistic.questions_time={};
statistic.questions_answers={};
answers = {};
questionIndex = 0;
timerCount = 0;
gameTime = 0;
gameScore = 0;
gameFee = 0;
stopTimer();
$('div.game div.score').html(0);
$('div.game div.time').html(0);
$('#game').removeClass('step-0').addClass('step-1');
$(document).trigger('gameStarted');
}
this.onGameLoaded = function () {
instance.prepareAnimationFrame();
}
/* ----------------------- STEP-1 Logo, Splash screen ------------------------- */
liveFastClick('div.game a.button-game-start-1', function () {
$('#game').removeClass('step-1').addClass('step-2');
if (onlyOneSound) {
tRewind(sounds.start);
if (web_audio_api_player.init()){
if (sounds.introduction!=null){
tPlay(sounds.start, PRIORITY_NORMAL);
if ($('#game').hasClass('step-2')){
tRewind(sounds.start, 3, 1);
tPlay(sounds.introduction, PRIORITY_NORMAL,4);
}
}
else {tPlay(sounds.start, PRIORITY_NORMAL);}
}
else {
if (sounds.introduction!=null){
tPlay(sounds.introduction, PRIORITY_NORMAL);
}
else {tPlay(sounds.start, PRIORITY_NORMAL);}
}
} else {
tRewind(sounds.start);
if (sounds.introduction!=null){
tPlay(sounds.introduction, PRIORITY_NORMAL);
}
}
});
/* ----------------------- STEP-2 Intro to game, it's description ------------------------- */
liveFastClick('div.game #step2continuebutton', function() {
tRewind(sounds.start);
tRewind(sounds.introduction);
$('#game').removeClass('step-2');
$('div.game #animation').show();
start_time= new Date().getTime();
questionIndex = 0;
instance.onQuestionChooseRequired();
});
this.onQuestionChooseRequired = function() {
questionIndex++;
onQuestionIndexApplied();
}
/* ----------------------- STEP-3 Questions choosing board ------------------------- */
/**
* New question index is set, show it and start timers
*/
function onQuestionIndexApplied() {
if (!empty(questions['q' + questionIndex])) {
startTimer();
$('#game').removeClass('step-3');
questionShow(questionIndex);
} else {
finishGame();
}
};
/**
* On animation end
*/
$(document).bind('endDraw', function () {
questionIndex++;
$('#game').addClass('step-3');
});
/**
* On pressing continue button on question board screen
*/
liveFastClick('div.game #step3continuebutton', function () {
onQuestionIndexApplied();
});
/**
* No more questions available, go to finish screen, send score to SCROM
*/
function finishGame() {
statistic.full_Time=(new Date().getTime()-start_time);
$('#game').removeClass('step-3');
$('#game').removeClass('step-4');
$('#game').addClass('step-5');
if (sounds.conclusion!=null){
tPlay(sounds.conclusion, PRIORITY_NORMAL);
}
else {tPlay(sounds.finish, PRIORITY_NORMAL);}
recalculateScore();
try {
SCOSetValue("time", gameTime);
SCOSetValue("score", 100);
SCOSetValue("completed", 1);
SCOCommit();
} catch (e) {
console.error("Scorm failed -", e);
}
$('div.game #animation').fadeOut();
if('undefined' !== typeof gameloader ){
gameloader.send_results(statistic);
}
$(document).trigger('gameFinished',[statistic]);
}
/* ----------------------- STEP-4 Answers ------------------------- */
/**
* Show question board for index i
* @param i
*/
function questionShow(i) {
$('#game').addClass('step-4');
var question = questions['q' + i];
var score = nvl(question.score,1); /* Question score is optional, default 1 per question */
max_incorrect = parseInt(nvl(question.max_incorrect,questions.max_incorrect));
current_time= (new Date().getTime());
if (statistic.questions_answers['q' + i] != 0) statistic.questions_time['q' + i] = 0;//reset question time on start/correct/fail (don't reset on incorrect)
$('#game').data('question', question).data('score', score).data('max_incorrect', max_incorrect);
$('.step-4').removeClass("type-multiple");
conditionalShow($('div.game .question-block h1'),question.title);
$('div.game .question-block div').html(value(question.text));
$('div.game .question-choose').html("");
var correct = value(question.correct_answer).split(','); //ЕСЛИ НУЖНА ПОДДЕРЖКА MULTIPLE ANSWERS ТО КОПАТЬ СЮДА
var i = 1;
var order = [];
// optionally include eli animbutton and clickalert state when specified by ini settings
var eliAnimButtonDivOpen = (design.eli_anim_button_enabled) ? "
" : "";
var eliAnimButtonDivClose = (design.eli_anim_button_enabled) ? "
" : "";
var eliAnimClickAlertDiv = (design.eli_anim_clickalert_enabled) ? "" : "";
while (!empty(value(questions['q' + i]))) {
var variant = $("" + eliAnimButtonDivOpen + "
" + value(questions['q' + i].correct_answer) + "
" + eliAnimClickAlertDiv + eliAnimButtonDivClose + "
");
variant.data('correct', false);
for (var k in correct) {
if (value(questions['q' + i].correct_answer) == correct[k].trim()) {
variant.data('correct', true);
}
}
order[order.length] = variant;
i++;
}
if (questions.randomize_answer_order) {
order.sort(function () {
return 0.5 - Math.random()
});
}
var row = [];
row[0] = ['not_used'];
for (i=1;i<6;i++){
row[i] = $("");
$('div.game .question-choose').prepend(row[i]);
}
switch(order.length)
{
case 1:
row[1].append(order[0]);
break;
case 2:
row[1].append(order[0],order[1]);
break;
case 3:
row[1].append(order[0],order[1]);
row[2].append(order[2]);
break;
case 4:
row[1].append(order[0],order[1],order[2]);
row[2].append(order[3]);
break;
case 5:
row[1].append(order[0],order[1],order[2]);
row[2].append(order[3],order[4]);
break;
case 6:
row[1].append(order[0],order[1],order[2]);
row[2].append(order[3],order[4]);
row[3].append(order[5]);
break;
case 7:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5]);
row[3].append(order[6]);
break;
case 8:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6]);
row[3].append(order[7]);
break;
case 9:
row[1].append(order[0],order[1],order[2]);
row[2].append(order[3],order[4],order[5]);
row[3].append(order[6],order[7]);
row[4].append(order[8]);
break;
case 10:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6]);
row[3].append(order[7],order[8]);
row[4].append(order[9]);
break;
case 11:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6]);
row[3].append(order[7],order[8],order[9]);
row[4].append(order[10]);
break;
case 12:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6]);
row[3].append(order[7],order[8]);
row[4].append(order[9],order[10]);
row[5].append(order[11]);
break;
case 13:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6]);
row[3].append(order[7],order[8],order[9]);
row[4].append(order[10],order[11]);
row[5].append(order[12]);
break;
case 14:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10]);
row[4].append(order[11],order[12]);
row[5].append(order[13]);
break;
case 15:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13]);
row[5].append(order[14]);
break;
case 16:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13],order[14]);
row[5].append(order[15]);
break;
case 17:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13],order[14]);
row[5].append(order[15],order[16]);
break;
case 18:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13],order[14],order[15]);
row[5].append(order[16],order[17]);
break;
case 19:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13],order[14],order[15]);
row[5].append(order[16],order[17],order[18]);
break;
case 20:
row[1].append(order[0],order[1],order[2],order[3]);
row[2].append(order[4],order[5],order[6],order[7]);
row[3].append(order[8],order[9],order[10],order[11]);
row[4].append(order[12],order[13],order[14],order[15]);
row[5].append(order[16],order[17],order[18],order[19]);
break;
default:
alert('Please reduce question count. This game support max 20 questions');
}
/* var lowRow = 1;
var lowCnt = 1;
while(lowCnt");
while(remain>=0) {
if(cnt");
}
p.append(order[remain]);
remain--;
cnt++;
}
$('.question-choose').prepend(p);*/
if (!empty(question.type)) {
$('div.game .step-4').addClass("type-" + value(question.type));
}
if(!empty(question.audio)) {
currentQuestionSound = createSound(value(question.audio), true);
tPlay(currentQuestionSound, PRIORITY_HI);
} else {
currentQuestionSound = null;
}
$('div.game .question-block-wrapper').removeClass('transparent');
removeBackgroundApply($('div.game .question-block-wrapper'), question);
if (!empty(question.image)) {
var image = value(question.image);
$('div.game .question-block-wrapper>div.question-image').css('background-image', 'url("' + parseImgPath(image, true) + '")');
} else {
$('div.game .question-block-wrapper>div.question-image').css('background-image', 'none');
}
$('.question-block-wrapper').css({opacity:0}).animate({opacity:1}, 'slow');
$('#game .step-4').removeClass('answered').addClass('unanswered').removeClass('correct').removeClass('incorrect');
instance.setupAnimationForQuestion(i);
// call core helper to init eli sprite anims
initEliSpriteAnims(design);
}
function questionHide(i) {
instance.onQuestionHide(i);
}
/**
* Question is hidden, do custom actions
*/
this.onQuestionHide = function(questionI) {
onQuestionIndexApplied();
}
liveFastClick('div.game div.question-choose .variant', function () {
$(this).toggleClass('choosed');
answerChanged();
});
/**
* Answer is changed
*/
var answerChanged = function () {
if (!$('div.game div.step-4').hasClass('type-multiple')) {
answerConfirmed();
}
};
liveFastClick('div.game a.button-question-confirm', function () {
answerConfirmed();
});
/**
* Answer is confirmed
*/
var answerConfirmed = function () {
if(currentQuestionSound) {
tRewind(currentQuestionSound);
}
var question = $('#game').data('question');
var lscore = $('#game').data('score');
statistic.questions_time['q'+questionIndex]+= (new Date().getTime())-current_time;
var answerIndex = -1;
var allCorrectRequired = $('div.game div.step-4').hasClass('type-multiple');
var correct = allCorrectRequired;
$('div.game div.question-choose').find('.variant').each(function () {
/* If required all correct answers to be choosed */
if (allCorrectRequired && $(this).hasClass('choosed') != $(this).data('correct')) {
correct = false;
}
/* If required one correct answers to be choosed */
if (!allCorrectRequired && $(this).hasClass('choosed') && $(this).data('correct')) {
correct = true;
}
if($(this).hasClass('choosed')) {
answerIndex=$(this).index();
}
});
if (correct) {
stopTimer();
tRewind(sounds.correct);
tPlay(sounds.correct, PRIORITY_NORMAL);
answers[questionIndex] = parseInt(lscore);
score = parseInt($('div.game div.score').html()) + parseInt(lscore);
statistic.questions_answers['q' + questionIndex] = 1;
conditionalShow($('div.game .question-answered-block h1'), question.correct_feedback_title);
$('div.game .question-answered-block div').html(value(question.correct_feedback_text));
$('#game .step-4').addClass('correct');
$('#game .step-4').removeClass('unanswered').addClass('answered');
instance.onAnswerConfirmed(correct, answerIndex);
} else {
tRewind(sounds.incorrect);
tPlay(sounds.incorrect, PRIORITY_NORMAL);
// recalculateScore();
answers[questionIndex] = 0;
if((gameScore-parseInt(questions.incorrect_question_fee)>=0) || (stringToBoolean(questions.allowNegatives))) {
gameFee+=parseInt(questions.incorrect_question_fee);
}
statistic.questions_answers['q' + questionIndex] = 0;
$('div.game #error').show().css({top: 150, left: 350, width: 250, height: 250, opacity: 0.5}).animate({top: 50, left: 250, width: 450, height: 450, opacity: 0.0}, 200, function() {
$(this).hide();
});
$('div.game div.question-choose .variant').removeClass('choosed');
if ((max_incorrect-1)==0){
statistic.fail_answers++;
stopTimer();
$('div.game .question-answered-block div').html(value(question.incorrect_feedback_text));
$('#game .step-4').addClass('incorrect');
$('#game .step-4').removeClass('unanswered').addClass('answered');
// correct = true;
instance.onAnswerConfirmed(correct, answerIndex);
}
max_incorrect--;
statistic.incorrect_answers++;
}
recalculateScore();
};
/**
* Answer is confirmed, run custom actions like animations
* @param correct
* @param answerIndex
*/
this.onAnswerConfirmed = function(correct, answerIndex) {
this.runAnimationToQuestion(questionIndex, {correct: correct, answer: answerIndex});
$('div.game div.progressbar').each(function(){$(this).find('div:eq('+(questionIndex-1)+')').addClass('answered');});
if(correct) {
$('div.game div.progressbar').each(function(){$(this).find('div:eq('+(questionIndex-1)+')').addClass('correct').removeClass('incorrect');});
} else {
$('div.game div.progressbar').each(function(){$(this).find('div:eq('+(questionIndex-1)+')').addClass('incorrect');});
}
}
liveFastClick('div.game a.button-question-continue', function () {
var ans_div=$('div.game .step-4');
var max_incorrect = $('#game').data('max_incorrect');
if (ans_div.hasClass('incorrect')){
questionIndex++;
questionHide(questionIndex);
} else if (ans_div.hasClass('correct')){
statistic.correct_answers++;
questionIndex++;
questionHide(questionIndex);
$('#game').data('max_incorrect', max_incorrect);
}
});
/* ----------------------- STEP-5 Results ------------------------- */
liveFastClick('div.game a.button-result-continue', function () {
$('#game').removeClass('step-5');
game.resetAnimation();
game.start();
});
/* ----------------- ANIMATIONS ----------------- */
/**
* Init canvas
*/
this.prepareAnimationFrame = function () {
$('div.game #animation').hide();
$('div.game #animation .ball').hide();
$('div.game #animation .finish').hide();
}
/**
* Prepare frame for animation
*/
this.setupAnimationForQuestion = function (i) {
$('div.game #animation .ball').animate({left: 300, top: 350, width: 60, height: 60, opacity: 1},10);
$('div.game #animation .ball').show();
$('div.game #animation .man').animate({left: 350-150, top: 30},10)
$('div.game #animation .man').css('background-position','0 0')
}
/**
* Run animation
*/
this.runAnimationToQuestion = function (i, data) {
var before = 200;
var after = 300;
var data = typeof(data)==='undefined'?{}:data;
var x=0;
var y=0;
var leaveBall=false;
var man_image = "0 -1496px";;
var fadeOut = 1.0;
var targetDim = 30;
var shift1 = 100;
var shift2 = 150;
var zIndex = 4;
data.answer = data.answer + 1;
if(data.answer == 1) {
shift1 = -100;
shift2 = -150;
x=50;
y=30;
man_image = "0 -748px";
fadeOut = 0.0;
}
if(data.answer == 2) {
x=550;
y=30;
man_image = "0 -1122px";
fadeOut = 0.0;
}
if(data.answer == 3) {
shift1 = -100;
shift2 = -150;
leaveBall = true;
x=50;
y=250;
if(!data.correct) man_image ="0 -1870px";
}
if(data.answer == 4) {
leaveBall = true;
x=550;
y=250;
if(!data.correct) man_image = "0 -374px";
}
var middleX = (300+x)/2;
var middleY = (350+y)/2;
if(data.correct) {
zIndex = 2;
} else {
fadeOut = 0.0;
targetDim = 200;
}
//alert(data.answer);
$('div.game #animation .ball').css('z-index',3).animate({left: middleX, top: middleY}, before, function() {$(this).css('z-index',zIndex)}).animate({left: x, top: y, width: targetDim, height: targetDim, opacity: fadeOut}, after);
$('div.game #animation .man').animate({marginLeft: shift1}, before, function() {$(this).css('background-position',man_image)}).animate({marginLeft: shift2}, after);
}
this.resetAnimation = function () {
this.runAnimationToQuestion(0);
$('div.game #animation').fadeOut();
$('div.game div.progressbar div').removeClass('answered').removeClass('correct').removeClass('incorrect');
}
/* ----------------- TIMER ------------------- */
this.onTimePassed = function (deltaTime) {
gameTime+=deltaTime;
$('div.game div.time').html((parseFloat(gameTime)/1000).toFixed(2));
}
/* ----------------- SCORE ------------------- */
this.onUpdateScore = function(score) {
$('div.game div.score').html(score);
}
/* ----------------------- GAME FLOW END ------------------------- */
/* ----------------- GAME SPECIFIC LOADERS ------------------- */
this.loadStyles = function () {
applyDefaultStyles(design);
/* eli sprite anims */
loadEliSpriteAnimStyles(dynamicCssInstance, design);
if (!hoverDisable) {
dynamicCssInstance.addCompiled("div.game .question-choose .variant:hover", design.question_button_over);
dynamicCssInstance.addCompiled("div.game a.button:hover", design.button_over);
}
dynamicCssInstance.addRule("div.game .question-vertical-shift", design['margin_top_for_questions_screen'], "height: $vpx");
dynamicCssInstance.addRule("div.game .question-feedback-vertical-shift", design['margin_top_for_questions_feedback'], "height: $vpx");
dynamicCssInstance.addCompiled("div.game div.logo1", design.logo1);
dynamicCssInstance.addCompiled("div.game div.logo2", design.logo2);
dynamicCssInstance.addCompiled("div.game div.logo3", design.logo3);
if(!empty(design.question_screen)) {
var object = dozerMapper(design.question_screen, ["width", "height", "X", "Y", "padding", "paddingX", "paddingY","margin","marginX","marginY","marginTop","marginBottom","marginLeft","marginRight"]);
dynamicCssInstance.addCompiled("div.game .vertical .question-choose-wrapper", object);
dynamicCssInstance.addCompiled("div.game .vertical .question-block-wrapper", object);
dynamicCssInstance.addCompiled("div.game .vertical .question-answered-block-wrapper", object);
}
dynamicCssInstance.addCompiled('div.game .quiz-percent-value', design.quiz_percent_value);
//dynamicCssInstance.addCompiled('div.game .quiz-results', design.quiz-results)
if(!empty(design.question_choose_wrapper)) {
dynamicCssInstance.addCompiled("div.game .vertical .question-choose-wrapper", design.question_choose_wrapper);
}
dynamicCssInstance.addCompiled("div.game .question-choose .variant", design.question_button_up);
dynamicCssInstance.addCompiled("div.game .question-choose .variant:active", design.question_button_down);
dynamicCssInstance.addCompiled("div.game .question-choose .variant.choosed", design.question_button_selected);
dynamicCssInstance.addCompiled("div.game a.button", design.button_up);
dynamicCssInstance.addCompiled("div.game a.button:active", design.button_down);
if(!empty(design.score_box)) {
dynamicCssInstance.addCompiled("div.game div.score", design.score_box);
}
if(!empty(design.time_box)) {
dynamicCssInstance.addCompiled("div.game div.time", design.time_box);
}
dynamicCssInstance.addCompiled("div.game .vertical .question-answered-block-wrapper", design.question_feedback_box);
dynamicCssInstance.addCompiled("div.game .vertical .question-block-wrapper", design.question_box);
var object = dozerMapper(design.question_box, ["width", "height", "X", "Y", "padding", "paddingX", "paddingY"]);
dynamicCssInstance.addCompiled("div.game .question-block-wrapper>div.question-image", object);
applyDefaultQuestionBoxImage(dynamicCssInstance, design.question_box);
dynamicCssInstance.addCompiled("div.game div.step-2-description", design.description_panel);
dynamicCssInstance.addCompiled("div.game div.result-block-wrapper", design.result_panel);
dynamicCssInstance.addCompiled("div.game .progressbar", design.progressbar_container);
dynamicCssInstance.addCompiled("div.game .progressbar>div", design.progressbar_item);
dynamicCssInstance.addCompiled("div.game .progressbar>div.answered", design.progressbar_answered_item);
if(design.progressbar_answered_correct_item) {
dynamicCssInstance.addCompiled("div.game .progressbar>div.answered.correct", design.progressbar_answered_correct_item);
}
if(design.progressbar_answered_incorrect_item) {
dynamicCssInstance.addCompiled("div.game .progressbar>div.answered.incorrect", design.progressbar_answered_incorrect_item);
}
dynamicCssInstance.addRule("div.game .step-4.answered.correct .question-answered-block-wrapper h1", design.question_answer_correct_color, "color: $v");
dynamicCssInstance.addRule("div.game .step-4.answered.incorrect .question-answered-block-wrapper h1", design.question_answer_incorrect_color, "color: $v");
dynamicCssInstance.addRule("div.game .progressbar>div", design.progressbar_container.spacing, "margin-right: $vpx");
dynamicCssInstance.addRule("div.game .progressbar>div:last-child", design.progressbar_container.spacing, "margin-right: 0px");
$('div.game .step-4').addClass('vertical').removeClass('horizontal');
dynamicCssInstance.addCompiled("div.game #step1continuebutton", design.splash_continuebutton);
dynamicCssInstance.addCompiled("div.game #step2continuebutton", design.intro_continuebutton);
dynamicCssInstance.addCompiled("div.game #step4continuebutton", design.question_continuebutton);
dynamicCssInstance.addCompiled("div.game #step4confirmbutton", design.question_confirmbutton);
dynamicCssInstance.addCompiled("div.game #step5replaybutton", design.results_replaybutton);
var qCount = 1;
while (!empty(questions['q' + qCount])) {
qCount++;
}
qCount--;
var paddingTMP = design.progressbar_container.paddingX || design.progressbar_container.padding || 0;
var totalWidth = 1*value(design.progressbar_container.width)-qCount*value(design.progressbar_container.spacing) - 2*paddingTMP;
var elementWidth = Math.floor(totalWidth/qCount);
dynamicCssInstance.addRule("div.game .progressbar>div", elementWidth, "width: $vpx");
dynamicCssInstance.addRule("div.game .progressbar>div", design.progressbar_item.width, "width: $vpx");
dynamicCssInstance.flush();
}
this.loadSounds = function () {
if (questions.introduction_audio != null){
var media = createSound(questions.introduction_audio, true);
sounds.introduction = media;
}
if (questions.conclusion_audio != null){
var media = createSound(questions.conclusion_audio, true);
sounds.conclusion = media;
}
if (onlyOneSound) {
liveFastClick('.game a:not(#step4confirmbutton)', function () {
tPlay(sounds.select, PRIORITY_LOW);
});
liveFastClick('.game .questions div.question:not(.answered):not(.hasOwnSound)', function () {
tPlay(sounds.select, PRIORITY_LOW);
});
liveFastClick('.type-multiple .question-choose .variant', function () {
tPlay(sounds.select, PRIORITY_LOW);
});
} else {
liveFastClick('.game a, .game .questions div.question:not(.answered), .question-choose .variant', function () {
tPlay(sounds.select, PRIORITY_LOW);
});
if (!hoverDisable) {
$('.game a, .game .questions div.question:not(.answered), div.game .question-choose .variant').live('mouseenter', function () {
tPlay(sounds.hover, PRIORITY_LOW);
});
}
}
}
this.loadData = function () {
questions.randomize_question_order = stringToBoolean(questions.randomize_question_order);
questions.randomize_answer_order = stringToBoolean(questions.randomize_answer_order);
var i = 1;
while (!empty(questions['q' + i])) {
i++;
}
var qlength = i - 1;
if (questions.randomize_question_order) {
var newQ = [];
var oldQ = [];
var i = 1;
while (!empty(questions['q' + i])) {
newQ[newQ.length] = questions['q' + i];
oldQ[oldQ.length] = empty(questions['q' + i].path) ? (((i) * 100 / qlength).toFixed(2) + "%") : questions['q' + i].path;
i++;
}
newQ.sort(function () {
return 0.5 - Math.random()
});
var ql = i;
for (i = 1; i < ql; i++) {
questions['q' + i] = newQ[i - 1];
questions['q' + i].path = oldQ[i - 1];
}
}
/* FILL GAME TEXT */
$("div.game #step1continuebutton").html("" + value(questions.splash_page_button_continue_text));
$("div.game #step2continuebutton").html("" + value(questions.intro_page_button_continue_text));
$("div.game #step3continuebutton").html("" + value(questions.questions_page_button_continue_text));
$("div.game #step4continuebutton").html("" + value(questions.question_page_button_continue_text));
$("div.game #step4confirmbutton").html("" + value(questions.question_page_button_confirm_text));
$("div.game #step5replaybutton").html("" + value(questions.result_page_button_replay_text));
$('div.game div.step-2-description div.description div').html("" + value(questions.introduction_text));
$('div.game div.result-block div.description').html("" + value(questions.conclusion_text));
var qCount = 1;
while (!empty(questions['q' + qCount])) {
qCount++;
}
questionCount = defaultCutQuestionCount(questions, questions.questions_displayed_from_count);
$('div.game div.progressbar').html("");
for(i=0;i");
}
};
$(document).ready(function () {
game.readConfig();
$('.game').css('opacity', 0.1);
});
$(window).load(function () {
});
$(document).bind('gameLoaded', function () {
SCOPreInitialize();
SCOInitialize();
$('.game').css('opacity', 1);
game.start();
});