window.addEventListener("error",function(err){
	try {
		var str="("+err+") ("+JSON.stringify(err)+") "+err.filename+":"+err.lineno+" "+err.error+": "+err.message;
		var xhr=new XMLHttpRequest();
		xhr.open("POST","/zelfoverhoor/error");
		xhr.responseType="text";
		xhr.setRequestHeader("Content-Type", "text/plain");
		xhr.send(str);
	} catch(e){
		console.log("Error sending error:", e);
	}
});

window.onbeforeunload=function(ev){
	if(editorIsOpen){
		var text="Je bent momenteel een vragenset aan het bewerken; weet je zeker dat je het window wilt sluiten?";
		ev.returnValue=text;
		return text;
	}
	return undefined;
};

var questionsets=null;
var currentlyEditing=null;
var editorIsOpen=false;

function getQuestionSets(){
	var xhr=new XMLHttpRequest();
	xhr.onreadystatechange=function(){
		if(xhr.readyState==4){
			questionsets=JSON.parse(xhr.responseText);
			updateQuestionSetsList();
		}
	};
	xhr.open("GET","/zelfoverhoor/docent/sets");
	xhr.responseType="text";
	xhr.send();
}

function updateQuestionSetsList(){
	var tbody=document.getElementById("qsets");
	clearElement(tbody);
	if(questionsets.length==0){
		var tr=document.createElement("tr");
		var td=document.createElement("td");
		td.appendChild(document.createTextNode("Nog geen vragensets..."));
		td.setAttribute("colspan","4");
		tr.appendChild(td);
		tbody.appendChild(tr);
	}
	for(var i=0;i<questionsets.length;i++){
		var tr=document.createElement("tr");

		td=document.createElement("td");
		var a=document.createElement("a");
		a.setAttribute("href",location.origin+"/zelfoverhoor/qs/"+questionsets[i].id);
		a.setAttribute("target","_blank");
		a.innerHTML=questionsets[i].id;
		td.appendChild(a);
		tr.appendChild(td);

		td=document.createElement("td");
		td.appendChild(document.createTextNode(questionsets[i].name));
		tr.appendChild(td);

		td=document.createElement("td");
		td.appendChild(document.createTextNode(questionsets[i].description));
		tr.appendChild(td);

		td=document.createElement("td");
		td.appendChild(document.createTextNode(questionsets[i].questions.length));
		tr.appendChild(td);

		td=document.createElement("td");
		var input=document.createElement("input");
		input.setAttribute("type","button");
		input.setAttribute("value","bewerk");
		input.addEventListener("click",(function(id){return function(){
			doEditQSet(id);
		};})(questionsets[i].id));
		td.appendChild(input);
		tr.appendChild(td);

		td=document.createElement("td");
		var input=document.createElement("input");
		input.setAttribute("type","button");
		input.setAttribute("value","verwijder");
		input.setAttribute("style","color:red");
		input.addEventListener("click",(function(id,name){return function(){
			if(confirm("Weet je zeker dat je de vragenset '"+name+"' wilt verwijderen?")){
				var xhr=new XMLHttpRequest();
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4){
						if(xhr.status==200){
							getQuestionSets();
						} else if(xhr.status==404){
							alert("Vragenset kon niet worden gevonden... Misschien even de pagina herladen?");
						} else {
							alert("Onbekende error: "+xhr.responseText);
						}
					}
				};
				xhr.open("POST","/zelfoverhoor/docent/deleteset");
				xhr.send(id);
			}
		};})(questionsets[i].id,questionsets[i].name));
		td.appendChild(input);
		tr.appendChild(td);

		tbody.appendChild(tr);
	}
}

function clearElement(el){
	var c;
	while((c=el.lastChild))el.removeChild(c);
}

function openBlankSetEditor(){
	document.getElementById("newqsetname").value="";
	document.getElementById("newqsetdescr").value="";
	clearElement(document.getElementById("newquestions"));
	document.getElementById("newqsetform").classList.remove("invisible");
	document.getElementById("newqsetvisible").classList.add("invisible");
	currentlyEditing=null;
	editorIsOpen=true;
}

function doNewQSet(){
	openBlankSetEditor();
	document.getElementById("formheader").innerHTML="Nieuwe vragenset";
	addNewQuestion();
}

function receiveEditQSet(qset){
	openBlankSetEditor();
	document.getElementById("newqsetname").value=qset.name;
	document.getElementById("newqsetdescr").value=qset.description;
	for(var i=0;i<qset.questions.length;i++){
		var div=addNewQuestion();
		var tas=div.getElementsByTagName("textarea");
		tas[0].value=qset.questions[i].q;
		tas[1].value=qset.questions[i].a;
	}
	document.getElementById("formheader").innerHTML="Bewerk vragenset ("+qset.id+")";
	currentlyEditing=qset.id;
}

function doEditQSet(id){
	var xhr=new XMLHttpRequest();
	xhr.onreadystatechange=function(){
		if(xhr.readyState==4){
			if(xhr.status==200){
				var obj;
				try {
					obj=JSON.parse(xhr.responseText);
				} catch(e){
					alert("Server stuurde ongeldige data!");
					return
				}
				receiveEditQSet(obj)
			} else if(xhr.status==404){
				alert("Vragenset lijkt niet te bestaan... Misschien even de pagina herladen?");
			} else {
				alert("Vragenset ophalen lijkt niet te lukken... (error code "+xhr.status+")");
			}
		}
	};
	xhr.open("GET","/zelfoverhoor/qsdata/"+id);
	xhr.send();
}

function closeQSetForm(){
	document.getElementById("newqsetform").classList.add("invisible");
	document.getElementById("newqsetvisible").classList.remove("invisible");
	currentlyEditing=null;
	editorIsOpen=false;
}

function renumberQuestions(){
	var parent=document.getElementById("newquestions");
	var ch=parent.children,nc=ch.length;
	for(var i=0;i<nc;i++){
		ch[i].getElementsByClassName("questionindex")[0].innerHTML=i+1;
	}
}

function addNewQuestion(){
	var parent=document.getElementById("newquestions");
	var number=parent.children.length;

	var div=document.createElement("div");
	div.classList.add("newquestioncontainer");

	if(number>0){
		var insertbtn=document.createElement("input");
		insertbtn.setAttribute("type","button");
		insertbtn.setAttribute("value","Voeg vraag hier toe");
		insertbtn.setAttribute("style","margin-bottom:5px");
		insertbtn.addEventListener("click",function(){
			addNewQuestion();
			var newdiv=parent.children[parent.children.length-1];
			parent.insertBefore(newdiv,div);
			renumberQuestions();
		});
		div.appendChild(insertbtn);
		div.appendChild(document.createElement("br"));
	}

	var span=document.createElement("span");
	span.setAttribute("style","display:inline-block");
	var b=document.createElement("b");
		b.appendChild(document.createTextNode("Vraag "));
		var span2=document.createElement("span");
		span2.classList.add("questionindex");
		span2.innerHTML=number+1;
		b.appendChild(span2);
		b.appendChild(document.createTextNode(":"));
	span.appendChild(b);
	span.appendChild(document.createElement("br"));
	var qta=document.createElement("textarea");
	span.appendChild(qta);
	div.appendChild(span);

	span=document.createElement("span");
	span.setAttribute("style","display:inline-block");
	b=document.createElement("b");
	b.appendChild(document.createTextNode("Antwoord:"));
	span.appendChild(b);
	span.appendChild(document.createElement("br"));
	span.appendChild(document.createElement("textarea"));
	div.appendChild(span);

	span=document.createElement("span");
	var input=document.createElement("input");
	input.setAttribute("type","button");
	input.setAttribute("value","verwijder vraag");
	input.setAttribute("style","vertical-align:50px");
	input.addEventListener("click",function(){
		var index=div.getElementsByClassName("questionindex")[0].innerHTML;
		if(confirm("Weet je zeker dat je vraag "+index+" wilt verwijderen?")){
			parent.removeChild(div);
			renumberQuestions();
		}
	});
	span.appendChild(input);
	div.appendChild(span);

	parent.appendChild(div);
	return div;
}

function submitQSet(){
	var name=document.getElementById("newqsetname").value.trim();
	var description=document.getElementById("newqsetdescr").value.trim();
	if(name==""||description==""){
		alert("Naam en beschrijving zijn nodig.");
		return;
	}

	var div=document.getElementById("newquestions");
	var ch=div.children,nq=ch.length;
	var questions=[];
	for(var i=0;i<nq;i++){
		var tas=ch[i].getElementsByTagName("textarea");
		var q={"q": tas[0].value.trim(), "a": tas[1].value.trim()};
		if(q.q==""||q.a==""){
			alert("Een van de vragen of antwoorden is leeg; graag even vullen of de vraag verwijderen.");
			return;
		}
		questions.push(q);
	}

	var obj={"name": name, "description": description, "questions": questions};

	var xhr=new XMLHttpRequest();
	xhr.onreadystatechange=function(){
		if(xhr.readyState==4){
			if(xhr.status==200){
				getQuestionSets();
				closeQSetForm();
			} else {
				alert("Vragenset lijkt niet succesvol toegevoegd te zijn...\n"+xhr.responseText);
			}
		}
	};
	if(currentlyEditing!=null){
		xhr.open("POST","/zelfoverhoor/docent/editset/"+currentlyEditing);
	} else {
		xhr.open("POST","/zelfoverhoor/docent/addset");
	}
	xhr.send(JSON.stringify(obj));
}

function doMaybeCloseForm(){
	var str;
	if(currentlyEditing)str="Weet je zeker dat je de wijzigingen wilt annuleren?";
	else str="Weet je zeker dat je de nieuwe vragenset wilt weggooien?";
	if(confirm(str)){
		closeQSetForm();
	}
}

window.addEventListener("load",function(){
	getQuestionSets();
});