<!--

function onPageLoaded(){
	NumberMemoryBeanFactory.createInitialNumberMemoryBean(page_name, initialMemoryBeanCallback); 
}

var initialMemoryBeanCallback = function(data){
	inputentries=data.currentNumbers; 
}

//----------------------------------------------------------------------
var containerName = 'number_memory_container';
var msgDivName = 'user_messages'
var boxName = 'numberBox';
var activeBoxName = 'activeNumberBox';
var entry_kind = 'numbers';
var keydownFunction = writeDigit;
var init_entries = ["5", "4", "3", "2", "1"];


	//-------- Performance Display code -------------

function displayPerfData(response)
{
    var note = "There are five(5) " + entry_kind + " in each trial, <br>so the maximum correct score is 5 times the number tried.";
    genericDisplayPerfData('Number Memory', response, note);
    return false;
}

	// -------------- INSTRUCTIONS ------------

function showInstructions()
{
    var ipath = 'number-memory-instructions';
    var entry_win=window.open(
                     ipath,
                     'Number_Memory_Instructions',
                     'height=400,width=650');
    return false;
}

function writeDigit(e)
{
  if(document.all)e = event;
  if(!activeItem)return;
  if (e.keyCode) code = e.keyCode; else if (e.which) code = e.which;
  if (e.metaKey || e.ctrlKey || e.altKey){
  	return true;
  } else 
  if (code==8 || code==46)  // backspace || delete
  {
    if (inputString.length > 0) {
        inputString = inputString.substring(0, inputString.length-1);
        activeItem.innerHTML = inputString;
    }
  } else if (code==9) // tab
  {
        answers[activeNum] = inputString;
        activeItem.className='numberBox';
        nextNum = (activeNum < 4 ? activeNum + 1 : 0);
        var nextId = nextNum.toString();
        activeItem = document.getElementById(nextId);
        activeItem.className='activeNumberBox';
        activeNum = nextNum;
        if (answers[activeNum] && answers[activeNum].length > 0){
          inputString=answers[activeNum];
          // need to try to place the cursor at the end....
        } else {
          inputString = "";
        }
        activeItem.focus();
        calculateScore();
  } else if (48 <= code && code <= 57) {
    var theChar = String.fromCharCode(code);
    inputString += theChar;
    activeItem.innerHTML = inputString;
  }
  return false; 
}


/* ================ used to be, COMMON with word_number_memory.js  started here....============== */

    // ------ GLOBAL VARIABLES --------


var playing = false;

var activeItem = false;
var activeNum = false;
var inputString;
var answers;

var curscore = 0;
var nummoves = 0;
var numwon = 0;
var starts = 0;

var correctItemFactor = 1;
var allCorrectBonus = 0;
var totalPossibleScore = 5 * correctItemFactor + allCorrectBonus;

var flatentries;
var inputentries;
var entries;
var answerentries;

var statisticsdiv;
var primaryParent;
var containerdiv;
var msgsdiv;

var flashOnTimer = true;
var flashMode = 1;  //0 = off; 1 = on
var flashTime;
var flashOnTimeLimit = 3;  //clockticks
var clocktick = 1000;       //millisecs

//-------------------------------------------------------------
var servletTarget;
var msgDivName ="user_messages";
var workoutName;

function initialStartGame()
{
  var textdiv = document.getElementById('intro_text');
  textdiv.style.display="none";

  statisticsdiv = document.getElementById('memory_statistics');
  statisticsdiv.style.display="block";
  
  msgsdiv = document.getElementById("user_messages");
  msgsdiv.style.display="block";
  
  containerdiv = document.getElementById("number_memory_container");
  containerdiv.style.display="block";

  setupStartStop();
  startGame();
}

var newNumbersCallback = function(data) { 
    inputentries=data.currentNumbers;
}

function startGame()
{
  if ((inputentries == undefined) || (inputentries[0] == undefined))
  {
      waitForCallbackToComplete = true;
      msgsdiv.innerHTML='Please wait: Fetching numbers from server...';
      return;
  }
  
  entries = new Array(5);
  for (var k=0; k<inputentries.length; k++){
    entries[k] = inputentries[k]; 
  }
  
  NumberMemoryBeanFactory.nextNumberMemoryBeanNumbers(entries, newNumbersCallback);
  
  var numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = "0";
  
  activeItem = false;
  initGame();
  playing = true;
  starts = 1;
  setStopStartBtns(false, false);

  msgsdiv.innerHTML='Memorize this list for ' + flashOnTimeLimit + ' seconds:';
  flashOn();
  start_timer();
}

function initGame()
{
  var el = document.getElementById(containerName);
  var subs = el.getElementsByTagName('DIV');
  for(var k=0; k<subs.length; k++){
      subs[k].className = boxName;
      subs[k].innerHTML = entries[k];  
  }
}

function stopGame()
{
  stop_play();
}

function stop_play()
{
//alert("stop_play");
	keydownFunction='';
	if(document.all){
      document.body.onkeydown = keydownFunction;
    }else{
      document.documentElement.onkeydown = keydownFunction;
    }
    msgsdiv.innerHTML='';
    toggleStopStartBtns();
    activeItem.className=boxName;
    if (activeNum || activeNum == 0){
       answers[activeNum] = inputString;
    }
    var cur_time = new Date();
    elapsed_time = cur_time.getTime() - start_time.getTime();
    stop_timer();
    playing = false;
//alert("call finalCalculateScore");
    finalCalculateScore();
	var userNum = sbCookieData.usernum;
	Record.recordNumCorrectPlusMovesWithMax(taskId, nummoves, curscore, elapsed_time, totalPossibleScore, userNum);
}

function hideEntries()
{
  var el = document.getElementById(containerName);
  var subs = el.getElementsByTagName('DIV');
  for(var k=0; k<subs.length; k++){
    if(subs[k].className==boxName){
      subs[k].innerHTML = "";  
      subs[k].onclick = setActiveItem;  
    }
  }
  keydownFunction = writeDigit;
  if(document.all){
    document.body.onkeydown = keydownFunction;
  }else{
    document.documentElement.onkeydown = keydownFunction;
  }
  
  inputString = "";
  activeNum = 0;
  inputItem = subs[0];
  inputItem.className=activeBoxName;
  activeItem = inputItem;  

  startForm.blur(); 
  subs[0].focus();

  answers = new Array();
  for (var i=0; i<5; i++) {
    answers[i] = null;
  }
  curscore = 0;
  msgsdiv.innerHTML='Now type the list of ' + entry_kind + ' in the boxes in order:';

  var numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = curscore;
}

function setActiveItem()
{
  if (activeNum || activeNum >= 0){
     answers[activeNum] = inputString;
  }
  inputItem = this;
  if(activeItem){
    activeItem.className=boxName;
  }

  var id = inputItem.id;
  activeNum = parseInt(id);
  inputItem.className=activeBoxName;
  activeItem = inputItem;  
  if (answers[activeNum] != null && answers[activeNum] && answers[activeNum].length > 0){
    inputString=answers[activeNum];
    // need to try to place the cursor at the end....
  } else {
    inputString = "";
  }
  calculateScore();
}

function trimString (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function calculateScore()
{
  nummoves = 0;
  curscore = 0;
  for (var i=0; i<5; i++){
    if (trimString(answers[i])==entries[i]){
      curscore++;
    }
    if (answers[i] != null && answers[i] && answers[i].length > 0){
        nummoves++;
    }
  }
  var numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = curscore;
  if (nummoves > 4){
    stop_play();
  }
}

function finalCalculateScore()
{
  var answerstring = "";
  answerentries = new Array();
  curscore = 0;
  for (var i=0; i<5; i++){
    if (answers[i] != null && trimString(answers[i])==entries[i]){
      curscore++;
      answerentries[i] = "<font color='green'>"+answers[i] + "/" + entries[i]+"</font>";
    } else {
      if (answers[i] != null && answers[i].length > 0 ){
        answerentries[i] = "<font color='red'>"+answers[i] + "</font> / <font color='green'>"+entries[i]+"</font>";
      } else {
        answerentries[i] = "<font color='red'>"+"? </font><font color=green> / " + entries[i]+"</font>";
      }
    }
    answerstring += answerentries[i];
    if (i < 4){
      answerstring += "@";
    }
  }
  var el = document.getElementById(containerName);
  var subs = el.getElementsByTagName('DIV');
  for(var j=0; j<subs.length; j++){
      subs[j].innerHTML = answerentries[j];  
  }
  if (curscore > 4){
    curscore +=5;
    msgsdiv.innerHTML='Congratulations!  All 5 correct!  Bonus = +5 points.';
  }
  var numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = curscore;
}

	//--------Elapsed time code -------------

function doFlash()
{
   if (flashTime == 0)
   {
      var lastFlashMode = flashMode;
      flashMode = 1 - flashMode;
      if (flashMode == 0){
         hideEntries();
         setStopStartBtns(false, true);
         flashTime = 1000000;
      } 
   } else {
     flashTime--;
   }
}

function  flashOn()
{
  flashMode = 1;
  flashTime = flashOnTimeLimit;
}

function setupEntryLists(flatentries, aentries, erase)
{
  inputentries = flatentries.split("@");
  if (aentries != null){
    answerentries = aentries.split("@");
  }
  if (answerentries != null && answerentries.length > 0)
  {
    var el = document.getElementById(containerName);
    var subs = el.getElementsByTagName('DIV');
    for(var j=0; j<subs.length; j++){
        subs[j].className==boxName;
        if (erase) {
          subs[j].innerHTML = '';
        } 
    }
  }
}

// -->
