
//GLOBAL VARIABLES

var challenge = "kan_eng";	//kan_eng, eng_kan, kan_kana, eng_kana
var compound = false;
var level = "beg";		//beg, int, adv, all
var numproblems = 10;		//10, 25, 100
var numanswers = 3;		//3, 6, 10

var answer;
var answerindex;
var correctanswer;
var correctanswerindex;

var current;
var type;

var start_kanji;
var end_kanji;

var attempted;
var numcorrect;


//GLOBAL ARRAYS

challengearray = new Array();  //[english of kanji word, index in kanji array, is used]
answerarray = new Array();     //[a correct or incorrect answer, index in kanji array]

//FUNCTIONS ==========================================================

//THE FOLLOWING SIX FUNCTIONS ARE HERE BECAUSE I COULD NOT SEEM TO 
//READ THESE VARIABLES FROM THE HTML-PAGE FORM LIKE USUAL 
//(using document.form.level.value for example)

function setnumanswers(x) {
  numanswers = x;
}
function setnumproblems(x) {
  numproblems = x;
}
function setlevel(x) {
  level = x;
}
function setchallenge(x) {
  challenge = x;
}
function switchcompound() {
  compound = !compound;
}

//-----------------------------------------------------------
//WHEN YOU CLICK ON AN ANSWER (IN A SPAN) THIS FUNCTION ASSIGNS THE 
//CLICKED ANSWER INTO 'answer' WHICH IS LATER COMPARED TO 'correctanswer'

function setanswer(val) {
    
  //RETURN ANY PREVIOUS GUESSES TO BLACK TEXT
  if (answer != "" && answerindex != 0)  {
      document.getElementById(answerindex).innerHTML = answer;
  }
 
  //CHANGE ANSWER (AND ANSWERINDEX) TO NEW GUESS AND COLOR GUESS RED
  answerindex = val;

  answer = document.getElementById(answerindex).innerHTML;
  document.getElementById(answerindex).innerHTML = "<font color='#CC0000'>" + document.getElementById(answerindex).innerHTML + "</font>"
}


//-----------------------------------------------------------
//THIS FUNCTION CREATES THE CHALLENGES (THE SINGULAR ENGLISH,
//KANA OR KANJI THAT WE ROTATE THROUGH TO TEST THE USER)

function createChallengeArray() {

  var i, j, k;

  // CREATING AN ARRAY OF RANDOM VALUES WITHIN A LEVEL FROM THE KANJI ARRAY
  i = 1;
  while (i <= numproblems) {
    //J: A NUMBER IN BETWEEN START AND END FOR CORRECT LEVEL
    j = ( Math.floor((Math.random() * 3500) % (end_kanji-start_kanji)) ) + start_kanji;  
    k = 1;
    while (k < i) {
      if (challengearray[k][1] == j) {
	   j = ( Math.floor((Math.random() * 4500) % (end_kanji-start_kanji)) ) + start_kanji;  
        k = 0;
      }
      k++;
    }

    //THE IMPORTANT CALL:
    challengearray[i] = new Array(kanji[j][type],j,false);   //array(actual word, index in kanji array, used)
    i++;
  }
}

//-----------------------------------------------------------
//THIS IS THE COLUMN OF ANSWERS
//THE ANSWER ARRAY IS array(answer guess text, index in kanji[] array)

function createAnswerArray() {

  var i, j, k;
  var x;
  var type_a;

  //IF ANSWERS ARE IN ENGLISH OR KANJI, GET RANDOM ANSWER FROM SAME SECTION
  if (challenge == "kan_eng")
    type_a = 1; // ENGLISH ANSWERS
  else if (challenge == "eng_kan")
    type_a = 0; // KANJI ANSWERS
  else
    type_a = 3; // KANA ANSWERS


  if (type_a < 3) { //IF KANJI OR ENGLISH

    //GET A RANDOM VALUE FROM 1 - NUMANSWERS 

    x = Math.floor( (Math.random()*36513) % (numanswers-1) ) + 1;

    //CREATE THE ARRAY ELEMENT WITH THE CORRECT ANSWER IN A RANDOM SPOT
    correctanswerindex = x;
    correctanswer = kanji[challengearray[current][1]][type_a];
    answerarray[correctanswerindex] = new Array(correctanswer,challengearray[current][1]);

    //PUT RANDOM MEANING FROM SAME LEVEL INTO ARRAY (EXCEPT FOR CORRECT ONE)
    for (i = 1; i <= numanswers; i++) { 
     
      if (i != correctanswerindex) {
        j = ( Math.floor(Math.random() * 257 % (end_kanji-start_kanji)) ) + start_kanji;
        for (k = 1; k < i; k++) {
          if (j == answerarray[k][1] || j == answerarray[correctanswerindex][1]) {
            j = ( Math.floor(Math.random() * 261 % (end_kanji-start_kanji)) ) + start_kanji;
            k = 0;
          }        
        }
        //MAKE SURE ANSWER ISN'T IN FIRST ONE
        while (j == answerarray[correctanswerindex][1])
          j = ( Math.floor(Math.random() * 250 % (end_kanji-start_kanji)) ) + start_kanji;
        
        answerarray[i] = new Array(kanji[j][type_a],j);
      }
    }
  }

  //----//

  //ELSE ANSWERS WILL BE IN KANA, SO USE KANA ALTERNATE READING CHART

  else {

    // SINCE THERE ARE MULTIPLE READINGS, FIRST FIND OUT HOW MANY
    // THERE ARE THEN PICK A RANDOM ONE
    i = 2;
    while (kanji[challengearray[current][1]][i])
      i++;

    //NOW "i" - 2 SHOULD HAVE THE NUMBER OF READINGS AVAILABLE

    //(NOTE: mod (%) reads from 0 to shown number... I need one less than that usually)

    if (i >= 3)
      type_a = 2;
    else
      type_a = Math.floor( (Math.random()*2500) % (i-2)) + 2;

    //GET A RANDOM VALUE FROM 1 - NUMANSWERS (the +1 is cause we are skipping 0) 

    x = Math.floor( (Math.random()*3550) % (numanswers) ) + 1;

    //CREATE THE ARRAY ELEMENT WITH THE CORRECT ANSWER IN A RANDOM SPOT

    correctanswerindex = x;
    correctanswer = kanji[challengearray[current][1]][type_a];
    answerarray[correctanswerindex] = new Array(correctanswer,challengearray[current][1]);

    for (i = 1; i <= numanswers; i++) { 
     
      if (i != correctanswerindex){
        //GETTING A LIST FROM THE 'WRONG' ARRAY "i-1" BECAUSE ARRAY STARTS AT 0
        answerarray[i] = new Array(wrong[challengearray[current][1]][i-1],i);
      }
    }
  }

  //DISPLAY RESULTS
  for (j = 1; j <= numanswers; j++) {
    document.getElementById(j).innerHTML = answerarray[j][0];
    if (j >= 3 && j != 10)
      document.getElementById("br"+j).innerHTML = "<font size='1'><br>&nbsp;<br></font>";
  }
}

//-----------------------------------------------------------

//THIS FUNCTION STARTS THE CHALLENGE BASED OFF THE SETTINGS

function begin() {

  //RESET VARIABLES 
  start_kanji = 1;
  end_kanji = 1;

  current = 1;
  type = 0;

  attempted = 0;
  numcorrect = 0;

 //DELETE CHALLENGE ARRAY ELEMENTS IF THEY EXIST:
 if (challengearray[1]) {
   var q = 1;
   while (challengearray[q]) {
     delete challengearray[q]
     q++;
   }
 }   

 //DELETE ANSWER ARRAY ELEMENTS IF THEY EXIST
 if (answerarray[1]) {
   var q = 1;
   while (answerarray[q]) {
     delete answerarray[q]
     q++;
   }
 } 
 

  //DETERMINE TYPE

  if (challenge == "kan_eng" || challenge == "kan_kana")
    type = 0; //KANJI
  else if (challenge == "eng_kan" || challenge == "eng_kana")
    type = 1; //ENGLISH

  //DETERMINE WHERE IN THE KANJI ARRAY THE LEVEL GOES
  if (level == "adv") {
    //IF COMPOUND
    if (compound) {
      start_kanji = advcom_start;
      end_kanji = total_com;
    }
    else {
      start_kanji = adv_start;
      end_kanji = total;
    }
  }
  else if (level == "int") {
    //IF COMPOUND
    if (compound) {
      start_kanji = intcom_start;
      end_kanji = advcom_start - 1;
    }
    else {
      start_kanji = int_start;
      end_kanji = adv_start - 1;
    }
  }
  else if (level == "beg") {
    //IF COMPOUND
    if (compound) {
      start_kanji = begcom_start;
      end_kanji = intcom_start - 1;
    }
    else {
      start_kanji = beg_start;
      end_kanji = int_start - 1;   
    }
  }
  else if (level == "easy") {
    //IF COMPOUND
    if (compound) {
      start_kanji = easycom_start;
      end_kanji = begcom_start - 1;
    }
    else {
      start_kanji = 1;
      end_kanji = beg_start - 1;   
    }
  }
  //ELSE IF ALL KANJI IN THAT GROUP
  else {
   //IF COMPOUND
    if (compound) {
      start_kanji = begcom_start;
      end_kanji = total_com;
    }
    else {
      start_kanji = 1;
      end_kanji = total;
    }
  }


  //GO!
  createChallengeArray();
  next();
}

//-----------------------------------------------------------

function next() {

  //CLEAR OUT SPANS
  for (i = 1; i <= 10; i++) {
    document.getElementById(i).innerHTML = "";
    if (i >= 3  && i < 10)
      document.getElementById("br"+i).innerHTML = "";
  }


  //RESET VARIABLES
  answer = "";
  answerindex = 0;
  correctanswer = "";
  correctanswerindex = 0;

  document.getElementById("result").innerHTML = "";

  document.getElementById("main_challenge").innerHTML = challengearray[current][0];

  createAnswerArray();

  //CHANGE BUTTON FROM 'NEXT' to 'CHECK'
  document.getElementById("checkbutton").innerHTML = "<input onclick='check()' type='button' value='Check Answer'>";

}

//-----------------------------------------------------------

function done() {

  var percent = Math.floor( ((numcorrect+0.0)/(attempted+0.0)) * 100 ); 

  if (percent == 100) 
    document.getElementById("main_challenge").innerHTML = "<font color=#CC0000>Your score: " + percent + "% PERFECT!</font>";
  else if (percent < 100 && percent > 80)
    document.getElementById("main_challenge").innerHTML = "<font color=#CC0000>Your score: " + percent + "%  Great Job!</font>";
  else if (percent < 80 && percent > 60)
    document.getElementById("main_challenge").innerHTML = "<font color=#CC0000>Your score: " + percent + "%  Not Bad!</font>"; 
  else
    document.getElementById("main_challenge").innerHTML = "<font color=#CC0000>Your score: " + percent + "%  Keep working at it!</font>"; 

    document.getElementById("checkbutton").innerHTML = "<input onclick='begin()' type='button' value='Begin Again?'>";

}

//-----------------------------------------------------------

function donechallenge() {

  var i = 1;
  var ret = true;
  while (i <= numproblems) {
    if (challengearray[i][2] == false)
      ret = false;
    i++;
  }
  return ret;
}

//-----------------------------------------------------------

function check() {

  var i;

  attempted++;

  //MAKE CORRECT TEXT GREEN (WHETHER RIGHT OR WRONG)
  document.getElementById(correctanswerindex).innerHTML = "<font color='#00CC00'>" + correctanswer + "</font>";

  if (answer == correctanswer) {
 
    //SET USED TO TRUE AND ADD TO CORRECT
    document.getElementById("result").innerHTML = "<font color='#00CC00'>Correct! Good job!</font>";
    challengearray[current][2] = true;
    numcorrect++;
  }
  //ELSE IF ANSWER IS WRONG
  else { 
    document.getElementById("result").innerHTML = "<font color='#CC0000'>Nope. Check again.</font>";
  }


  //GET THE CORRECT VALUE FOR "CURRENT" FOR THE NEXT TIME AROUND
  if (!donechallenge()) { //IF SOME ARE STILL NOT CORRECTLY DONE  
    current++;
    if (current > numproblems)
      current = 1; 
    i = 1; 
    while (challengearray[current][2] == true && i <= numproblems) {
      current++;
      if (current > numproblems)
        current = 1;
      i++
    }

//alert("current is now " + current);

  //RESET VARIABLES
  answer1 = "";
  answer1index = 0;
  correctanswer1 = "";
  correctanswer1index = 0;

    document.getElementById("checkbutton").innerHTML = "<input onclick='next()' type='button' value='Next'>";
  }
  else {
    document.getElementById("checkbutton").innerHTML = "<input onclick='done()' type='button' value='Done!'>";
  }
}


