var modes=Array("", "login", "selectie", "overhoor");
var dir=1;
var from=0.1;
var to=1;
var tmp_from;
var loading="<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p align=center><img src=\"img/ajaxloader.gif\"></p>";


// guestLogin creates a guest session
function guestLogin() {
	moveStuff(1,2);
}

// Pops up a gray centered dialog box with title titletxt and body bodytxt and remains there for duration before it fades away.
function popup(titletxt, bodytxt, duur) {
	var fase2 = function () { // houd hem in beeld
		new Effect.Opacity('popup', { duration: duur, fps: 2, from: 1, to: 1, afterFinish: fase3 });		
	}
	var fase3 = function () {
		new Effect.Opacity('popup', { duration: 0.5, from: 1, to: 0.0, afterFinish: fase4 });		
	}
	var fase4 = function () {
		Element.setStyle('popup', { display: 'none' });
	}
	
	// Fase 1
	Element.update('popup', "<h2>"+titletxt+"</h2><br /><p>"+bodytxt+"</p>");
	Element.setStyle('popup', { display: 'block' });
	new Effect.Opacity('popup', { duration: 0.3, from: 0.0, to: 1, afterFinish: fase2 });
	
}

	function sendForm() {
		var lemma=document.getElementById('lemma');
		var cont=true;
		if (lemma.value.length<3) { cont=false; cont=confirm('U heeft een erg korte zoekterm ingevoerd. Dit kan leiden tot zeer veel resultaten. Wilt u toch doorgaan?'); }
		if (cont) {
			lemma.value=escapen(lemma.value); 
			document.forms.zoekop.submit();	
		}

	}

// Equivalent van PHP's str_replace
function str_replace(search, replace, subject) {
  return subject.split(search).join(replace);
}


// Escape-functie door elmer zelf gebrouwen. Heeft ook een equivalent in PHP, kijk maar in functions.php
function escapen(str) {
	var toreplace=Array('á','é','í','ó','ú','à','è','ì','ò','ù','ä','ë','ï','ö','ü','â','ê','î','ô','û','ñ');
	var replacewith=Array('*ae', '*ee', '*ie', '*oe', '*ue', '*aa', '*ea', '*ia', '*oa', '*ua','*au', '*eu', '*iu', '*ou', '*uu', '*ad', '*ed', '*id', '*od', '*ud', '*nt');
	
	for (var i=0; i<toreplace.length; i++) {
		str=str_replace(toreplace[i], replacewith[i], str); 
	}
	
	return str;
}
	
// returns  value of radio buttons series
function radio(btn) {
    var cnt = -1;
    for (var i=btn.length-1; i > -1; i--) {
        if (btn[i].checked) {cnt = i; i = -1;}
    }

    if (cnt > -1) return btn[cnt].value;
    else return null;
}

	// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {

	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue);
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue) {
			radioObj[i].checked = true;
		}
	}
}
 
// CheckLogin checks in database for user and then turns $_SESSION['userid'] to the user id and $_SESSION['permission'] to true
function checkLogin(user, pass) {
	
	var pars="user="+escape(user)+"&pass="+escape(pass);

  var opt= {
  	parameters: pars,
  	onComplete: function(response) {
  		switch (response.responseText) {
  			case "No user found": loadLogin('login_complete.php'); break;
  			case "User granted": popup("Login", "Login geslaagd", 0.9); moveStuff(1,2); break;
  		}
  	}
  }
	new Ajax.Request('checkLogin.php', opt);
}


// Controleer het form waarmee nieuwe gebruikers geregistreerd kunnen worden en als het in orde is, verstuur een validatie-email.
function checkSignup(frm) {
	var checkit = function() {
	  loadLogin('login_signup_complete.php');
	}
	var pass=frm.password1.value, user=frm.username.value, email=frm.email.value;
	if (pass!=frm.password2.value) { popup("Fout", "Wachtwoorden komen niet overeen!", 0.9); return false; }
	if (pass.length<5 || escape(pass)!=pass) { popup("Fout", "Wachtwoord moet minimaal uit 5 letters of cijfers bestaan.", 0.9); return false; }
	if (user.length<5 || escape(user)!=user)  { popup("Fout", "Gebruikersnaam moet minimaal uit 5 letters of cijfers bestaan.", 0.9); return false; }
	if (!checkEmail(email)) { popup("Fout", "U heeft geen geldig e-mail adres ingevuld.", 0.9); return false; }

	new Ajax.Request('checkSignup.php', { parameters: Form.serialize(document.signupform), onComplete: checkit });
}

// Not to be confused with roadblock. Laad een heel hoofdscherm in op het moment dat het getoond moet worden
function loadBlock(blokje, bestand) {
		bestand=bestand || blokje;
		document.getElementById(blokje).innerHTML=loading;
		new Ajax.Updater(blokje, bestand+".php", {asynchronous: true });
	
}

function clickLink(id) {
	// verstuur hier een ajaxrequest om de traffic te regelen
	return true;
}


function logUit() {
	var moveit = function () {
		moveStuff(2,1);
	}
		new Ajax.Request('setSession.php', {parameters: 'erase=true', asynchronous: true, onSuccess: moveit});
}
// javascript isset kloon
function isset(varname){
  return(typeof(window[varname])!='undefined');
}


// Checkt een e-mail adres op geldigheid
function checkEmail(emailAddr) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailAddr)) return (true);
	return (false);
}

// Laadt een blokje in de whitecorner op de voorpagina
function loadLogin(locatie) {
	document.getElementById('blok2').innerHTML=loading;
	new Ajax.Updater('blok2', locatie, {asynchronous: true});
}


// Schuif de achtergrond elke keer 900 pixels naar links of rechts. Start- en eindblok kunnen waardes 1,2 of 3 hebben, die staan voor de blokken van
// links naar rechts
function moveStuff(startblok, eindblok, bestand) {
		var moveit=900;
		var movex=moveit*(startblok-eindblok);
		bestand=bestand || modes[eindblok];

		if (startblok>3 || eindblok>3 || startblok<1 || eindblok<1) return false; // out of bounds

		loadBlock(modes[eindblok], bestand);
		Element.update(modes[startblok], '');
		new Effect.Opacity(modes[startblok], {duration:1.0, from:1.0, to:0.1});
		new Effect.Opacity(modes[eindblok], {duration:1.0, from:0.1, to:1.0});
		new Effect.MoveBy('container', 0, movex, {duration: 1.0});
		return true;
}


// functie om afbeelding te laten oplichten. Maak daarvoor twee afbeeldingen met dezelfde naam, geen cijfers maar wel een 0 en een 1 (1=highlighted versie)
// Dus bijv. button0.gif en button1.gif. Name/id hoeven niet gelijk aan de bestandsnaam te zijn, maar moeten wel aan hilite worden doorgegeven als referentie
function hilite(obj) {
	var newpic, oldpic=$(obj).src;
	if (oldpic.indexOf("0")>0) {
		newpic=oldpic.substr(0, oldpic.indexOf("0"))+"1"+oldpic.substr(oldpic.indexOf("0")+1);
	} else if (oldpic.indexOf("1")>0) {
		newpic=oldpic.substr(0, oldpic.indexOf("1"))+"0"+oldpic.substr(oldpic.indexOf("1")+1);}
  
  $(obj).src=newpic;
}

// Checkt of er nog een hoofdstukje aan staat en zo niet, verberg de link naar het volgende scherm
function checkOefen() {
	var frm=document.forms.chapterform;

	var i=frm.length;
	var needle="cb", len=needle.length;
	var legelijst=true;
	while (i--)
		if (frm.elements[i].type == 'checkbox') {
			if (frm.elements[i].name.substr(0, len) == needle) {
				if (frm.elements[i].checked) { 
					legelijst=false; 
				}
			}
		}
	if (legelijst) 
		Element.update('oefenen', "Selecteer minstens &eacute;&eacute;n hoofdstuk..");
	else
		Element.update('oefenen', "<select name='oefening'><option selected value='Overhoren'>Overhoor alles</option><option value='onbekend'>Alleen onbekende woorden</option><option value='lijst'>Toon een lijst</option></select><input type=button value='OK' onClick='LoadOefenen(document.dummy2.oefening.value);'>");
	}

// Checkt ook de hoofdstukken aan/uit als een boek aan/uit gecheckt wordt
function checkBook(boek) {

	var frm=document.forms.chapterform;

	var i=frm.length;
	var needle="cb"+boek, len=needle.length;

	while (i--)
		if (frm.elements[i].type == 'checkbox')
			if (frm.elements[i].name.substr(0, len) == needle) {frm.elements[i].checked=$('boek'+boek).checked; }
	if (document.forms.boeken.curboek.value!=boek) ShowBoxes(boek);
	checkOefen();
}	

// controleer of van een bepaald boek geen enkel hoofdstuk meer geselecteerd is, haal dan ook het checkje bij het boek weg
function checkChapters(boek) {
	var frm=document.forms.chapterform;
	var i=frm.length, volboek=false;
	var needle="cb"+boek, len=needle.length;
	
	while (i--) // Loop alle formitems af
		if (frm.elements[i].type == 'checkbox') // Als het een checkbox is
			if (frm.elements[i].name.substr(0, len) == needle)  // en een hoofdstuk
			  if (frm.elements[i].checked) volboek=true; // als er een hoofdstuk van een boek aan staat dan is het boek in gebruik
  document.getElementById('boek'+boek).checked=volboek;
  checkOefen();
}	


// laat de hoofdstukken zien die bij een bepaald boek horen en verbergt de rest met display: none

function ShowBoxes(boek) {
	
	var frm=document.forms.chapterform;
	var i=frm.length;
	var needle="cb"+boek, len=needle.length;
	document.forms.boeken.curboek.value=boek;

	for (var j=1;j<10;j++) {
	
		Element.removeClassName(document.getElementById('liboek'+j), "hilite");
		Element.addClassName(document.getElementById('liboek'+j), "alt");
	}
	
	Element.removeClassName(document.getElementById('liboek'+boek), "alt");
	Element.addClassName(document.getElementById('liboek'+boek), "hilite");
				
	while (i--) {
		if (frm.elements[i].type == 'checkbox') { // als het formelement een checkbox is
			liname="li"+frm.elements[i].name.substr(frm.elements[i].name.indexOf("b")+1); // (de link heeft dezelfde nr's maar dan beginnend met a ipv cb)
			if (frm.elements[i].name.substr(0, len) == needle) // en het formelement met cb$boek begint, dan hoort ie bij dit boek 
			{ 
				//Element.setStyle(frm.elements[i].name, { display: 'inline' });  // dus tonen, checkbox als inline
				Element.setStyle(document.getElementById(liname), { display: 'block' }); // li als block
			}
			else { 
				//Element.setStyle(frm.elements[i].name, { display: 'none' }); // anders verbergen
				Element.setStyle(document.getElementById(liname), { display: 'none' }); // de li verbergen
			}
		}
	}
}	

function BewaarSelectie(naam) 
{
	var frm=document.forms.chapterform;

	var par="naam="+escape(naam)+"&"+Form.serialize(frm);
	var opt = {
		parameters: par, 
		onComplete: function (response) {
			popup("Bewaren", response.responseText, 0.9);
		},
		onFailure: function (t) { 
			popup("Fout","Bewaren mislukt.", 0.9);
		}
	}
		new Ajax.Request('voorkeuze.php', opt);
}

// Laad scherm op de selectie pagina
function LaadScherm(scherm, saveChapters) {
		var frm=document.forms.chapterform;

	if (saveChapters>0) new Ajax.Request('chapters_save.php', { parameters: Form.serialize(frm) });
	switch (scherm) {
		case "instellingen": new Ajax.Updater('sel_container', 'selectie_instellingen.php', {asynchronous: true }); break;
		case "statistiek": new Ajax.Updater('sel_container', 'selectie_statistiek.php', {asynchronous: true }); break;
	  case "selectie": new Ajax.Updater('sel_container', 'selectie_selectie.php', {asynchronous: true }); break;
	  default: new Ajax.Updater('sel_container', 'selectie_selectie.php', {asynchronous: true});
	}
}

// Laad de juiste hoofdstukken en ga naar het overhoren
function LoadOefenen(oefening) {
	var frm=document.forms.chapterform;

	var overhoren = function (t) { // actie als je standaard wilt overhoren
		moveStuff(2,3, "overhoor_hoofdstukken");
	}
	var onbekend = function (t) { // actie als je alleen onbekende woorden wilt overhoren
		moveStuff(2,3, "overhoor_onbekenden");
	}
	var lijst = function (t) { //actie als je alleen een lijst wilt bekijken met de woorden
		moveStuff(2,3, "overhoor_gehelelijst");
	}
	var opt_onbekend = { parameters: (Form.serialize(frm)), onSuccess: (onbekend) };
	var opt_lijst = { parameters: (Form.serialize(frm)), onSuccess: (lijst) };
	var opt_overhoren = { parameters: (Form.serialize(frm)), onSuccess: (overhoren) };
	switch (oefening) {
		case "onbekend":
			new Ajax.Request('chapters_save.php', opt_onbekend);
			break;
		case "lijst":
			new Ajax.Request('chapters_save.php', opt_lijst);
			break;
		default:
			new Ajax.Request('chapters_save.php', opt_overhoren);
	}		
}

function LaadTaal(taalid, curtaal, richting) {

	var par = 'taal='+taalid+"&richting="+richting;
	
	var laden = function (t) {
			LaadScherm('selectie', 0);
	}
	
	
	
	Element.removeClassName(document.getElementById('taal'+curtaal), "hilite");
	Element.addClassName(document.getElementById('taal'+curtaal), "alt");
	Element.removeClassName('taal'+taalid, "alt");
	Element.addClassName('taal'+taalid, "hilite");
	
	new Ajax.Request('selectie_laadtaal.php', { parameters: par, onSuccess: laden });
}


// Laad een voorkeuze. Run (true/false) bepaalt of er ook gelijk doorgeschakeld wordt naar het overhoorvenster.
function LaadVoorkeuze(preset, run) {
	var moven = function (response) {
		popup("Preset", response.responseText, 0.9);
		if (run) moveStuff(2,3);
		else LaadScherm("selectie", 0);
	}
	var par = 'preset='+preset;
	new Ajax.Request('chapters_load.php', { parameters: par, onSuccess: moven });
}

function VerwijderVoorkeuze(preset) {
	var moven = function (response) {
		popup("Verwijderen", response.responseText, 0.9);
		LaadScherm("voorkeuzes", 0);
	}
	var par = 'preset='+preset;
	if (confirm("Weet u zeker dat u de geselecteerde preset wilt verwijderen"))
		new Ajax.Request('voorkeuze_verwijder.php', { parameters: par, onSuccess: moven });
}

// Functie die naar het eindrapport springt als de gebruiker op Stoppen drukt in overhoor.php
function gotoEindrapport() {
	var nieuwwoord = function () {
		document.getElementById('overhoor').innerHTML=loading;
		new Ajax.Updater('overhoor', 'overhoor.php', { asynchronous: true }); 
	}
	new Ajax.Request('setSession.php', { parameters: 'abort=true', onSuccess: nieuwwoord });
}

// Laad een nieuw woord om te overhoren
function nieuwe() {
	var focusshit = function () {
		  document.getElementById('antwoord').focus();
		
	}
	var nieuwwoord = function () {
		document.getElementById('overhoor').innerHTML=loading;
		new Ajax.Updater('overhoor', 'overhoor.php', { asynchronous: true, onComplete: focusshit }); 
	}
	document.forms.overhoorform.antwoord.value=escapen(document.forms.overhoorform.antwoord.value);
	
	new Ajax.Request('setSession.php', { parameters: Form.serialize(document.forms.overhoorform), onSuccess: nieuwwoord });
}


function outputShit() {
	document.getElementById('commerce').innerHTML=loading;
	new Ajax.Updater('commerce', 'outputSession.php');
}

