
	var hook_list = new Array();
	var ref_list = new Array();
	var text_list = new Array();

	var card_cursor = 0;
	var m_card_count= 0;
	
	var hook_val;
	var ref_val;
	var text_val;
	var hook_ans;
	var ref_ans;
	var text_ans;
	
	var hist = new Array();
	hist[0] = -1;
	hist[1] = -1;
	
	var random_order = new Array();
	var random_card_cursor;
	
	var verses = new Array();
	
	function show_hook(){document.getElementById("hook").innerHTML=hook_ans;}
	function show_ref(){document.getElementById("ref").innerHTML=ref_ans;}
	
	function show_hint() {
	  if (m_card_count < 1) {
	    alert("Please select assignments to review.");
	    return;
	  }

	  visible_ans = document.getElementById("text").innerHTML;

	  visible_ans = visible_ans.replace(/_/g, "");

	  if (visible_ans == "") {
	    visible_len = 0;
          } else {
	    visible_len = visible_ans.length;
	  }

	  ans_len     = text_ans.length;
	  cursor      = visible_len;
	  space_count = 0;
	  pre_cursor  = -1;

	  while (space_count < 2 && (cursor + 1) < (ans_len - 1) && cursor > pre_cursor) {
	    pre_cursor = cursor;
	    cursor = text_ans.indexOf(" ", cursor + 1);
	    space_count++;
	  }
	  
	  if (cursor < 1 || cursor >= (ans_len - 1)) {
	    cursor = ans_len;
	  }

	  new_hint = text_ans.substring(0, cursor);

	  document.getElementById("text").innerHTML=new_hint;
	}

	function show_text(){
	  if (m_card_count < 1) {
	  	alert("Please select assignments to review.");
	    return;
	  }
	  document.getElementById("text").innerHTML=text_ans;
	}
	
	function show_next_card(){
	
	  if (m_card_count < 1) {
	  	alert("Please select assignments to review.");
	    return;
	  }
	  
	  // track card history to control card duplication rates
	  hist[1] = hist[0];
	  hist[0] = card_cursor;
	  	
	  // manage random verses
	  if (document.getElementById("random").checked){
	    
	    card_count = hook_list.length;
	    
	    // build the random list of card references
	    if (random_card_cursor == m_card_count-1 || random_card_cursor == undefined)
	    {	      
	      // create ordered list
	      for (i=0; i<=m_card_count-1; i++){
	        random_order[i] = i;
	      }
	      
	      // mix it up
	      for (i=0; i<=m_card_count-1; i++){
	        rnd = Math.floor(Math.random() * (m_card_count-1));
	        
	        val = random_order[i];

	        random_order[i] = random_order[rnd];
	        random_order[rnd] = val;
	      }
	      	      
	      // set cursor
	      random_card_cursor = 0;
	      card_cursor = random_order[random_card_cursor];
	      
	      // do not allow back-to-back repeat cards
	      if (card_cursor == hist[0]){
	        random_card_cursor++;
	        card_cursor = random_order[random_card_cursor];
	      }
	      
	    } else {
	      // increment random cursor
	      random_card_cursor++;
	      card_cursor = random_order[random_card_cursor];
	    }

	  } else {  // manage non-random verses
	  
	    // increment cursor
	    card_cursor++;	    
	  }
		
	  if (card_cursor == m_card_count) {
	    card_cursor = 0;
	  }

	  if (document.getElementById("hook_hide").checked){
	    hook_val = "_______________";
	  } else {
	    hook_val = verses[hook_list[card_cursor]];
	  } 
	  hook_ans = verses[hook_list[card_cursor]];
	  
	  if (document.getElementById("ref_hide").checked){
	    ref_val = "_______________";
	  } else {
	    ref_val = verses[ref_list[card_cursor]];
	  } 
	  ref_ans = verses[ref_list[card_cursor]];
	  
      // check Bible version	  
	  if (document.getElementById("NASB").checked) {
	    verse_text_nbr = 3;	    
	  } 
	  else if (document.getElementById("ESV").checked) {
	    verse_text_nbr = 4;	    
	  }
	  else if (document.getElementById("NIV").checked) {
	    verse_text_nbr = 5;	    
	  }
	  else if (document.getElementById("NLT").checked) {
	    verse_text_nbr = 6;
          }
	  else if (document.getElementById("NAS").checked) {
	    verse_text_nbr = 7;	    
	  }

      // update verse text index to reflect chosen Bible version
      nbr1 = text_list[card_cursor];
      str1 = nbr1.toString();
      len1 = str1.length;
      str1 = str1.substring(0,len1 - 1) + verse_text_nbr;
      text_list[card_cursor] = str1;
	  
	  if (document.getElementById("text_hide").checked){
	    text_val = "____________________";
	  } else {
	    text_val = verses[text_list[card_cursor]];
	  } 
	  text_ans = verses[text_list[card_cursor]];
	  	  
	  document.getElementById("hook").innerHTML = hook_val;
	  document.getElementById("ref").innerHTML = ref_val;
	  document.getElementById("text").innerHTML = text_val;
	  document.getElementById("user_text").value = "";
	}

    function update_version_text() {
      // check Bible version	  
	  if (document.getElementById("NASB").checked) {
	    verse_text_nbr = 3;	    
	  } 
	  else if (document.getElementById("ESV").checked) {
	    verse_text_nbr = 4;	    
	  }
	  else if (document.getElementById("NIV").checked) {
	    verse_text_nbr = 5;	    
	  }
	  else if (document.getElementById("NLT").checked) {
	    verse_text_nbr = 6;	    
	  }
	  else if (document.getElementById("NAS").checked) {
	    verse_text_nbr = 7;	    
	  }

      // update verse text index to reflect chosen Bible version
      nbr1 = text_list[card_cursor];
      str1 = nbr1.toString();
      len1 = str1.length;
      str1 = str1.substring(0,len1 - 1) + verse_text_nbr;
      text_list[card_cursor] = str1;
	  
	  if (document.getElementById("text_hide").checked){
	    text_val = "____________________";
	  } else {
	    text_val = verses[text_list[card_cursor]];
	  } 
	  text_ans = verses[text_list[card_cursor]];
	  	  
	  document.getElementById("text").innerHTML = text_val;
    }
	
	function build_list() {
	  
	  var assign = new Array();
	  	  
	  // continue on...
	  assign[1] = document.getElementById("a1").checked;
	  assign[2] = document.getElementById("a2").checked;
	  assign[3] = document.getElementById("a3").checked;
	  assign[4] = document.getElementById("a4").checked;
	  assign[5] = document.getElementById("a5").checked;
	  assign[6] = document.getElementById("a6").checked;
	  assign[7] = document.getElementById("a7").checked;
	  assign[8] = document.getElementById("a8").checked;
	  assign[9] = document.getElementById("a9").checked;
	  assign[10] = document.getElementById("a10").checked;
	  assign[11] = document.getElementById("a11").checked;
	  assign[12] = document.getElementById("a12").checked;
	  assign[13] = document.getElementById("a13").checked;
	  assign[14] = document.getElementById("a14").checked;
	  assign[15] = document.getElementById("a15").checked;
	  
	  if (!assign[1] && !assign[2] && !assign[3] && !assign[4] && !assign[5] && !assign[6] && !assign[7] && !assign[8] && !assign[9] && !assign[10] && !assign[11] && !assign[12] && !assign[13] && !assign[14] && !assign[15]){
	    alert("Please select assignments to review.");
	    return;	  
	  }  

	  var version = new Array();
	  
	  version[1] = document.getElementById("NASB").checked;
	  version[2] = document.getElementById("ESV").checked;
	  version[3] = document.getElementById("NIV").checked;
	  version[4] = document.getElementById("NLT").checked;
	  version[5] = document.getElementById("NAS").checked;

	  if (!version[1] && !version[2] && !version[3] && !version[4] && !version[5]) {
	    alert("Please select a version of the Bible.");
	    return;	  
	  }
	  // reset cursors
	  m_card_count = 0;
	  card_cursor = 0;

      // assign cards
	  for (i=1; i<=15; i++){       // for each assignment
	    if (assign[i] == true) {   // if checked
	      
	      for (j=1; j<=verses[i]; j++) {   // add all verses for this assignment
	        
	        num = (i * 100) + (j * 10) + 1;
	        
	        hook_list[card_cursor] = num; num++;
	        ref_list[card_cursor] = num;  num++;
	        text_list[card_cursor] = num; 
	        
	        card_cursor++; m_card_count++;
	      }
	    }
	  }

	  // reset the extra cards
	  card_count = hook_list.length;
	  
	  for (i=m_card_count+1; i<=card_count-1; i++){
	    hook_list[i] = undefined;
	    ref_list[i] = undefined;
	    text_list[i] = undefined;
	  }
	  
	  // reset the card cursor
	  card_cursor = -1;
	  random_card_cursor = undefined; // required to reset random cards
	  show_next_card();
	}
	
	
