<!--

function onPageLoaded(){
	start_seqs();
}

var statisticsdiv;
var numcorrectdiv;
var numtrieddiv;
var number_seqs_containerdiv;
var umdiv;
var umdiv2;
var umdiv3;
var ummode=1;

var numTried=0;
var numCorrect=0;
var playing=false;
var correctItemFactor = 1;
var allCorrectBonus = 0;
var totalPossibleScore;

function start_seqs()
{
 //       alert("start_seqs");
        
        statisticsdiv = document.getElementById('tried_correct_statistics');
        number_seqs_containerdiv = document.getElementById("number_seqs_container");
        umdiv = document.getElementById("ns_ums");
        umdiv2 = document.getElementById("ns_msg2");
        umdiv3 = document.getElementById("ns_msg3");
 //       umdiv.style.className="nsm1";

 //       alert("done start_seqs");
}

function initialStartGame()
{

 //alert("initialStartGame");


  var textdiv = document.getElementById('intro_text');
  statisticsdiv.style.display="block";
  numcorrectdiv = document.getElementById('numcorrect_div');
  numtrieddiv = document.getElementById('numtried_div');

  textdiv.innerHTML='';
  textdiv.parentNode.removeChild(textdiv);

  setupStartStop();

  number_seqs_containerdiv.style.display="block";

  startGame();

  setStopStartBtns(false, true);
  var msgContent = 'OK, here is the first sequence:';
  umdiv.innerHTML=msgContent;
  umdiv.style.display="block";
  
}

function startGame()
{
//umdiv.innerHTML="";
//alert("startGame");
    setupSequence();
    doASeq();
    playing = true;
 //   reset_timer();
    start_timer();
    
//  ns_msg4div = document.getElementById("ns_msg4");
//  ns_msg4div.innerHTML=andescr + " ["+seqType+"] k="+k+" c="+c+" x="+x+" u="+u;
}

var qpos=4;
var entries = [1,2,3,4,5];
var alts = [6, 9, 10];   // the alternate answers besides entries[qpos];
var ansslot = 1;  // the OPTION # (0,1,2,3) where entries[qpos] will display;
var answers = [6, 5, 9, 10];

function doASeq()
{
    for (var i=0; i<5; i++)
    {
        if (i==qpos){
                doPopup();
        } else {
                var ndiv = document.getElementById("b"+i);
                ndiv.innerHTML=entries[i];
        }
    }
}

function doPopup()
{
    var qdiv = document.getElementById("b"+qpos);
    var ancontent = "q";

    var styletext = 'style="font-family: sans-serif; font-size: 1.05em; background:Gainsboro;"';
    ancontent = '<SELECT size="4" name="aslot" class="analogy_text" ' +
                     styletext + '  onclick="processSelection(); return false;">';

    for (var j=0; j < 4; j++){
      ancontent += '<OPTION>';
      ancontent += answers[j];
      ancontent += '</OPTION>';
    }
    ancontent += '</SELECT>';

    qdiv.innerHTML=ancontent;

}

function processSelection()
{
 //alert("processSelection");

    var qdiv = document.getElementById("b"+qpos);
    var sels = qdiv.getElementsByTagName('SELECT');
    var theSel = sels[0];
    var selIndex = theSel.selectedIndex;
//alert("selIndex="+selIndex+" theSel.v="+theSel.value);
	numTried++;
    numtrieddiv.innerHTML = numTried;
    
	qdiv.innerHTML=theSel.value;
    if (selIndex == ansslot){
      doCorrectItem();
    } else {
      doIncorrectItem(selIndex, theSel.value);
    }
	setupSequence();
    doASeq();
    
//    ns_msg4div = document.getElementById("ns_msg4");
//    ns_msg4div.innerHTML=andescr  + " ["+seqType+"] k="+k+" c="+c+" x="+x+" u="+u;
}

function doCorrectItem()
{
    numCorrect++;
    numcorrectdiv.innerHTML = numCorrect;

    var msgContent = "Good!\n";
    for (var i=0; i<5; i++) {
        msgContent += entries[i] + " ";
    }
    msgContent += " is correct!";
    umdiv.innerHTML= msgContent;
    var msgContent2 = "The nth term is given by: " + andescr;
    umdiv2.innerHTML= msgContent2;
    umdiv2.style.display="block";
    umdiv3.innerHTML="Here's the next sequence:";
    umdiv3.style.display="block";
}

function doIncorrectItem(selIndex, selval)
{
    var msgContent = "Sorry. ";
    for (var i=0; i<5; i++)
    {
        if (i==qpos){
                msgContent += selval +" ";
        } else {
                msgContent += entries[i] + " ";
        }
    }
    msgContent += " is not correct.";
    umdiv.innerHTML= msgContent;
    var msgContent2 = "The nth term is given by: " + andescr;
    umdiv2.innerHTML= msgContent2;
    umdiv2.style.display="block";
    umdiv3.innerHTML="Here's the next sequence:";
    umdiv3.style.display="block";
}


//var qpos=4;
//var entries = [1,2,3,4,5];
//var alts = [6, 9, 10];   // the alternate answers besides entries[qpos];
//var ansslot = 1;  // the OPTION # (0,1,2,3) where entries[qpos] will display;
//var answers = [6, 5, 9, 10];


var andescr="?";
var seqType=0;
	// For arithmetic seqs: a(n) = k*n + c;
var k = 1;    
var c = 0;
var x = 1;    // exponent for geometric seqs
var u = 1;


function setupSequence()
{
    chooseSeqType();
 //alert("sS: k="+k+" c="+c+" x="+x+" u="+u+" an="+andescr);
    for (var i=0; i<5; i++){
        entries[i] = compTerm(i);
    }
    setupAnswers();
}

function chooseSeqType()
{
	seqType = chooseSeqTypeNum(); //chooseInt(0, 4);
	chooseParameters();
	if (seqType==0){  // arithmetic: a(n) = k*n+c
		andescr = "a(n) = " + k + "*n + " + c;
	} else if (seqType==1) { // geometric: a(n) = k*u^n + c
		andescr = "a(n) = " + u+"^n"; //"a(n) = " + k + "*"+u+"^n + " + c;
	} else if (seqType==2) { // recursive diffs: a(n+1) - a(n) = k*n + c;
		andescr = "a(n+1) - a(n) = " + k + "*n + " + c + "; a(0)="+c;
	} else if (seqType==3) { // Fibbonacci: a(n+2) = a(n+1) + a(n) for n>2; a(2)=k; a(1)=c;
		andescr = "a(n+2)=a(n+1)+a(n) for n>2; a(2)="+k+"; a(1)="+c+" (Fibbonacci)";
	} else if (seqType==4) { // exponential: a(n) = n^x + c;
		andescr = "a(n) = n^"+x+" + " +c;
	}
}

function chooseParameters(){
    if (seqType==0){  // arithmetic: a(n) = k*n+c
        k=chooseInt(1,10);  c=chooseInt(0,14); 
    } else if (seqType==1) { // geometric: a(n) = k*u^n + c
    	/*k=chooseInt(1,10); c=chooseInt(0,10);*/ k=1; c=0; u = chooseInt(1,11);
    } else if (seqType==2) { // recursive diffs: a(n+1) - a(n) = k*n + c; a(0)=c;
    	k=chooseInt(1,10);  c=chooseInt(0,14); 
    } else if (seqType==3) { // Fibbonacci: a(n+2) = a(n+1) + a(n) for n>2; a(2)=c+k; a(1)=c;
    	k=chooseInt(0, 3);  c=chooseInt(0,4); 
    } else if (seqType==4) { // exponential: a(n) = n^x + c;
    	c=chooseInt(0,9); x = chooseInt(1,4);
    }
}

function compTerm(i)
{
	var res = 1;
    if (seqType==0){ // a(n) = k*n+c
        res = k * (i+1) + c;
    } else if (seqType==1) { // geometric: a(n) = k*u^n + c
        var tmp = u;
        for (var j=1; j<i+1; j++){
        	tmp = tmp*u;
        }
        res = k*tmp + c;
    } else if (seqType==2) { // recursive diffs: a(n+1) - a(n) = k*n + c; 
        if (i==0){
        	res = c;
        } else {
        	var rr = new Array();
        	rr[0] = c;
        	for (var j=1; j<i+1; j++){
        		rr[j] = rr[j-1] + k*j + c;
        	}
        	res = rr[i];
        }
    } else if (seqType==3) { // Fibbonacci: a(n+2) = a(n+1) + a(n) for n>2; a(2)=c+k; a(1)=c;
    	if (i==0){
    		res = c;
    	} else if (i==1){
    		res = c+k;
    	} else {
    		var rr = new Array();
    		rr[0] = c;
    		rr[1] = c+k;
    		for (var j=2; j<i+1; j++){
    			rr[j] = rr[j-1] + rr[j-2];
    		}
    		res = rr[i];
    	}
    } else if (seqType==4) { // exponential: a(n) = n^x + c;
        if (i==0){
            res = 1 + c;
        } else {
        	var tmp = i+1;
        	for (var j=0; j<x-1; j++){
        		tmp = tmp * tmp;
        	}
        	res = tmp + c;
        }
    } else {
        res = i+1;
    }
    return res;
}

function setupAnswers()
{
	ansslot = chooseInt(0,3);
    var u = [0,0,0];
    if (seqType==0){  // arithmetic: a(n) = k*n+c
        u[0] = compTerm(qpos); // seq val is a(qpos+1)
        if (u[0]==entries[qpos]){
            u[0]++;
        }
        if (k>1){
           u[1] = (k-1)*(qpos+1)+c;
        } else {
           u[1] = qpos + c +1;
        }
        while (u[1]==u[0] || u[1]==entries[qpos]){
        	u[1]++;
        }
        u[2] = qpos + k*qpos+c+3;
        while (u[2]==[0] || u[2]==u[1] || u[2]==entries[qpos]){
        	u[2]++;
        }
        var t0 = chooseInt(0,1)+1;
        var d = u[0];
        u[0] = u[t0];
        u[t0] = d;
    } else if (seqType>0){  // geometric: a(n) = k*u^n + c
        u[0] = compTerm(qpos); // seq val is a(qpos+1)
        if (u[0]==entries[qpos]){
            u[0]++;
        }
        u[1] = compTerm(qpos+2);
        while (u[1]==u[0] || u[1]==entries[qpos]){
        	u[1]++;
        }
        u[2] = compTerm(qpos+1) - 3;
        while (u[2]==[0] || u[2]==u[1] || u[2]==entries[qpos]){
        	u[2]++;
        }
        var t0 = chooseInt(0,1)+1;
        var d = u[0];
        u[0] = u[t0];
        u[t0] = d;
    }
    
    
    
    
    var h=0;
    for (var j=0; j<4; j++){
            if (j==ansslot){
                    answers[j] = entries[qpos];
            } else {
                answers[j] = u[h];
                h++;
            }
    }
}

	
function chooseInt(low, high)
{
    var range = (high+0.999999)-low;
    var rand=Math.floor(Math.random()*range);
    return rand;
}

function chooseSeqTypeNum()
{
    var range = 3 + 1 + 1 + 1 + 0.99999;
    var rand=Math.floor(Math.random()*range);
 	var rr = Math.random()*range;
//rr=3.2;
 	if (rr < 3){
 		return 0;
 	} else {
    	return Math.floor(rr - 2);
    }
}

function stopGame(){
    stop_play();
}

function stop_play()
{
//alert("stop_play");

    var cur_time = new Date();
    elapsed_time = cur_time.getTime() - start_time.getTime();
    stop_timer();
    var userNum = sbCookieData.usernum;
    var totalPossibleScore= numTried * correctItemFactor + allCorrectBonus;
    Record.recordNumCorrectPlusMovesWithMax(taskId, numTried, numCorrect, elapsed_time, totalPossibleScore, userNum);

    setStopStartBtns(true, false);
//alert("done stop_play");
}

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

function showInstructions()
{
    var ipath= "number-sequences-instructions";
    var entry_win=window.open(
                     ipath,
                     'Number_Sequences_Instructions',
                     'height=300,width=650');
}

// -->
