topical media & game development
basic-javascript-11-Quiz-GlobalFunctions.htm / htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Global functions</title>
<script language="JavaScript" type="text/javascript">
// chapter 9 addition to allow timed quizes
var timeLeft =-1;
var totalQuestionsToAsk = 0;
var quizTimerId = 0;
// questions and answers variables will holds questions and answers
var questions = new Array();
var answers = new Array();
var questionsAsked;
var numberOfQuestionsAsked = 0;
var numberOfQuestionsCorrect = 0;
var currentQNumber = -1;
// define question 1
questions[0] = new Array();
questions[0][0] = "The Beatles were";
questions[0][1] = "A sixties rock group from Liverpool";
questions[0][2] = "Four musically gifted insects";
questions[0][3] = "I don't know - can I have the questions on Baseball please";
// assign answer for question 1
answers[0] = "A";
// define question 2
questions[1] = new Array();
questions[1][0] = "Homer Simpson's favorite food is";
questions[1][1] = "Fresh salad";
questions[1][2] = "Doughnuts";
questions[1][3] = "Bread and water";
questions[1][4] = "Apples";
// assign answer for question 2
answers[1] = "B";
// define question 3
questions[2] = new Array();
questions[2][0] = "Lisa Simpson plays which musical instrument";
questions[2][1] = "Clarinet";
questions[2][2] = "Oboe";
questions[2][3] = "Saxophone";
questions[2][4] = "Tubular Bells";
// assign answer for question 3
answers[2] = "C";
// define question 4
questions[3] = "In the Simpsons, Bleeding Gums Murphy played which instrument?"
// assign answer for question 4
answers[3] = "\\bsax(ophone)?\\b";
// define question 5
questions[4] = "Which American President was involved in the Watergate Scandal?"
// assign answer for question 5
answers[4] = "\\b((Richard |R\\.? ?)(Milhous |M\\.? )?)?Nixon\\b";
function updateTimeLeft()
{
timeLeft--;
if (timeLeft == 0)
{
alert("Time's Up");
numberOfQuestionsAsked = totalQuestionsToAsk;
window.top.fraQuizPage.location.href = "AskQuestion.htm";
}
else
{
var minutes = Math.floor(timeLeft / 60);
var seconds = timeLeft - (60 * minutes);
if (minutes < 10)
minutes = "0" + minutes;
if (seconds < 10)
seconds = "0" + seconds;
window.status = "Time left is " + minutes + ":" + seconds;
}
}
function resetQuiz(numberOfQuestions, SelectedTimeLimit)
{
timeLeft = SelectedTimeLimit;
totalQuestionsToAsk = numberOfQuestions;
var indexCounter;
currentQNumber = -1;
questionsAsked = new Array();
for (indexCounter = 0; indexCounter < questions.length;indexCounter++)
{
questionsAsked[indexCounter] = false;
}
numberOfQuestionsAsked = 0;
numberOfQuestionsCorrect = 0;
if (timeLeft == -1)
{
window.status = "No Time Limit";
}
else
{
quizTimerId = window.setInterval("updateTimeLeft()",1000);
}
}
function answerCorrect(questionNumber, answer)
{
// declare a variable to hold return value
var correct = false;
// if answer provided is same as answer then correct answer is true
var answerRegExp = new RegExp(answers[questionNumber],"i");
if (answer.search(answerRegExp) != -1)
{
numberOfQuestionsCorrect++;
correct = true;
}
// return whether the answer was correct (true or false)
return correct;
}
function getQuestion()
{
if (totalQuestionsToAsk != numberOfQuestionsAsked)
{
var questionNumber = Math.floor(Math.random() * questions.length);
while (questionsAsked[questionNumber] == true)
{
questionNumber = Math.floor(Math.random() * questions.length);
}
var questionLength = questions[questionNumber].length;
var questionChoice;
numberOfQuestionsAsked++;
var questionHTML = "<h4>Question " + numberOfQuestionsAsked + "</h4>";
// Check if array or string
if (typeof questions[questionNumber] == "string")
{
questionHTML = questionHTML + "<p>" + questions[questionNumber] + "</p>";
questionHTML = questionHTML + "<p><input type=text name=txtAnswer ";
questionHTML = questionHTML + " maxlength=100 size=35></p>"
questionHTML = questionHTML + '<script type="text/javascript">'
+ 'document.QuestionForm.txtAnswer.value = "";<\/script>';
}
else
{
questionHTML = questionHTML + "<p>" + questions[questionNumber][0];
questionHTML = questionHTML + "</p>";
for (questionChoice = 1;questionChoice < questionLength;questionChoice++)
{
questionHTML = questionHTML + "<input type=radio ";
questionHTML = questionHTML + "name=radQuestionChoice";
if (questionChoice == 1)
{
questionHTML = questionHTML + " checked";
}
questionHTML = questionHTML + ">" +
questions[questionNumber][questionChoice];
questionHTML = questionHTML + "<br>"
}
}
questionHTML = questionHTML + "<br><input type='button' "
questionHTML = questionHTML + "value='Answer Question'";
questionHTML = questionHTML + "name=buttonNextQ ";
questionHTML = questionHTML + "onclick='return buttonCheckQ_onclick()'>";
currentQNumber = questionNumber;
questionsAsked[questionNumber] = true;
}
else
{
if (timeLeft != -1)
{
clearInterval(quizTimerId);
}
questionHTML = "<h3>Quiz Complete</h3>";
questionHTML = questionHTML + "You got " + numberOfQuestionsCorrect;
questionHTML = questionHTML + " questions correct out of "
questionHTML = questionHTML + numberOfQuestionsAsked;
questionHTML = questionHTML + "<br><br>Your trivia rating is "
switch(Math.round(((numberOfQuestionsCorrect / numberOfQuestionsAsked) * 10)))
{
case 0:
case 1:
case 2:
case 3:
questionHTML = questionHTML + "Beyond embarrasing";
break;
case 4:
case 5:
case 6:
case 7:
questionHTML = questionHTML + "Average";
break;
default:
questionHTML = questionHTML + "Excellent"
}
var previousNoCorrect = Math.floor(getCookieValue("previousNoCorrect"));
var previousNoAsked = Math.floor(getCookieValue("previousNoAsked"));
var currentAvgScore = Math.round(numberOfQuestionsCorrect /
numberOfQuestionsAsked * 100);
questionHTML = questionHTML + "<br>The percentage you've " +
" answered correctly in this quiz is " + currentAvgScore + "%";
if (previousNoAsked == 0)
{
previousNoCorrect = 0;
}
previousNoCorrect = previousNoCorrect + numberOfQuestionsCorrect;
previousNoAsked = previousNoAsked + numberOfQuestionsAsked;
currentAvgScore = Math.round(previousNoCorrect / previousNoAsked * 100);
setCookie("previousNoAsked", previousNoAsked,"","");
setCookie("previousNoCorrect", previousNoCorrect,"","");
questionHTML = questionHTML + "<br>This brings your average todate to " +
currentAvgScore + "%"
questionHTML = questionHTML + "<p><input type=button " +
"value='Reset Stats' " +
"onclick=\"window.top.fraTopFrame.fraGlobalFunctions.setCookie" +
"('previousNoAsked', 0,'','1 Jan 1970')\" " +
"name=buttonReset>"
questionHTML = questionHTML + "<p><input type=button " +
"value='Restart Quiz' " +
"onclick=\"window.location.replace('quizpage.htm')\" " +
"name=buttonRestart>"
}
return questionHTML;
}
function getCookieValue(cookieName)
{
var cookieValue = document.cookie;
var cookieStartsAt = cookieValue.indexOf(" " + cookieName + "=");
if (cookieStartsAt == -1)
{
cookieStartsAt = cookieValue.indexOf(cookieName + "=");
}
if (cookieStartsAt == -1)
{
cookieValue = null;
}
else
{
cookieStartsAt = cookieValue.indexOf("=", cookieStartsAt) + 1;
var cookieEndsAt = cookieValue.indexOf(";", cookieStartsAt);
if (cookieEndsAt == -1)
{
cookieEndsAt = cookieValue.length;
}
cookieValue = unescape(cookieValue.substring(cookieStartsAt,
cookieEndsAt));
}
return cookieValue;
}
function setCookie(cookieName, cookieValue, cookiePath, cookieExpires)
{
cookieValue = escape(cookieValue);
if (cookieExpires == "")
{
var nowDate = new Date();
nowDate.setMonth(nowDate.getMonth() + 6);
cookieExpires = nowDate.toGMTString();
}
if (cookiePath != "")
{
cookiePath = ";Path=" + cookiePath;
}
document.cookie = cookieName + "=" + cookieValue +
";expires=" + cookieExpires + cookiePath;
}
</script>
</head>
<body>
</body>
</html>
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.