// ## xtd:  Ondersteunt de namen raden functie ##
// ## xtd2: Ondersteunt weergave antwoorden: * extra id "questionsection" in parent html file, 
// ##       * Dynamische opbouw aantalVragen Select tag (options tags van aantalVragen Select tag uit parent html file.)
// ## xtd3: Ondersteunt spellingscontrole variatie
// ## xtd4 : Ondersteunt afdrukken oefenexemplaar (afbeelding + namen)
// ## xtd4a: Ondersteunt selectbox met samengestelde karakters.
// ## xtd4b: Ondersteunt meerdere plaatsnamen per item (gescheiden door ; )
// ##				 (4a->4b geen aanpassen in parent;)
// ## xtd4b2:Ondersteunt opnieuw starten met behoud van vorige instellingen (geen harde reset).
// ##        20091008 added: wisselen van moeilijkheidsgraad omhoog (A->B etc) geen herstart.
// ##        > aanpassing in Body tag: init(false); rest init(true).
// ## xtd4c: Ondersteunt unicode unicode karakterset ivm speciale aanvullende tekens (opslaan als unicode!)
// ## xtd5 : Ondersteunt extra lokatie tag in naam gescheiden door "<spatie>(tag)". Geen wijzigingen in parent html doc nodig.
// ## xtd6 : Ondersteunt moeilijkheidsniveau ook als losse selectie, dus A, B, C, AB, en ABC.
//           Aanpassingen in parent: array naam arrAantalInNiveau->arrNiveauPositie, in body tag init()->init(false),
//           SELECT name="level" onChange="setMoeilijkheidsNiveau(this.form)->...setMoeilijkheidsNiveau(document.forms['flevel'].level);"
//           4->6:Wil je nu opnieuw beginnen met Naam raden?')) init()" -> init(true)
//           4->6:Wil je nu opnieuw beginnen met Plaats aanwijzen?')) init(true) -> init(true)
//           4->6:Wil je echt opnieuw beginnen?')) init()" -> init(true)

var sVersion = 'v06.00.00'; // deze ophogen, komt onderaan in pagina
var bgcolorDefault = '#FFFFFF';
var bgcolorOK      = '#33CC00';
var bNaamraden;      // Naamraden (true) of Plaatsaanwijzen (false)
var iNiveauItems;    // actuele aantal items zoals geselecteerd (incl. gecombineerd zoals A+B).
var arrAantalInNiveau = new Array(); // per niveau 1..5 aantal lokaties.
var arrAlGevraagd;   // de gestelde vragen (true of false)
var arrAntwoorden;	 // de ingevoerde antwoorden (string met itemnr (aanwijzen) of naam (naamraden)).
var iAantalVragen;   // aantal te stellen vragen
var bsSpelLevel;     // spellingscontrole niveau (bitwise string)
var iItemNr;         // betreffend plaats in array met topo items
var iPunten;         // aantal goed beantwoorde vragen
var iVragen;         // aantal gestelde vragen
var iLevel;          // moeilijkheidsniveau (1, 2 of 3, ...)
var arrTopoItems   = new Array();
var oaV;             // select form aantalvragen tbv uitlezen/zetten waarden
var omN;             // select form moeilijkheids niveau tbv uitlezen/zetten waarden


// deze functie wordt niet aangeroepen, alleen gebruikt in editor als inhoudsopgave.
function dummyIndex() {
	test();
	validateInput();        //(arg1)
	validateAanwijzen();    //(sInput, sAnswer)
	
	suppressSpecialChars(); // (sInput, bitLevel)
	
	initMoeilijkheidsNiveau()
	setMoeilijkheidsNiveau() // (form)
	
	initSpelLevel();			// (bShow)
	initSpelLevelAntwoorden();
	getSpelLevel();         // (form)
	setSpelLevel();         // (form)
	
	setLevel();             // (iLevel)
	initAantalVragen();
	setAantalVragen();      // (form)
	
	geefAntwoorden();       // (bEersteGeefAntwoorden)
	terugNaarVragen();
	
	setHelpteksten();       // (ElementById)

	setSpecialCharsHtml();  // generates html for select tag specials chars options
	
	init(true/false);				// initialiseert alle instellingen. reset=true alles nog uitgangspositie, reset=false: niet de waarden resetten.
	
	getSelectedOption();    // (form)
	submitenter();          // (myfield,e)
	findLocation();         // (lokatieId)
	
	oefenbladAfdrukken();		// 
}

function test() {
	var sTxtVraag;     // gebruikt voor naamraden of plaatsaanwijzen tekst
	var rnd;
	var niveauPositieOffset;
	
	// ophogen waarden volgende vraag
	iVragen++;
	document.getElementById('vak').style.background = bgcolorDefault;
	document.getElementById('doorgaan').disabled = true;
	document.getElementById('txtAntwoord').innerHTML = "&nbsp;<BR>&nbsp;<BR>&nbsp;";
	document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + iVragen;
	document.getElementById('txtPunten').innerHTML = "Punten: " + iPunten +
						(iVragen > 1 ? "&nbsp;&nbsp;&nbsp;<button id=\"antwoorden\" onclick=\"geefAntwoorden(true)\" title=\"Geef overzicht van je antwoorden\">&nbsp;tussenstand&nbsp;</button>" : "");

	// kies volgende plaats
	//iItemNr = rand(iNiveauItems);
	// todo: nog een loopdetectie in plaatsen.

	//iItemNr = rand(iNiveauItems) + (iLevel <= 3 ? arrNiveauPositie[iLevel - 1] : 0); // kiest ook 1 te hoog!!

	rnd = Math.floor(Math.random() * iNiveauItems);
	niveauPositieOffset = (iLevel <= 3 ? arrNiveauPositie[iLevel - 1] : 0);
	iItemNr = (rnd+1) + niveauPositieOffset; // 1 exra optellen, want lokatie 0 in array is leeg en max wordt niet gekozen met random.floor functie kiest 0..max-1.

	/*
	while (arrAlGevraagd[iItemNr]) { // zoek volgende als al gevraagd  (=true)
		iItemNr++;
		if (iItemNr > (iNiveauItems + arrNiveauPositie[iLevel - 1])) {
		  iItemNr = 1 + arrNiveauPositie[iLevel - 1]; // einde van array set naar begin
		}
	}
	*/
	while (arrAlGevraagd[iItemNr]) { // zoek volgende als al gevraagd  (=true)
	  iItemNr++;
	  if ( iItemNr > (iNiveauItems + niveauPositieOffset) ) {
	    //iItemNr = 1 + arrNiveauPositie[iLevel - 1]; // einde van array set naar begin - OUD - verkeerd.
	      iItemNr = 1 + niveauPositieOffset; 
	  }
	}


	arrAlGevraagd[iItemNr] = true;
	//alert('iItemNr=' + iItemNr);

	// stel vraag
	sTxtVraag = '';
	//alert(bNaamraden);
	if (bNaamraden) {
		//alert(bNaamraden)
		sTxtVraag += 'Wat is nummer <B>' + arrTopoItems[iItemNr][1] + '</B>:<!--BR-->';
		sTxtVraag += '<FORM name="naamraden" id="naamraden">';
		// ORG: sTxtVraag += '<INPUT name="plaatsnaam" type="text" size="35" maxlength="40">';
		sTxtVraag += '<INPUT name="plaatsnaam" id="plaatsnaam" type="text" size="30" maxlength="50" onKeyPress="return submitenter(this,event)">';
		sTxtVraag += setSpecialCharsHtml();
		sTxtVraag += '<BUTTON id="testnaam" onclick="return submitButton(this,event)" title="Controleer antwoord">&nbsp;?&nbsp;</button>';
		sTxtVraag += '</FORM>';
	} else {
		sTxtVraag += 'Wijs aan: <SPAN class="txtPlaats">' + arrTopoItems[iItemNr][0].split(";")[0] + '</SPAN>';
	}
	document.getElementById('txtVraag').innerHTML = sTxtVraag;
	document.getElementById('opnieuw').disabled = false;
	if (bNaamraden) {
		// focus hieronder gaat alleen goed als ik een alert doe (maar altijd wel na een goed antwoord:-((;
		document.getElementById('naamraden').plaatsnaam.focus(); // werkt nog niet
	}
}

function validateInput(arg1) {
	// alleen valideren bij Aanwijzen
	// of Naamraden met als invoer een naam met een lengte > 1 (a..z onderdrukken)
	// Onderdrukt niet 'II' en hoger ) om te voorkomen dat namen met lengte 2 worden onderdrukt.
	// Onderdrukt ook input naamraden welke begint met een cijfer, zoals 9peize.
	//alert('validate');
	
	var bAntwInArray;
	suppressIntroText(); // onderdruk de introductie-keywords tekst met lokaties ivm afkijken.
	
	if ( !bNaamraden 
			 || ( bNaamraden && isNaN(parseInt(arg1)) && arg1.length > 1 )
		 )
	{
		//alert('validateInput(' + arg1 + '), iItemNr=' + iItemNr); // test purposes
		if (document.getElementById('doorgaan').disabled == false) return;
		if (bNaamraden) {
			document.forms['naamraden'].plaatsnaam.disabled = true;
		}
		//alert('arg1 ==  arrTopoItems[' + iItemNr + '][1] \n' + arg1 + '    ==     ' + arrTopoItems[iItemNr][1]);
		arrAntwoorden[iItemNr] = arg1;

		bAntwInArray = false;
		//alert('arrTopoItems[iItemNr][0].split(";").length=' + arrTopoItems[iItemNr][0].split(";").length);
		for (var j=1; j<=arrTopoItems[iItemNr][0].split(";").length; j++ ) {
			if (   (  bNaamraden && ( suppressSpecialChars(arg1, bsSpelLevel).toString() == suppressSpecialChars(arrTopoItems[iItemNr][0].split(";")[j-1].split(" (")[0], bsSpelLevel).toString() ) )
				|| ( !bNaamraden && validateAanwijzen(arg1, arrTopoItems[iItemNr][1]) ) ) bAntwInArray = true;
			//alert('arrTopoItems[iItemNr][0]='+arrTopoItems[iItemNr][0]);
			//alert( suppressSpecialChars(arg1, bsSpelLevel).toString() + '==' + suppressSpecialChars(arrTopoItems[iItemNr][0].split(";")[j-1], bsSpelLevel).toString() );
		}		
		if (bAntwInArray) {
			//alert('OK');
			document.getElementById('vak').style.background = bgcolorOK;
			document.getElementById('txtAntwoord').innerHTML = "<BR><SPAN class=txtAntwoordAntw>Goed zo!</SPAN><BR>&nbsp;";
			document.getElementById('txtVraag').innerHTML = "<B>" + arrTopoItems[iItemNr][0].split(";")[0] + "</B>";
			iPunten++;
			document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + iVragen;
			document.getElementById('txtPunten').innerHTML = "Punten: " + iPunten + 
				"&nbsp;&nbsp;&nbsp;<button id=\"antwoorden\" onclick=\"geefAntwoorden(true)\" title=\"Geef overzicht van je antwoorden\">&nbsp;tussenstand&nbsp;</button>";
			document.getElementById('doorgaan').disabled = false;
			document.getElementById('opnieuw').disabled = true;
		} else {
			var sFout = "<SPAN class=txtAntwoordText>Fout, dit was</SPAN><BR><SPAN class=txtAntwoordAntw>";
			if (!bNaamraden) {
				//alert('NOK');
				var gevonden = false;
				// Uitzoeken welk array item werd geselecteerd ?
				//for (var n=0; (n <= iTotalItems && !gevonden); n++) {
				for (var n = 0; (n <= arrNiveauPositie[3] && !gevonden); n++) {
					if (arrTopoItems[n][1] == arg1) gevonden = true;
				}
				//alert('n=' + n);
				// todo: dubbele code opschonen in if lus :-(
				//alert(sFout);
				sFout += arrTopoItems[n-1][0].split(";")[0];
			}	else {
				sFout += arrTopoItems[iItemNr][0].split(";")[0];
			}
			//alert(sFout);
			sFout += "<BR><SPAN class=txtAntwoordText>Probeer volgende!</SPAN>";
			//alert(sFout);
			document.getElementById('txtAntwoord').innerHTML = sFout;
			document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + iVragen;
			document.getElementById('txtPunten').innerHTML = "Punten: " + iPunten +
								"&nbsp;&nbsp;&nbsp;<button id=\"antwoorden\" onclick=\"geefAntwoorden(true)\" title=\"Geef overzicht van je antwoorden\">&nbsp;tussenstand&nbsp;</button>";
			document.getElementById('doorgaan').disabled = false;
			document.getElementById('opnieuw').disabled = false;
		}
		// controleer of max aantal vragen is gesteld (of aantal elementen op basis van niveau
		//iAantalVragen = 4; // moet worden uitgecommentarieerd is nl. alleen voor testdoeleinden!
    if (iVragen >= iAantalVragen || iVragen >=iNiveauItems ) {
			alert('Je hebt alle vragen beantwoord!');
			document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + 
				iVragen + ". <span style=\"background-color:yellow\">Je bent klaar!</span>";
			document.getElementById('doorgaan').disabled = true;
			document.getElementById('opnieuw').disabled = false;
			geefAntwoorden(true); // laat de eindscore zien.
		}
		else {
			document.getElementById('doorgaan').focus();
		}
	}
}

// Deze functie controleert ingevoerde anwoord met correct anwoord in geval van Plaats aanwijzen.
// Hierbij geen spellingscontrole en daarmee conversie nodig.
function validateAanwijzen(sInput, sAnswer) {
	return (sInput == sAnswer);
}

// deze functie onderdrukt de inleidende tekst met keywords welke alleen tot de start van
// de test mag worden getoond ivm afkijken. Wordt aangeroepen in ValidateInput()
function suppressIntroText() {
	if (document.getElementById('introkeytekst').innerHTML.length > 0) {
		 document.getElementById('introkeytekst').innerHTML = '';
	}
}

// Deze functie converteert een inputstring naar een outputstring obv gewenste onderdrukking van speciale karakters.
// Dit wordt gebruikt bij Naamraden.
// De mogelijke spellingscontrole levels worden bitwise vastgelegd
// xxx: bitwise
// 1  : controleren op correcte gebruik van hoofdletters.
//  1 : controleren op correct gebruik van leestekens, zoals -,'<spatie>
//   1: controleren op correct gebruik van gecombineerd unicode karakters, zoals éëèñ
// voorbeeld: de waarde 011 zal niet niet hoofdletters controleren maar wel op correct gebruik van leestekens en samengestelde karakters.
//            de waarde 000 zal nergens op controleren, dus alles converteren.
function suppressSpecialChars(sInput, bitLevel) {
	var osInput = new String(sInput);
	//var osBitLevel;
	var i, sChar;
	var sConverted100 =''; // resulterende tmp string na lowercase conversie
	var sConverted010 =''; // resulterende tmp string na leestekens conversie
	var sConverted001 =''; // resulterende tmp string na karakter conversie
	var sConverted    =''; // resulterende final string na karakter conversie

	//alert('sInput=' + osInput + ', bitLevel=' + bitLevel); // [dev]
	//for (i=0; i<osInput.length; i++) {
	//	sTmp += osInput.charCodeAt(i) + ' ';
	//}

	// 010 : leestekens e.d onderdrukken ?
	//alert('010 (leestekens): ' + bitLevel + ' + 010 = ' + (bitLevel & '010')); // [dev]
	if ( (bitLevel & '010') == '000' ) {
		for (i=0; i<osInput.length; i++) {
		
			//alert('charCodeAt(' + i + ')=' + osInput.charCodeAt(i));
			switch (osInput.charCodeAt(i)) {
				// leestekens: <spatie>:32, ":34, &:38, ':39, ,:44, -:45, .:46 
				case 32: case 34: case 38: case 39: case 44: case 45: case 46:
					sChar = '';
					break;		
	
				default: // geen special karakter om te vervangen.
					sChar = osInput.charAt(i);
			}
			//alert('sChar=' + sChar);
			sConverted010 += sChar;
		}
		//alert('sConverted010 = ' + sConverted010); // [dev]
		osInput = sConverted010;
	}

	// 001 :  samensgestelde karakters onderdrukken
	//        belangrijkste: á acute, ç cedilla, ê circumflex, ò grave, ñ tilde, ü umlaut
	//alert('001 (karakters): ' + bitLevel + ' + 001 = ' + (bitLevel & '001')); // [dev]
	if ( (bitLevel & '001') == '000' ) {
		for (i=0; i<osInput.length; i++) {
			//alert('charCodeAt(' + i + ')=' + osInput.charCodeAt(i)); // [dev]
			switch (osInput.charCodeAt(i)) {
				// a varianten: à:224, á:225, â:226, ã:227, ä:228, å:229, æ:230 )
				case 224: case 225: case 226: case 227: case 228: case 229: case 230:
					sChar = 'a';
					break;
				// A varianten: À:192, Á:193, Â:194, Ã:195, Ä:196, Å:197, Æ:198 
				case 192: case 193: case 194: case 195: case 196: case 197: case 198:
					sChar = 'A';
					break;
				// b varianten: ß:223
				case 223:
					sChar = 'b';
					break;
				// c varianten: ç:231
				case 231:
					sChar = 'c';
					break;
				// C varianten: Ç:199
				case 199:
					sChar = 'C';
					break;
				// e varianten: è:232, é:233, ê:234, ë:235
				case 232: case 233: case 234: case 235:
					sChar = 'e';
					break;
				// E varianten: È:200, É:201, Ê:202, Ë:203
				case 200: case 201: case 202: case 203:
					sChar = 'E';
					break;
				// i varianten: ì:236, í:237, î:238, ï:239
				case 236: case 237: case 238: case 239:
					sChar = 'i';
					break;
				// I varianten: Ì:204, Í:205, Î:206, Ï:207
				case 204: case 205: case 206: case 207:
					sChar = 'I';
					break;
				// n varianten: ñ:241
				case 241:
					sChar = 'n';
					break;
				// N varianten: Ñ:209
				case 209:
					sChar = 'N';
					break;
				// o varianten: ò:242, ó:243, ô:244, õ:245, ö:246, ø:248
				case 242: case 243: case 244: case 245: case 246: case 248:
					sChar = 'o';
					break;
				// O varianten: Ò:210, Ó:211, Ô:212, Õ:213, Ö:214, Ø:216
				case 210: case 211: case 212: case 213: case 214: case 216:
					sChar = 'O';
					break;
				// u varianten: ù:249, ú:250, û:260, ü:261
				case 249: case 250: case 260: case 261:
					sChar = 'u';
					break;
				// U varianten: Ù:217, Ú:218, Û:219, Ü:220
				case 217: case 218: case 219: case 220:
					sChar = 'U';
					break;
				// y varianten: ý:253, ÿ:255
				case 253: case 255:
					sChar = 'y';
					break;
				// Y varianten: Ý:221
				case 221:
					sChar = 'Y';
					break;
				default: // geen special karakter om te vervangen.
					sChar = osInput.charAt(i);
			}
			//alert('sChar=' + sChar);
			sConverted001 += sChar;
		}
		//alert('sConverted001 = ' + sConverted001); // [dev]
		osInput = sConverted001;
	}
	
	// 100 : lowercase conversie
	//alert('100 (lowercase): ' + bitLevel + ' + 100 = ' + (bitLevel & '101'));
	if ( (bitLevel & '100') == '000' ) {
		sConverted100 = osInput.toLowerCase()
		osInput = sConverted100;
		//alert('sConverted100 = ' + sConverted100); // [dev]
	}

	sConverted = osInput;
	//alert(sInput + ' > ' + sConverted);
	return sConverted;
}

// Deze functie crëert de Spellingscontrole input/tekst blok.
// de parameter bShow biedt de mogelijkheid om dit tekstblok al dan niet te onderdrukken (false bij Plaatsaanwijzen)
function initSpelLevel(bShow) {
	var htmlSpelControle = '';
	var sTitleA = 'Controleren op goed gebruik van hoofdletters.';
	var sTitleB = 'Controleren op goed gebruik van leestekens, zoals: een spatie, liggende streepje (-) of een aanhalingstekens (\').';
	var sTitleC = 'Controleren op goed gebruik van samengestelde letters, zoals: een ë, à of ñ.';
	
  htmlSpelControle += '<B>Spellingscontrole</B>';
  htmlSpelControle += '&nbsp;<IMG src="img/ico_info.gif" class="helpImg" border="0" onmouseover="showHelp(\'help.spelling\');" onmouseout="showHelp(\'help.spelling\');">';
  htmlSpelControle += '<div  id="help.spelling" class="helpDiv"><span class="helpHeader">Spellingscontrole</span>Selecteer op welke spellingsregels gecontroleerd moet worden in je antwoorden (meer info per item als je de muis er boven houdt)</div>';
  htmlSpelControle += '&nbsp;';
  htmlSpelControle += '<INPUT name="spelA" type="checkbox" value="100" title="' + sTitleA + '" onclick="getSpelLevel(this.form)" CHECKED><SPAN title="' + sTitleA + '">Hoofdletters <BR>';
  htmlSpelControle += '<INPUT name="spelB" type="checkbox" value="010" title="' + sTitleB + '" onclick="getSpelLevel(this.form)" CHECKED><SPAN title="' + sTitleB + '">Leestekens &nbsp;';
  htmlSpelControle += '<INPUT name="spelC" type="checkbox" value="001" title="' + sTitleC + '" onclick="getSpelLevel(this.form)" CHECKED><SPAN title="' + sTitleC + '">Samengesteld &nbsp;';

	if (bShow) {
		document.getElementById('fspelcontrolForm').innerHTML = htmlSpelControle;
	} else {
		document.getElementById('fspelcontrolForm').innerHTML = '';
	}
}


// Deze functie crëert de Spellingscontrole input/tekst blok bij het antwoorden overzicht.
function initSpelLevelAntwoorden() {
	var htmlSpelControle = '';
	var sTitleA = 'Controleren op goed gebruik van hoofdletters.';
	var sTitleB = 'Controleren op goed gebruik van leestekens, zoals: een spatie, liggende streepje (-) of een aanhalingstekens (\').';
	var sTitleC = 'Controleren op goed gebruik van samengestelde letters, zoals: een ë, à of ñ.';

	//alert('initSpelLevelAntwoorden(): ' + bsSpelLevel);
		
	htmlSpelControle += '<B><SPAN title="Geef aan op welke spellingsregels gecontroleerd moet worden in je antwoorden (meer info per item als je je muis er boven houdt).">Spellingscontrole [?]</SPAN>:</B>&nbsp;';
	htmlSpelControle += '<INPUT name="spelA" type="checkbox" value="100" title="' + sTitleA + '" onclick="getSpelLevel(this.form);geefAntwoorden(false);" ' + ( (bsSpelLevel & '100') == '100' ? 'CHECKED' : '' ) + '><SPAN title="' + sTitleA + '">Hoofdletters <BR>';
	htmlSpelControle += '<INPUT name="spelB" type="checkbox" value="010" title="' + sTitleB + '" onclick="getSpelLevel(this.form);geefAntwoorden(false);" ' + ( (bsSpelLevel & '010') == '010' ? 'CHECKED' : '' ) + '><SPAN title="' + sTitleB + '">Leestekens &nbsp;';
	htmlSpelControle += '<INPUT name="spelC" type="checkbox" value="001" title="' + sTitleC + '" onclick="getSpelLevel(this.form);geefAntwoorden(false);" ' + ( (bsSpelLevel & '001') == '001' ? 'CHECKED' : '' ) + '><SPAN title="' + sTitleC + '">Samengesteld &nbsp;';
	document.getElementById('fspelcontrolForm').innerHTML = htmlSpelControle;
}

// Deze functie bepaalt de SpellingsControle niveau variabele aan als er een wijziging wordt aangeklikt.
function getSpelLevel(form) {
	//alert('getSpelLevel(' + form.name.toString() + ')');
	bsSpelLevel = '';
	//bsSpelLevel = '';	alert('bsSpelLevel0=' + bsSpelLevel);
	(form.spelA.checked ? bsSpelLevel += '1' : bsSpelLevel += '0'); 
	//alert('bsSpelLevelA=' + bsSpelLevel);
	(form.spelB.checked ? bsSpelLevel += '1' : bsSpelLevel += '0');
	//alert('bsSpelLevelB=' + bsSpelLevel);
	(form.spelC.checked ? bsSpelLevel += '1' : bsSpelLevel += '0');
	//alert('bsSpelLevelC=' + bsSpelLevel);
	//alert('nwe bsSpelLevel=' + bsSpelLevel);
}

// Deze functie zet de vinkjes bij SpellingsControle op juiste wijze aan of uit obv bsSpelLevel waarde.
// Wordt gebruikt na terugkeren van geefAntwoorden naar vragen blok.
function setSpelLevel(form) {
	//alert('setSpelLevel(' + form.name.toString() + ') \n bsSpelLevel=' + bsSpelLevel);
	//bsSpelLevel = '';	alert('bsSpelLevel0=' + bsSpelLevel);
	( ((bsSpelLevel & '100') == '100') ? form.spelA.checked = true : form.spelA.checked = false );
	( ((bsSpelLevel & '010') == '010') ? form.spelB.checked = true : form.spelB.checked = false );
	( ((bsSpelLevel & '001') == '001') ? form.spelC.checked = true : form.spelC.checked = false );
}

// Deze functie past het aantal vragen aan aan de ingestelde moeilijkheidsniveau
// zodat aantal vragen nooit meer kan zijn dan aantal vragen in de moeilijkheidsgraad.
function setLevel(iLevelPriv) {
  //var xx;
  var i;
	//var oaV = document.forms["faantalVragen"].aantalVragen;
	//alert('setLevel(' + iLevel + ')');
	iNiveauItems = arrAantalInNiveau[iLevelPriv];
	//alert('1. iNiveauItems= ' + iNiveauItems  + ', iAantalVragen= ' + iAantalVragen);
	// pas eventueel het aantal vragen aan, want kan nooit meer zijn dan het aantal items bij dit niveau.
	if (iAantalVragen > iNiveauItems) {
		//iAantalVragen = iNiveauItems;
		//oaV.options[iLevelPriv-1].selected=true;
	  for (i=0; i < 6; i++) {
	    //xx = oaV.options[i].value;
	    //xx = oaV.options.length;
	    // dichtsbijzijnde waarde selecteren die lager of gelijk is aan aantal Items
		  if(oaV.options[i].value<= iNiveauItems) oaV.options[i].selected=true;
		}
	}
	//alert('2. iNiveauItems= ' + iNiveauItems  + ', iAantalVragen= ' + iAantalVragen);
}

// intiële startwaarden toekennen aan weergegeven waarden en onderliggende values van Moeilijkheidsniveau (A, B of C, ...)
// http://docs.sun.com/source/816-6408-10/option.htm
function initMoeilijkheidsNiveau() {

  //arrAantalInNiveau[4] = arrAantalInNiveau[2];
  //arrAantalInNiveau[5] = arrAantalInNiveau[3];
  //arrAantalInNiveau[3] = arrAantalInNiveau[3]-arrAantalInNiveau[2];
  //arrAantalInNiveau[2] = arrAantalInNiveau[4]-arrAantalInNiveau[1];
  arrAantalInNiveau[0] = arrNiveauPositie[0];
  arrAantalInNiveau[1] = arrNiveauPositie[1];
  arrAantalInNiveau[2] = arrNiveauPositie[2]-arrNiveauPositie[1];
  arrAantalInNiveau[3] = arrNiveauPositie[3]-arrNiveauPositie[2];
  arrAantalInNiveau[4] = arrNiveauPositie[2];
  arrAantalInNiveau[5] = arrNiveauPositie[3];

  //var oaV = document.forms["faantalVragen"].aantalVragen;
  var sLevelA  = 'A alleen - eenvoudig (' + arrAantalInNiveau[1] + ' lokaties)';
  var sLevelB  = 'B alleen - gemiddeld (' + arrAantalInNiveau[2] + ' lokaties)';
  var sLevelC  = 'C alleen - moeilijk (' + arrAantalInNiveau[3] + ' lokaties)';
  var sLevelAB = 'A+B      - lastiger (' + arrAantalInNiveau[4] + ' lokaties)';
  var sLevelABC = 'A+B+C - moeilijkst (' + arrAantalInNiveau[5] + ' lokaties)';

  var option0 = new Option(sLevelA , "1" );
  var option1 = new Option(sLevelB , "2");
  var option2 = new Option(sLevelC , "3");
  var option3 = new Option(sLevelAB , "4");
  var option4 = new Option(sLevelABC , "5");
  // fyi: in geval van strings: var option0 = new Option("weergave", "value");
  
  for (var i=0; i < 5; i++) {
  	eval("omN.options[i]=option" + i);
  	if (i==0) { omN.options[i].selected=true;	}
  }
}

// Aanpassen moeilijksheidsniveau variabele bij wijziging in select box (incl. bbh helptekst)
function setMoeilijkheidsNiveau(form_omN) {
	 var iLevelVorige = iLevel;
	 	 
	 // eerst afvangen of men wel wil wisselen ivm herstart.
	 // ook onderscheid of nwe level ook deel uit maakt van oude level, want dan ook geen melding.
	 // ook nog testen of eerste vraag al gesteld is, zoniet, dan geen melding.

	 
	 // ---
	   //var oaV = document.forms["flevel"].level;
   //alert('setMoeilijkheidsniveau was ' + iLevel);
   //alert('setMoeilijkheidsniveau: ' + iLevelVorige + '->' + getSelectedOption(omN));

	// Als nwe moeilijkheidsgraad hoger is dan huidige, dan alleen moeilijkheidsgraad aanpassen,
	// maar als kleiner, dan restart, want dan zal actieve vraag in hogere moeilijkheidsgraad kunnen zitten
	// of als switch naar andere graad die niet deel uit maakt van huidige verzameling.
	// Dus niet herstarten bij:
	// * A [1] -> AB[4]|AC[5], of
	// * B [2] -> AB[4]|AC[5], of
	// * AB[4] -> AC[5], of
	// * C [3] -> AC[5].
  
  /* test dev
  var test= parseInt(getSelectedOption(omN));
  test = parseInt(form.level.options[form.level.selectedIndex].value);
  test = 0;
  */

  // ### getSelectedOption(omN) is onbekend na tussenstand %%%
	 if (((iLevelVorige == 1 || iLevelVorige == 2) && (parseInt(getSelectedOption(form_omN)) == 4 || parseInt(getSelectedOption(form_omN)) == 5)) ||
	     (iLevelVorige == 4 && parseInt(getSelectedOption(form_omN)) == 5) ||
	     (iLevelVorige == 3 && parseInt(getSelectedOption(form_omN)) == 5) //||
	     //(iVragen == 1) // als nog bij 1e vraag, dan ook stilzwijgend herstarten, nee, want bij wisseling ook nwe vraag selecteren!!
	   ) { // a1
    // geen herstart alléén aanpassen level en helpteksten
    // iLevel = parseInt(form_omN.level.options[form_omN.level.selectedIndex].value);
	   //test= '_' + parseInt(getSelectedOption(omN)); // [dev]
    iLevel = parseInt(getSelectedOption(form_omN));
    
	  setLevel(iLevel);
	  setHelpteksten(document.getElementById('help.niveauUitleg'));
	} // a1
	else { // a2
    // herstart nodig áls men wil doorgaan, indien nog eerste vraag dan niet nodig bevestiging te vragen.
	  var cnfrm;
	  if (iVragen > 1) {
	    cnfrm = confirm('Waarschuwing: In het nieuw gekozen niveau komen de al gestelde vragen niet voor. \nDe test zal daarom opnieuw gestart worden in het nieuwe niveau en weer beginnen bij vraag 1. \n\nWil je doorgaan en dus opnieuw starten?');
	  } else {
  	  cnfrm = true; 
	  }
    if (!cnfrm) { // b1
      var xx = omN.options[iLevel].value;
      omN.options[iLevel - 1].selected = true; // terugzetten naar voorgaande level
      setHelpteksten(document.getElementById('help.niveauUitleg'));
      return false;
	  } // b1
	  else { // b2
	    // herstart zonder init
  		init(true);
    } // b2
  } // a1
}

// OUDE VERSIE - ZELF BEREKENEND
// intiële startwaarden toekennen aan weergegeven waarden en onderliggende values
// http://docs.sun.com/source/816-6408-10/option.htm
function initAantalVragenOUD() {
  var arrAantalInNiveauSortedAsc=[arrAantalInNiveau[0],arrAantalInNiveau[1],arrAantalInNiveau[2],arrAantalInNiveau[3],arrAantalInNiveau[4],arrAantalInNiveau[5]];
  //arrAantalInNiveauSortedAsc.sort(function(a,b){return a - b}); // desc: {return b - a}

  // %%%%
  var arrSelAantalVragen = new Array();
  arrSelAantalVragen[0] = Math.round(arrAantalInNiveauSortedAsc[1] / 2);
  arrSelAantalVragen[1] = arrAantalInNiveau[1];
  for (i = 1; arrAantalInNiveau[i] == arrAantalInNiveau[i]; i++) { }
  
  //var oaV = document.forms["faantalVragen"].aantalVragen;
  var iAantalTussen0en1 = Math.round(arrAantalInNiveauSortedAsc[1]/2);
  var iAantalTussen1en3 = arrAantalInNiveau[1] + Math.round( (arrAantalInNiveau[2]-arrAantalInNiveau[1])/2 );
  var iAantalTussen3en5 = arrAantalInNiveau[2] + Math.round( (arrAantalInNiveau[3]-arrAantalInNiveau[2])/2 );
  
  var option0 = new Option(iAantalTussen0en1, iAantalTussen0en1);
  var option1 = new Option(arrAantalInNiveauSortedAsc[1], arrAantalInNiveauSortedAsc[1]);
  //var option2 = new Option(arrAantalInNiveauSortedAsc[2], arrAantalInNiveauSortedAsc[2]);
  var option2 = new Option(iAantalTussen1en2, iAantalTussen1en2);
  var option3 = new Option(arrAantalInNiveauSortedAsc[3], arrAantalInNiveauSortedAsc[3]);
  //var option4 = new Option(arrAantalInNiveauSortedAsc[4], arrAantalInNiveauSortedAsc[4]);
  var option5 = new Option(arrAantalInNiveauSortedAsc[5], arrAantalInNiveauSortedAsc[5]);

  // fyi: in geval van strings: var option0 = new Option("weergave", "value");  
  // set de initiële geselecteerde waarde
  for (var i=0; i < 6; i++) {
  	eval("oaV.options[i]=option" + i);
  	//if (i==1) { oaV.options[i].selected=true;	}
  	if (oaV.options[i].value==arrAantalInNiveau[iLevel]) { oaV.options[i].selected=true;	}
  }
}

// NIEUWE VERSIE - VASTEWAARDEN UIT ROOT PAGINA (selAantalVragen[])
// intiële startwaarden toekennen aan weergegeven waarden en onderliggende values
// http://docs.sun.com/source/816-6408-10/option.htm
function initAantalVragen() {

  var option0 = new Option(selAantalVragen[0], selAantalVragen[0]);
  var option1 = new Option(selAantalVragen[1], selAantalVragen[1]);
  var option2 = new Option(selAantalVragen[2], selAantalVragen[2]);
  var option3 = new Option(selAantalVragen[3], selAantalVragen[3]);
  var option4 = new Option(selAantalVragen[4], selAantalVragen[4]);
  var option5 = new Option(selAantalVragen[5], selAantalVragen[5]);

  // fyi: in geval van strings: var option0 = new Option("weergave", "value");  
  // set de initiële geselecteerde waarde
  for (var i = 0; i < 6; i++) {
    eval("oaV.options[i]=option" + i);
    //if (i==1) { oaV.options[i].selected=true;	}
    if (oaV.options[i].value == arrAantalInNiveau[iLevel]) { oaV.options[i].selected = true; }
  }
}

// Aanpassen aantalvragen variabele bij wijziging in select box.
function setAantalVragen(form) {
	//var oaV = document.forms["faantalVragen"].aantalVragen;
  //alert('setAantalVragen was ' + iAantalVragen);
  iAantalVragen = form.aantalVragen.options[form.aantalVragen.selectedIndex].value;
	// Alleen aantal vragen aanpassen als dat aantal ook past binnen het geselecteerde level.
	if (iNiveauItems < iAantalVragen) {
		iAantalVragen = iNiveauItems;
		alert('Je kunt niet meer vragen kiezen, dan binnen het geselecteerde niveau beschikbaar zijn.');

		// bepaal welke option tag hoort bij vastgestelde aantal vragen en die slecteren.
	  for (var i=0; i < oaV.options.length; i++) {
	  	if (oaV.options[i].value == iAantalVragen) {
		  	//alert('option ' + i + ' wordt geslecteerd');
		  	oaV.options[i].selected=true;
			}
	  }
	}
  //alert('setAantalVragen is ' + iAantalVragen);
}

// presenteert (tussen)overzicht van gestelde vragen en gegeven antwoorden.
var strHtmlOrg; // globale variabele

function geefAntwoorden(bEersteGeefAntwoorden) {
	var strHtml = '';
	var bAntwInArray;

	//alert(iVragen);
	strHtml += '<TABLE width="286" cellpadding="0" bgcolor="#FFFFFF"><TR><TD width="128">Gevraagd</TD>' +
    '<TD width="128">' +
		(bNaamraden ? 'Jouw antwoord' : 'Jij wees aan') + 
    '</TD><TD width="30">&nbsp;</TD></TR>';
	//for (var i=1; i<=iNiveauItems ;i++ ) { %%%%
	for (var i = 1; i < arrTopoItems.length; i++) {
		if (arrAlGevraagd[i] && (arrAntwoorden[i] != null)) {
			strHtml += '<TR><TD class="answers">'
			strHtml += arrTopoItems[i][0].split(";")[0] + ' ('+ arrTopoItems[i][1] + ')';
			strHtml += '</TD><TD class="answers">';
			//strHtml += (bNaamraden ? arrAntwoorden[i] : arrTopoItems[arrAntwoorden[i]][0] + ' ('+arrAntwoorden[i]+')');
			//strHtml += arrAntwoorden[i];
			strHtml += (bNaamraden ? arrAntwoorden[i] : findLocation(arrAntwoorden[i])+' ('+arrAntwoorden[i]+')' );
      strHtml += '</TD>';
			strHtml += '<TD style="text-align:center"><IMG src="img/smiley-';
			if (bNaamraden) { // Naamraden
				//ORG: strHtml += (arrTopoItems[i][0] == arrAntwoorden[i] ? 'ok' : 'nok');	
						
				bAntwInArray = false;
				for (j=1; j<=arrTopoItems[i][0].split(";").length; j++ ) {
					if (arrTopoItems[i][0].split(";")[j-1].split(" (")[0] == arrAntwoorden[i]) bAntwInArray = true; 
				}
				if (bAntwInArray) {
					strHtml += 'ok';
				} else {
					for (j=1; j<=arrTopoItems[i][0].split(";").length; j++ ) {
						if (suppressSpecialChars(arrTopoItems[i][0].split(";")[j-1].split(" (")[0], bsSpelLevel).toString() == suppressSpecialChars(arrAntwoorden[i], bsSpelLevel).toString()) bAntwInArray = true; 
					}
					if (bAntwInArray) {
						strHtml += 'aok';
					} else {
						strHtml += 'nok';
					}
				}
      } else {         // Aanwijzen
      	//ORG: strHtml += (arrTopoItems[i][1] == arrAntwoorden[i] ? 'ok' : 'nok');
      	strHtml += ( validateAanwijzen(arrTopoItems[i][1], arrAntwoorden[i]) ? 'ok' : 'nok');
      }
			strHtml += '.gif"></TD>';
      strHtml += '</TR>';
		}
	}
	
	strHtml += '<TR><TD colspan="3">'
	if (bNaamraden) {
		strHtml += '<HR>';
	}
	  
		strHtml += '<FORM name="fspelcontrol">';
		strHtml += '<DIV id="fspelcontrolForm">';
		strHtml += '</DIV>';
		strHtml += '</FORM>';

	strHtml += '<HR><CENTER>';
	strHtml += '<button id="terug" onclick="terugNaarVragen()">Terug</button>&nbsp;&nbsp;';
	//strHtml += '<button id="stoppen" onclick="javascript:if (confirm(\'weet je zeker dat je wilt stoppen?\')) location.href=\'index.htm\';">Stoppen</button>';
	strHtml += '</CENTER></TD></TR>';

	// start: mopje weergeven - alleen aan het einde als alle vragen zijn beantwoord
	if (iVragen >= iAantalVragen || iVragen >=iNiveauItems) {
		strHtml += '<TR><TD colspan="3">'
		strHtml += '<IMG src="img/smiley-lachend.gif" width="19" hspace="5" alt="lachende smiley om mop">'
		strHtml += '<I>' + toonMopje() + '</I>';
		strHtml += '<br>heb je een leuke mop, e-mail naar ' +
			'<A href="mailto:ericdj@toposite.org">TopoSite</A>';
		strHtml += '</TD></TR>'
	}
	// einde:  mopje weergeven

	//if (strHtml != '') writeConsole(strHtml);
	strHtml += '</TABLE>';

	// alleen originele html opslaan voor de Terug optie bij eerste keer geefAntwoorden
	// anders wordt bij een refresh met nwe spellingscontrole de originele html overschreven.
	if (bEersteGeefAntwoorden) {
	  strHtmlOrg = document.getElementById('questionsection').innerHTML;
	}
	document.getElementById('questionsection').innerHTML = strHtml;	
  if (bNaamraden) initSpelLevelAntwoorden();
}

function terugNaarVragen() {
  document.getElementById('questionsection').innerHTML = strHtmlOrg;
        strHtmlOrg = ''; // leegmaken niet meer nodig.
        if (bNaamraden) setSpelLevel(document.forms['fspelcontrol']); // pas spellingscontrole settings aan nav evt wijzigingen bij geefAntwoorden blok.
  // omN hier opnieuw????
}

function setHelpteksten(ElementById) {
  var i, n;
	var sHtml='';
	var iLevelLocal, iCombiLevelT, iCombiLevelP;
	//alert('ElementById.name='+ElementById.id);
	
	if (ElementById.id == 'help.niveauUitleg') {
		iLevelLocal = parseInt(getSelectedOption(omN));
		iCombiLevelT = (iLevelLocal <= 3 ? 1 : iLevelLocal-2 ); // Bij A,B of C (1x), maar extra lus voor AB (2x) en ABC (3x)
		iCombiLevelP = (iLevelLocal <= 3 ? iLevelLocal : 1 ); // Eerste positie kiezen :Bij A,B of C (1,2 of 3), bij AB(1) en ABC(1)
		//alert('iLevelLocal='+iLevelLocal);
		sHtml += '<SPAN class="helpHeader">In dit Niveau zitten de volgende lokaties:</SPAN>';
		for (n = 0; n < iCombiLevelT; n++) { // Bij A,B of C (1x), maar extra lus voor AB (2x) en ABC (3x)
	    for (i=arrNiveauPositie[(iCombiLevelP-1)+n]+1; i <= (arrNiveauPositie[(iCombiLevelP)+n]); i++) {
        sHtml += arrTopoItems[i][0].split(";")[0]

        //if (i < arrNiveauPositie[(iLevelLocal <= 3 ? iLevelLocal : iLevelLocal - 2)]) {
        if (i < arrNiveauPositie[iCombiLevelP+n]) {
          sHtml += ', ';
        } else {
          sHtml += '.';
        }
	    }
	    if (n+1 < iCombiLevelT) sHtml += '<BR>&nbsp;<BR>';
	  }
		sHtml += '<BR><I>(de test start opnieuw als je wisselt naar een niveau met andere lokaties.)</I>';
	}
	ElementById.innerHTML = sHtml;

}

function setSpecialCharsHtml() {
	var aSpecChar = new Array('+', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'ß', 'ç', 'Ç ', 'è', 'é', 'ê', 'ë', 'È', 'É', 'Ê', 'Ë', 'ì', 'í', 'î', 'ï', 'Ì', 'Í', 'Î', 'Ï', 'ñ', 'Ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ù', 'ú', 'û', 'ü', 'Ù', 'Ú', 'Û', 'Ü', 'ý', 'ÿ', 'Ý');	

	//formtmp = new Object(document.forms['naamraden'].plaatsnaam); 
	//var formtmp = new Object(document.getElementById('naamraden').plaatsnaam);
	var sHtml = '';

	//sHtml += '<SELECT onchange="addSpecialChar()document.getElementById(\'naamraden\').plaatsnaam.value+=this.form.selectedIndex.value);" name="setSpecChar">';
	sHtml += '&nbsp;<SELECT onchange="addSpecialChar(this.form)" id="setSpecChar" name="setSpecChar" title="Voeg een samengestelde letter toe aan je antwoord">';
	for(var n=0; n<aSpecChar.length; n++) {
		sHtml += '<OPTION value="' + aSpecChar[n] + '" title="'+ aSpecChar[n] +'">' + aSpecChar[n] + '</OPTION>';
	}
	sHtml += '</SELECT>&nbsp;';
	return sHtml;
}

function addSpecialChar(form) {
	var sSpecChar = form.setSpecChar.options[form.setSpecChar.selectedIndex].value;

	document.getElementById('naamraden').plaatsnaam.value += sSpecChar;
}


// (her)initialiseert de test. Met restart parameter mogelijkheid om aan te geven dat
// niet alle instellingen zoals moelijkheidsgraad en aantal vragen worden gereset naar
// startwaarden, als vanuit een niveau wijziging wordt herstart moet niveau en aantal vragen
// blijven staan.
function init(restart) {
	// reset alle tellers
	iPunten = 0;
	iVragen = 0;
	iItemNr = 0;
	arrAlGevraagd = new Array();
	arrAntwoorden = new Array();
	
	oaV = document.forms["faantalVragen"].aantalVragen;
	omN = document.forms["flevel"].level;
	
	// bepaal het vraagtype (naamraden of aanwijzen)
	bNaamraden = ('naamraden' == getCheckedRadioButton(document.forms["fvraagtype"].vraagtype));

	// set moeilijkheidsniveau opties.
	if (!restart) initMoeilijkheidsNiveau();
	iLevel = getSelectedOption(omN); // huidige level tbv vergelijk bij aanpassing.
	if (!restart) setHelpteksten(document.getElementById('help.niveauUitleg'));
	if (restart) setHelpteksten(document.getElementById('help.niveauUitleg')); // [dev test]

	// set aantalvragen per select optie.
	if (!restart) initAantalVragen();
		
	// bepaal het ingestelde aantal vragen
	iAantalVragen = getSelectedOption(oaV);
	//iAantalVragen = 5 // for test purposes only
	//alert('iAantalVragen selected = '+ iAantalVragen); // [dev]]

	// bepaal het ingestelde niveau en daarmee de lengte van de plaatsen array
	setLevel(getSelectedOption(omN));
	//alert('omN=' + omN.toString());
	//alert('init setLevel(getSelectedOption(omN))=' + getSelectedOption(omN)); 
	//setLevel(1); // for test purposes only

	// creëer spellingscontrole html (alleen bij naamraden)
	if (!restart) initSpelLevel(bNaamraden);
	if (bNaamraden) {
		if (!restart) bsSpelLevel = '111';
		// bepaal ingestelde spellingscontrole niveau
		getSpelLevel(document.forms["fspelcontrol"]);
	}
	
	// reset (set op false) de array die aangeeft welke plaatsen al zijn gevraagd.
	// noot: positie [0] is eigenlijk niet nodig, maar voor de zekerheid gereset.
	//for (var i=0; i<=iNiveauItems ;i++ ) {
	// net zo lang maken als totale array (xtd6)
	var temp1 = arrTopoItems.length;
	for (var i = 0; i < arrTopoItems.length; i++) {
		arrAlGevraagd[i] = false;
	}

	// reset tekst en buttons
	document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + arrAlGevraagd.length;
	document.getElementById('txtPunten').innerHTML = "Punten: " + iPunten;
	document.getElementById('doorgaan').disabled = true;
	document.getElementById('opnieuw').disabled  = true;
	
	// start de test
	test();	
}


// ### ondersteunende functies ###


// bepaal welke optie en bijbehorende waarde in de select form is geselecteerd
// %%%% Gaat niet goed na een tussenstand, dan is form NULL %%%%
function getSelectedOption(form) {
  if (form) {
    //alert('return getSelectedOption= ' + form.options[form.selectedIndex].value);
    //var xx = parseInt(form.level.options[form.level.selectedIndex].value);
    
    return form.options[form.selectedIndex].value;
  }
  else {
    // omN &&&&&
    //return form.options[form.selectedIndex].value;
    //var xx = parseInt(form.level.options[form.level.selectedIndex].value);
    return xx;
  }
}

// bepaal welke radiobutton en bijbehorende waarde is geselecteerd
function getCheckedRadioButton(radiobuttons) {
	var checkedButtonValue = '';
	for (var i=0; i < radiobuttons.length; i++) {
		if (radiobuttons[i].checked) {
			checkedButtonValue=radiobuttons[i].value;
			i = radiobuttons.length;
		}
	}
	//alert('checkedButtonValue=' + checkedButtonValue);
	return checkedButtonValue;
}

// afvangen van een enter in het invoer veld om te voorkomen dat MSIE het form submit
function submitenter(myfield,e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13) {
		validateInput(document.forms['naamraden'].plaatsnaam.value);
		return false;
	}
	else {
		 return true;
	}
}

// afvangen van een submit event waardoor firefox reload met ?formnaam.
function submitButton(myfield,e) {
		validateInput(document.forms['naamraden'].plaatsnaam.value);
		return false;
}

// deze functie retourneert de naam van de lokatie op basis van de ingevoerde lokatie-id
// [dev] dit nog uitzoeken voor 4b
function findLocation(lokatieId) {
  //alert('lokatieId='+lokatieId);
  var lokatieNaam = '';
  for(var i=0; arrTopoItems[i][1] != lokatieId; i++ ) {
  }
  lokatieNaam = arrTopoItems[i][0].split(";")[0];
  //alert('i='+i+', lokatieNaam='+lokatieNaam);
  return lokatieNaam;
}


	var strHtmlConfigFrameOrg;
	var strHtmlAfdrukFrameOrg;
// deze functie voegt tekstveld onder de kaart met alle namen en drukt deze af, via de volgende stappen:
// * onderdrukken rechter configuratie frame (storend)
// * weergeven alle namen onder de kaart
// * afdruk opdracht
// * alle namen weer onderdrukken
// * configuratiescherm weer tonen.
function oefenbladAfdrukken() {

	var strHtml = '';
	var n;
	//alert('oefenbladAfdrukken');
	strHtmlConfigFrameOrg = document.getElementById('questionsection').innerHTML;
	document.getElementById('questionsection').innerHTML = '<TABLE width="286" border="0" cellpadding="2" cellspacing="0"><TR><TD>&nbsp;</TD></TR></TABLE>';
	
	strHtmlAfdrukFrameOrg = document.getElementById('namenafdrukken').innerHTML;
	strHtml += '<TABLE class="oefenpaginaNamen" width="100%" border="1" cellpadding="2" cellspacing="0">';
	strHtml += '<TR><TD colspan="4"><B>Niveau A</B></TD></TR>';
	for (n=arrNiveauPositie[0]+1, i=0; (n <= arrNiveauPositie[1]); n++, i++) {
		if (i % 2 == 0) strHtml += '<TR>';
		strHtml += '<TD class="oefenafdruk">' + arrTopoItems[n][1] + '</TD><TD class="oefenafdruk">' + arrTopoItems[n][0].split(";")[0] + '</TD>';
		if (i % 2 == 1) strHtml += '</TR>';	
	}
	if (i % 2 == 1) strHtml += '<TD>&nbsp;</TD><TD>&nbsp;</TD></TR>';
	
	strHtml += '<TR><TD colspan="4"><B>Niveau B</B></TD></TR>';
	for ( n=arrNiveauPositie[1]+1, i=0; (n <= arrNiveauPositie[2]); n++, i++) {
		if (i % 2 == 0) strHtml += '<TR>';
		strHtml += '<TD class="oefenafdruk">' + arrTopoItems[n][1] + '</TD><TD class="oefenafdruk">' + arrTopoItems[n][0].split(";")[0] + '</TD>';
		if (i % 2 == 1) strHtml += '</TR>';	
	}
	if (i % 2 == 1) strHtml += '<TD>&nbsp;</TD><TD>&nbsp;</TD></TR>';

	strHtml += '<TR><TD colspan="4"><B>Niveau C</B></TD></TR>';
	for (n=arrNiveauPositie[2]+1, i=0; (n <= arrNiveauPositie[3]); n++, i++) {
		if (i % 2 == 0) strHtml += '<TR>';
		strHtml += '<TD class="oefenafdruk">' + arrTopoItems[n][1] + '</TD><TD class="oefenafdruk">' + arrTopoItems[n][0].split(";")[0] + '</TD>';
		if (i % 2 == 1) strHtml += '</TR>';	
	}
	if (i % 2 == 1) strHtml += '<TD>&nbsp;</TD><TD>&nbsp;</TD></TR>';

	strHtml += '<TR><TD colspan="4">&nbsp;</TR>';
	strHtml += '<TR><TD colspan="4"><CENTER><BUTTON onclick="window.print()">Afdrukken</BUTTON>&nbsp;&nbsp;&nbsp;&nbsp;';
	strHtml += '<BUTTON onclick="afdrukkenGereed()">Terug</BUTTON></CENTER></TD></TR>';
	strHtml += '</TABLE>'
	
		//strHtml += '<TR><TD colspan="4">';
		//strHtml += composeSpecificHtmlString();
		//strHtml += '</TR>';
	
	strHtmlAfdrukFrameOrg = document.getElementById('namenafdrukken').innerHTML;
	document.getElementById('namenafdrukken').innerHTML = strHtml;
}

// deze functie zet de teksten weer neer zoals de situatie was voor de afdrukken oefen pagina.
function afdrukkenGereed() {
	document.getElementById('namenafdrukken').innerHTML = strHtmlAfdrukFrameOrg;
	document.getElementById('questionsection').innerHTML = strHtmlConfigFrameOrg;
	resetTest()
}

// deze funtie reset de testvariabelen naar beginwaarden.
function resetTest() {
	iVragen = 1;
	iPunten = 0;
	//for (var i=0; i<iNiveauItems ;i++ ) {
	for (var i = 0; i < arrTopoItems.length; i++) {
		arrAlGevraagd[i] = false;
	}

	document.getElementById('txtAantalVragen').innerHTML = "Vraag : " + iVragen;
	document.getElementById('txtPunten').innerHTML = "Punten: " + iPunten;
}

function composeSpecificHtmlString() {

	var sHtml = '';

	sHtml += '<!-'+'- Start of StatCounter Code -'+'->';
	sHtml += '<scr' + 'ipt type="text/javascript">';
	sHtml += 'var sc_project=4059314;';
	sHtml += 'var sc_invisible=1;';
	sHtml += 'var sc_partition=50;';
	sHtml += 'var sc_click_stat=1;';
	sHtml += 'var sc_security="820222fd";'; 
	sHtml += '</scr' + 'ipt>';
		
	sHtml += '<scr' + 'ipt type="text/javascript" src="http://www.statcounter.com/counter/counter.js"></scr'+'ipt><noscr'+'ipt><div class="statcounter"><a title="site stats" href="http://www.statcounter.com/free_web_stats.html" target="_blank"><img class="statcounter" src="http://c.statcounter.com/4059314/0/820222fd/1/" alt="site stats" ></a></div></noscr'+'ipt>';
	sHtml += '<!-'+'- End of StatCounter Code -'+'->';

	return sHtml;
}

// The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)
// See:  http://www.msc.cornell.edu/~houle/javascript/randomizer.html
// aanroepen door rand(waarde), met waarde als integer getal.
// zou ook moeten kunnen met: parseInt(multiplier*Math.random() + 1)
rnd.today=new Date();
rnd.seed=rnd.today.getTime();

function rnd() {
        rnd.seed = (rnd.seed*9301+49297) % 233280;
        return rnd.seed/(233280.0);
}

function rand(number) {
        return Math.ceil(rnd()*number);
}
// end central randomizer. -->

// functie ter ondersteuning van weergeven [I]nfo label bij mouseover.
function showHelp(helpId){
	if (document.getElementById(helpId).className == 'helpDiv'){ document.getElementById(helpId).className = 'helpDivShow'; }
	else { document.getElementById(helpId).className = 'helpDiv'; }
}
