


var echoColor = "#ffa050";

var allLetters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
				  "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];

// some variables for number game
var sequence = null;
var numindex = 0;
var livetd = null;


var rightLetters = 0;
var wrongLetters = 0;

var rightShapes = 0;
var wrongShapes = 0;


window.onload = function() {
  if (document.all) {
    document.body.ondrag = function () { return false; };
    document.body.onselectstart = function () { return false; };
  }
  if (typeof(ownOnLoad) == "function") {
//  alert("onload " + typeof(ownOnLoad));
      ownOnLoad();
  }
}

var ntoload = 0;
var nloaded = 0;
var doneLoad = null;


var cheat = false; // true;


function startSequence(f) {
  var authcode = readCookie("mq_authcode");

  if (cheat || authcode=="basic" || authcode=="advanced" || authcode=="consultation" ||
      authcode == "school" || authcode == "familychild" || authcode=="familyparent" ||
      authcode == "twins" ||
    ((document.location + "").indexOf("localhost") > 0) ||
    (document.location + "").indexOf("ample.html") > 0 ||
    (document.location + "").indexOf("clients.textensor") > 0 ||
    (document.location + "").indexOf("trial") > 0) {
	f();
  }
  else {
	alert("Sorry you do not have credit to run the W.M.Q. tester. If this is an error, " +
		  "please check that you have cookies enabled in your browser or visit " +
		  "www.memoryandlearning.com for more information");
	window.location="http://www.memoryandlearning.com/php/order.php";
  }
}



function anotherLoaded() {
    nloaded += 1;
    if (nloaded == ntoload) {
        if (typeof(doneLoad) == "function") {
           doneLoad();
        }
    }
}


function preLoad(toload, cb) {
    ntoload = toload.length;
    doneLoad = cb;
    for (var i = 0; i < toload.length; i++) {
        var snm = toload[i];
        soundManager.createSound({"id" : snm, "url" : "media/" + snm + '.mp3', "onload" : anotherLoaded});
        soundManager.load(snm);
    }
}



var sounds = new Object();


function dce(type) {
    return document.createElement(type);
}

function $(id) {
    return document.getElementById(id);
}





function echoClear(n) {
    var livetd = "gc" + n;

    var imgdiv = document.createElement("span");
    imgdiv.style.height = "0px";
    imgdiv.style.width = "0px";
    imgdiv.style.position="absolute"; // *** relative causes problems with IE7
    var img = document.createElement("IMG");
    img.src="pointer.gif";
    img.style.position="relative";
    imgdiv.appendChild(img);

    var ptop = 100;
    var pleft = 200;

    var myOn = function() {
        $(livetd).style.backgroundColor = echoColor;
         $(livetd).removeChild(imgdiv);
    }

    var myOff = function() {
         $(livetd).style.backgroundColor = "white";
    }


    var moveimg = function() {
        ptop -= 10;
        pleft -= 20;
        if (ptop < 0) ptop = 0;
        if (pleft < 0) pleft = 0;
        img.style.left = pleft + 30 + "px";
        img.style.top = ptop + "px";
        img.style.display = "block";
        if (ptop > 0 || pleft > 0) {
            setTimeout(moveimg, 50);
        }
    }


    this.start = function(dly) {
        img.style.display = "none";
        $(livetd).appendChild(imgdiv);
        if (dly > 1000) {
            setTimeout(moveimg, dly - 990);
        } else {
            setTimeout(moveimg, 10);
        }
        setTimeout(myOn, dly);
        setTimeout(myOff, dly + 1000);
    }
}



function spanInnerHTML(div, txt) {
  clearDiv(div);
  var sp = dce("span");
  sp.innerHTML = txt;
  div.appendChild(sp);
}


function showMsg(txt) {
    clearMsg();
    var d = dce("div");
    d.innerHTML = txt;
    $("msgarea").appendChild(d);
}



function sayMsg(snm, cb, waitafter) {
  if (typeof(cb) != "function") { cb = false; }
  if (waitafter) {} else { waitafter = 0; }
  preloadSay(snm, cb, waitafter);
  // sayMsgSM(snm, cb, waitafter);
}



function clearMsg() {
  clearDiv($("msgarea"));
}

function clearDiv(div) {
  if (div) {
	while (div.firstChild) {
	  div.removeChild(div.firstChild);
	}
  }
}



function clearReport() {
  clearDiv($("reportarea"));
}

function showReport(txt) {
    clearReport();
     var d = dce("div");
    d.innerHTML = txt;
    $("reportarea").appendChild(d);
}


function showCookies() {
    var nm = readCookie("childname");
    var dob = readCookie("childdob");
    var tdy = readCookie("todaysdate");
    // alert("got cookies " + nm + " " + dob + " " + tdy);
}



function setCookie(nm, value, days){
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } else {
    var expires = "";
  }
  document.cookie = nm+"="+value+expires+"; path=/";
}


function getCookie(nm) {
	return readCookie(nm);
}

function readCookie(nm) {
  var ret = '';
  var nameEQ = nm + "=";
  var ca = document.cookie.split(';');
  for (var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) {
      ret = c.substring(nameEQ.length,c.length);
    }
  }
  return ret;
}

function eraseCookie(nm) {
  document.cookie = nm + '=; path=/';
}

function hideNumbers() {
    $("robbienums").style.display = "none";
    $("grid").style.display = "none";
}


function showGrid() {
    $("robbienums").style.display = "none";
    $("grid").style.display = "block";
}

function showRobbie() {
  spanInnerHTML($("num"), "&nbsp;"); // *** .innerHTML = "&nbsp;";
  $("robbienums").style.display = "block";
  $("grid").style.display = "none";
}


function showProceed() {
    hideOpts();
    $("proceed").style.display = "block";
}


function showOptions() {
    hideOpts();
    $("options").style.display = "block";
}

function hideOpts() {
      var pd = $("proceed");
      if (pd) {
          pd.style.display = "none";
      }
      op = $("options");
      if (op) {
          op.style.display = "none";
      }
}


function nextNum() {
  if (numindex < sequence.length) {
	spanInnerHTML($("num"), sequence[numindex]); // ***
	numindex += 1;
	setTimeout(nextNum, 1500);
  } else {
	next();
  }
}


var gridecho = null;

function echoGridCell(n) {
    gridecho = $("gc" + n);
    gridecho.style.backgroundColor = echoColor;
    setTimeout(clearGridEcho, 250);
}

function clearGridEcho() {
    gridecho.style.backgroundColor = "white";
}


function hideLetters() {
      $("queryprompt").style.display = "none";
    $("lettergrid").style.display = "none";
     $("letter").style.display = "none";
}

function showLetter(let) {
    hideLetters();
    spanInnerHTML($("letter"), let); // .innerHTML = let;
    $("letter").style.display = "block";
}

function showQueryPrompt(let) {
  hideLetters();
  spanInnerHTML($("prompt"), let); // .innerHTML = let;
  $("queryprompt").style.display = "block";
}


function showLettersGrid(ltrs) {
  hideLetters();
  $("lettergrid").style.display = "block";
}


var cellClicked = function(ltr) {
}



var grcells = [];

function activateGrid() {
    for (var i = 1; i <= 9; i++) {
        if (!grcells[i]) {
            var elt = $("gc" + i);
            grcells[i] = new activeCell(elt, i);
        }
        grcells[i].on();
    }
}

function deactivateGrid() {
     for (var i = 1; i <= 9; i++) {
       grcells[i].off();
    }
}




function activeCell(elt, val) {
    if (!elt) {
        alert("active cell has null elt? " + elt + " " + val);
    }
    var mycell = elt;
    var myval = val;


    var myonclick = function() {
        cellClicked(myval);
    }
    var myonmouseover = function() {
        mycell.style.borderColor = "#c0c0c0";
     //   mycell.style.borderWidth = "3px";
     //   mycell.style.borderStyle = "solid";
    }

    var myonmouseout = function() {
        mycell.style.borderColor = "white";
    }



    this.on = function() {
        mycell.onclick = myonclick;
        mycell.onmouseover = myonmouseover;
        mycell.onmouseout = myonmouseout;
    }


    this.off = function() {
        mycell.onclick = null;
        mycell.onmouseover = null;
        mycell.onmouseout = null;
         mycell.style.borderColor = "white";
    }
}



function showLetters() {
     hideLetters();
    setTimeout(reallyShowLetters, 1500);
}

function reallyShowLetters() {
    numindex = 0;
    letterPrompt();
}


function letterPrompt() {
    showLetter(letters[numindex]);
    setTimeout(queryLetter, 1500);
}

function queryLetter() {
    showQueryPrompt(prompts[numindex]);
}

function letterNext() {
    numindex += 1;
    if (numindex < letters.length) {
        setTimeout(letterPrompt, 500);
    } else {
        next();
    }
}

function letterYes() {
    $("qryes").style.color = echoColor;
    if (prompts[numindex] == letters[numindex]) {
        rightLetters += 1;
    } else {
        wrongLetters += 1;
    }
    setTimeout(clearYesNo, 500);
    setTimeout(letterNext, 1000);
}

function letterNo() {
    $("qrno").style.color = echoColor;
    if (prompts[numindex] == letters[numindex]) {
        wrongLetters += 1;
    } else {
        rightLetters += 1;
    }
     setTimeout(clearYesNo, 500);
    setTimeout(letterNext, 1000);
}


function clearYesNo() {
    $("qryes").style.color = "black";
    $("qrno").style.color = "black";
}


var gridlet = null;



function hideShapes() {
    $("queryprompt").style.display = "none";
    $("shapegrid").style.display = "none";
    $("shape").style.display = "none";
}


function clearGrid() {
    for (var i = 1; i <= 9; i++) {
        var elt = $("gim" + i);
        elt.src = "whitedot.gif";
    }
}


function showGridShape(fnm, pos) {
    hideShapes();
    clearGrid();
    var elt = $("gim" + pos);
    elt.src = fnm + ".png";
    $("shapegrid").style.display = "block";
}



function showQueryShape(fnm) {
   hideShapes();
   clearGrid();
    clearDiv($("prompt"));
    var img = dce("img");
    img.src = fnm + ".png";
    $("prompt").appendChild(img);
    $("queryprompt").style.display = "block";

}



function showShapesGrid() {
    showMsg("");
   hideShapes();
   clearGrid();
    setTimeout(reallyShowShapesGrid, 50);
}

function reallyShowShapesGrid() {
    $("shapegrid").style.display = "block";
}


function showShapes() {
    numindex = 0;
    shapeShow();
}


function shapeShow() {
    showGridShape(shapes[numindex], positions[numindex]);
    setTimeout(queryShape, 2000);
}

function queryShape() {
    showQueryShape(prompts[numindex]);
}

function shapeNext() {
    numindex += 1;
    if (numindex < shapes.length) {
        setTimeout(shapeShow, 500);
    } else {
        next();
    }
}

function shapeYes() {
    $("qryes").style.color = echoColor;
    if (prompts[numindex] == shapes[numindex]) {
        rightShapes += 1;
    } else {
        wrongShapes += 1;
    }
    setTimeout(clearYesNo, 200);
    setTimeout(shapeNext, 500);
}

function shapeNo() {
    $("qrno").style.color = echoColor;
    if (prompts[numindex] == shapes[numindex]) {
        wrongShapes += 1;
    } else {
        rightShapes += 1;
    }
     setTimeout(clearYesNo, 200);
    setTimeout(shapeNext, 500);
}




//
// Javascript utilities for child page to
// call parent preloader.
// Child page creates a progress div
//


var preloadIndex = 0;
var preloadCount = 0;
var preloadProgress = ""; // id of div for progress bar.
var msgnames = [];

var preloadCallback = false;

//
// Create the progress bar
//
function createProgressBar(progdiv) {
  var txt = '<span id="loadingmsg">Loading sounds...</span><div id="soundouter" style="width:50%; height:12px; border: 2px solid #909090">';
  txt += '<div id="soundinner" style="width:1%; height:12px; background-color: #339933"></div>';
  var div = document.createElement("div");
  div.innerHTML = txt;
  document.getElementById(progdiv).appendChild(div);
}

// Call parent window to do the preload.
// callback is preloadedSound()
function preloadSound(snd) {
  //  alert("calling preload sound "+snd);
  window.opener.parentPreload(window, snd);
}

function preloadedSound(snd) {
  var pc = 100 * (preloadIndex+1) / preloadCount;
  if (preloadProgress) {
	document.getElementById("soundinner").style.width=""+pc+"%";
  }
  preloadIndex ++;
  if (preloadIndex < preloadCount) {
	preloadSound(msgnames[preloadIndex]);
  }
  else {
	if (preloadProgress) {
	  var lmsg = document.getElementById("loadingmsg");
	  clearDiv(lmsg);
	  var sp = document.createElement("span"); sp.innerHTML = "Sounds loaded.";
	  lmsg.appendChild(sp);
	}
	if (typeof(preloadCallback) == "function") {
	  // alert("calling preload callback...");
	  setTimeout(preloadCallback, 10);
	  //preloadCallback();
	}
  }
}

function startPreload() {
  preloadCount = msgnames.length;

  preloadSound(msgnames[preloadIndex]);
}

//
// ary is an array of sound names.
// progdiv is the idname of a progressbar div, or false
//
function preloadSounds(ary, progdiv, preloadcb) {
  preloadProgress = false;
  if (progdiv) {
	preloadProgress = progdiv;
	createProgressBar(progdiv);
  }
  msgnames = ary;
  preloadCallback = preloadcb;
  setTimeout(startPreload, 100);
  //  startPreload();
}


//
// Say a word using parent utilities.
// Calls back parentSayDone.
//
var sayCallback = false;
var sayDelay = 0;
function preloadSay(msg, cb, delay) {
  sayCallback = cb;
  if (delay) {
	sayDelay = delay;
  }
  else {
	sayDelay = 0;
  }
  window.opener.parentSay(window, msg);
}

function preloadQuiet() {
  window.opener.parentQuiet();
}

function parentSayDone() {
  if (sayDelay == 0) {
	if (sayCallback) {
	  // Even with zero delay, invoke callback in timeout to
	  // ensure it runs in child context not parent context
	  setTimeout(sayCallback, 10);
	}
  }
  else {
	if (sayCallback) {
	  setTimeout(sayCallback, sayDelay);
	}
  }
}
