morse.js

//  JavaScript: Morse Code Learning Tool
//
//  Copyright (c) Paul Griffiths, 2007
//  Email: mail@paulgriffiths.net

//  Pre-cache images

var symbols     = new Array(26);
symbols[0]      = new Image(200,61);
symbols[0].src  = "/images/program/js/morse/a.png";
symbols[1]      = new Image(200,61);
symbols[1].src  = "/images/program/js/morse/b.png";
symbols[2]      = new Image(200,61);
symbols[2].src  = "/images/program/js/morse/c.png";
symbols[3]      = new Image(200,61);
symbols[3].src  = "/images/program/js/morse/d.png";
symbols[4]      = new Image(200,61);
symbols[4].src  = "/images/program/js/morse/e.png";
symbols[5]      = new Image(200,61);
symbols[5].src  = "/images/program/js/morse/f.png";
symbols[6]      = new Image(200,61);
symbols[6].src  = "/images/program/js/morse/g.png";
symbols[7]      = new Image(200,61);
symbols[7].src  = "/images/program/js/morse/h.png";
symbols[8]      = new Image(200,61);
symbols[8].src  = "/images/program/js/morse/i.png";
symbols[9]      = new Image(200,61);
symbols[9].src  = "/images/program/js/morse/j.png";
symbols[10]     = new Image(200,61);
symbols[10].src = "/images/program/js/morse/k.png";
symbols[11]     = new Image(200,61);
symbols[11].src = "/images/program/js/morse/l.png";
symbols[12]     = new Image(200,61);
symbols[12].src = "/images/program/js/morse/m.png";
symbols[13]     = new Image(200,61);
symbols[13].src = "/images/program/js/morse/n.png";
symbols[14]     = new Image(200,61);
symbols[14].src = "/images/program/js/morse/o.png";
symbols[15]     = new Image(200,61);
symbols[15].src = "/images/program/js/morse/p.png";
symbols[16]     = new Image(200,61);
symbols[16].src = "/images/program/js/morse/q.png";
symbols[17]     = new Image(200,61);
symbols[17].src = "/images/program/js/morse/r.png";
symbols[18]     = new Image(200,61);
symbols[18].src = "/images/program/js/morse/s.png";
symbols[19]     = new Image(200,61);
symbols[19].src = "/images/program/js/morse/t.png";
symbols[20]     = new Image(200,61);
symbols[20].src = "/images/program/js/morse/u.png";
symbols[21]     = new Image(200,61);
symbols[21].src = "/images/program/js/morse/v.png";
symbols[22]     = new Image(200,61);
symbols[22].src = "/images/program/js/morse/w.png";
symbols[23]     = new Image(200,61);
symbols[23].src = "/images/program/js/morse/x.png";
symbols[24]     = new Image(200,61);
symbols[24].src = "/images/program/js/morse/y.png";
symbols[25]     = new Image(200,61);
symbols[25].src = "/images/program/js/morse/z.png";

var current = 0;                                           //  Stores current letter
var status  = 0;                                           //  0 when ready for new question, 1 when ready for answer
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";               //  Used to check whether answer is correct
var total = 0, correct = 0, incorrect = 0;                 //  Score counters


//  Function begins a new question

function newQuestion(form) {
  current = Math.floor(Math.random() * 26);                //  Pick a new letter at random
  document.images["symbol"].src = symbols[current].src;    //  Change image to new symbol
  form.textBox.value = "Enter your guess.";                //  Update info box
  form.newQ.disabled = true;                               //  Disable 'New question' button
  status = 1;                                              //  Switch status
}


//  Function checks an answer

function giveAnswer(ans, form) {
  if ( !status )                                                          //  Do nothing if not ready for answer
    return;
    
  if ( ans == alphabet.charAt(current) ) {                                //  Check whether answer is correct
    form.textBox.value  = "Correct! It was: " + ans;                      //  Update info box if correct...
    form.correctQ.value = ++correct;                                      //  Increment correct score and update box
  }
  else {
    form.textBox.value    = "Wrong! It was: " + alphabet.charAt(current); //  Update info box if incorrect...
    form.incorrectQ.value = ++incorrect;                                  //  Increment incorrect score and update box
  }
  
  form.totalQ.value   = ++total;                                          //  Increment total questions and update box
  form.newQ.disabled  = false;                                            //  Enable 'New question' button
  form.percentQ.value = Math.round(correct/total*1000)/10 + "%";          //  Update % correct box
  status              = 0;                                                //  Switch status
}


//  Function resets scores and score boxes

function resetScores(form) {
  total = correct = incorrect = 0;
  form.totalQ.value     = 0;
  form.correctQ.value   = 0;
  form.incorrectQ.value = 0;
  form.percentQ.value   = "0%";
}