﻿// Copyright (c) 1997-2009 Wolfgang Henderkes
// http://www.eTOK.de - HomePage of eTraining Operating Kit.
// Lizenz - license: Creative Commons, see http://creativecommons.org/licenses/by-nc-sa/3.0/de/ *
   // * Autor/Rechteinhaber ist Wolfgang Henderkes. - Author/licensor is Wolfgang Henderkes, Germany.
   // * Der Kopf in den Quelltexten muss unverändert erhalten bleiben. - The header of all sources must not be changed.
   // * Das eTOK-Logo muss unverändert erhalten bleiben. - The eTOK-Logo must not be changed.
// Version 1.04 (11.03.2009)

$(document).ready(function()
	{
	// Local variables.
	var oList1 = [];
	var vDragObject1 = "";
	var vList1 = "";

	// Assignment Quiz functions.
	// Action performed, when a 'draggable' is being dragged.
	$(".DragObject").draggable
		({
		helper: 'clone',
		drag: function(ev, ui)
			{
			vDragObject1 = this.id;
			}
		});

	// Action performed, when a 'draggable' was dropped to a 'droppable'.
	$(".DropObject").droppable
		({
		accept: ".DragObject",
		activeClass: 'DropObject-active',
		hoverClass: 'DropObject-hover',
		drop: function(ev, ui)
			{
			vDragObject1 = vDragObject1 + "==" + this.id; 
			gvCounter1 = gvCounter1 + 1;
			document.getElementById('Evaluation').innerHTML = vDOK16 + gvCounter1;
			gvAQ1 += vDragObject1 + "&&";
			hideOnlineHelp();
			}
		});

	// This reacts on a click only, not on drag & drop.
	$("td")
		.filter(".DragObject")
		.click(function()
			{
			showOnlineHelp(vDOK51);
			setTimeout('hideOnlineHelp()', 3000);
			})
		.end();
	// End: Assignment Quiz functions.	
	
	// Sortable Quiz functions.
	$("#LA").sortable({connectWith: ["#LB"]});
	$("#LB").sortable({connectWith: ["#LA"]});
	$("li").filter(".LA, .LB").click(function(){showOnlineHelp(vDOK52); setTimeout('hideOnlineHelp()', 3000);}).end();
	// End: Sortable Quiz functions.

	// Is Puzzle Quiz V1 available?
	if (document.getElementById("PQV1")) 
		{
		goPQV1Table1 = eval("(" + goPQV1Table1 + ")");
		goPQV1Upshot1 = eval("(" + goPQV1Upshot1 + ")");
		goPQV1Table2 = eval("(" + goPQV1Table2 + ")");
		goPQV1Format1 = eval("(" + goPQV1Format1 + ")");

		$("#PQV1").sortable();

		$('div').Sortable
			({
			accept: 'SortableObject',
			helperclass: 'SortableHelp',
			activeclass: 'SortableActive',
			hoverclass: 'SortableHover',
			opacity: 0.5,
			revert: true,
			floats: true,
			tolerance: 'pointer'
			})

		for (var i=0; i<goPQV1Format1.length; i++)
			{
			if (goPQV1Format1[i].quizname==getQuizName())
				{
				document.getElementById("PQV1").style.width = goPQV1Format1[i].puzzlewidth + "px";
				document.getElementById("PQV1").style.height = goPQV1Format1[i].puzzleheight + "px";
				}
			}

		for (var i=0; i<goPQV1Table1.length; i++)
			{
			if (goPQV1Table1[i].quizname==getQuizName()) vList1 += "<img src='ref/" + goPQV1Table1[i].image + "' " + "id='" + goPQV1Table1[i].ref + "' " + "class='SortableObject'>";
			}


		$("#PQV1").html(vList1);
		for (var i=0; i<goPQV1Format1.length; i++)
			{
			if (goPQV1Format1[i].quizname==getQuizName())
				{
				$(".SortableObject").css("width", goPQV1Format1[i].imagewidth + "px");
				$(".SortableObject").css("height", goPQV1Format1[i].imageheight + "px");
				}
			}
		}
	
	// Is Puzzle Quiz V2 available?
	if (document.getElementById("DragTable")) 
		{
		goPQV2DragTable1 = eval("(" + goPQV2DragTable1 + ")");
		goPQV2DropTable1 = eval("(" + goPQV2DropTable1 + ")");
		goPQV2Upshot1 = eval("(" + goPQV2Upshot1 + ")");
		goPQV2TableSize1 = eval("(" + goPQV2TableSize1 + ")");

		setDragTable();
		setDropTable();

		$(".DragTable").draggable
			({
			helper: 'clone',
			drag: function(ev, ui)
				{
				gvDragObject1 = this.id;
				}
			});

		$(".DropTable").droppable
			({
			accept: ".DragTable",
			activeClass: 'DropTableActive',
			hoverClass: 'DropTableHover',
			drop: function(ev, ui)
				{
				var vID1 = parseInt(this.id.substring(9, this.id.length)); // Number of drop id. 
				var vID2 = parseInt(gvDragObject1.substring(9, gvDragObject1.length)); // Number of drag id.
				document.getElementById(this.id).innerHTML = goPQV2DropTable1[vID1] + '<br><img src="ref/' + goPQV2DragTable1[vID2] + '" />';
				}
			});

		// This reacts on a click only, not on drag & drop.
		$("td")
			.filter(".DragTable")
				.click(function()
					{
					document.getElementById("Upshot").innerHTML = vDOK51; // Shows the dragable-ID>.
					})
			.end();
		}

	// Is an ImageShow available?
	if (document.getElementById("ImageShow")) 
		{
		var vIndex1 = 0;

		if (goImageName2)
			{
			goImageName2 = eval("(" + goImageName2 + ")");
			for (var i=0; i<goImageName2.length; i++)
				{
				if (goImageName2[i].showname==getShowName())
					{
					for (var j=0; j<(parseInt(goImageName2[i].max)+1); j++)
						{
						oList1[vIndex1] = goImageName2[i].image + (parseInt(goImageName2[i].min) + j) + "." + goImageName2[i].ext;
						vIndex1++;
						}
					}
				}
			goImageName1 = oList1;
			}

		// Option for next release!!!
/*		if (oList1[0]=="")
			{
			goImageName1 = eval("(" + goImageName1 + ")");
			goImageText1 = eval("(" + goImageText1 + ")");

			for (var i=0; i<goImageName1.length; i++)
				{
				if (goImageName1[i].showname==getShowName())
					{
					oList1[vIndex1] = goImageName1[i].image;
					vIndex1++;
					}
				}
			goImageName1 = oList1;
			oList1 = [];
			vIndex1 = 0;
			for (var j=0; j<goImageText1.length; j++)
				{
				if (goImageText1[j].showname==getShowName())
					{
					oList1[vIndex1] = goImageText1[j].info;
					vIndex1++;
					}
				}
			goImageText1 = oList1;
			}
*/

		// Option to be checked!!!
		// Preload all images.
		for (var i=0; i<goImageName1.length; i++)
			{
			//vList1 += "<img src='ref/" + goImageName1[i] + "' width='10' height='10'>";
			$("#Stage1").html("<img src='ref/" + goImageName1[i] + "' width='10' height='10'>");
			}

		// $("#Stage2").html(vList1);
		// End: Option to be checked!!!

		// Set the first image.
		$("#Stage1").html("<img src='ref/" + goImageName1[0] + "' />");


		// Set delay between two images with mousewheel.
		$("#Controls").mousewheel(function(event, value)
			{
			if (value>0)
				{
				gvMouseWheel1++;
				$("#Timer").html(gvMouseWheel1 + 3 + " s");
				}
			else if (value<0)
				{
				gvMouseWheel1--;
				if (gvMouseWheel1==-3) $("#Timer").html("");
				else $("#Timer").html(gvMouseWheel1 + 3 + " s");
				}
			if (gvMouseWheel1<-3) 
				{
				gbImageShow1 = true;
				$("#FrameNumber").html("");
				$("#Timer").html("");
				}
			});
		$(".ToggleImageShow").toggle(function(){gbImageShow1 = false; startImageShow();}, function(){gbImageShow1 = true;});

		if (self.name.indexOf("Variant1") > -1)
			{
			// Set desired values instead of format_xx.css.
			document.getElementById("ImageShow").style.left = "225px";
			document.getElementById("Controls").style.left = "350px";
			}
		if (self.name.indexOf("Variant2") > -1)
			{
			// Set desired values instead of format_xx.css.
			document.getElementById("ImageShow").style.left = "15px";
			document.getElementById("Controls").style.left = "140px";
			}
		}

	// MCT functions.
	if (goMCTText1) goMCTText1 = eval("(" + goMCTText1 + ")");
	});


// Functions used in Multiple Choice Quiz.
function mcq(v1)
	{
	var oFormular1 = document.forms[v1];
	var vFragenSammlung1 = oFormular1.elements.length;
	if (vFragenSammlung1 > 0) 
		{
		if (oFormular1.frage[0].value > 0) oFormular1.frage[0].checked = true
		else oFormular1.frage[0].checked = false
		}
	if (vFragenSammlung1 > 1)
		{
		if (oFormular1.frage[1].value > 0) oFormular1.frage[1].checked = true
		else  oFormular1.frage[1].checked = false
		}
	if (vFragenSammlung1 > 2)
		{
		if (oFormular1.frage[2].value > 0) oFormular1.frage[2].checked = true
		else oFormular1.frage[2].checked = false
		}
	if (vFragenSammlung1 > 3)
		{
		if (oFormular1.frage[3].value > 0) oFormular1.frage[3].checked = true
		else  oFormular1.frage[3].checked = false
		}
	if (vFragenSammlung1 > 4)
		{
		if (oFormular1.frage[4].value > 0) oFormular1.frage[4].checked = true
		else  oFormular1.frage[4].checked = false
		}
	if (vFragenSammlung1 > 5)
		{
		if (oFormular1.frage[5].value > 0) oFormular1.frage[5].checked = true
		else  oFormular1.frage[5].checked = false
		}
	if (vFragenSammlung1 > 6)
		{
		if (oFormular1.frage[6].value > 0) oFormular1.frage[6].checked = true
		else  oFormular1.frage[6].checked = false
		}
	if (vFragenSammlung1 > 7)
		{
		if (oFormular1.frage[7].value > 0) oFormular1.frage[7].checked = true
		else  oFormular1.frage[7].checked = false
		}
	if (vFragenSammlung1 > 8)
		{
		if (oFormular1.frage[8].value > 0) oFormular1.frage[8].checked = true
		else oFormular1.frage[8].checked = false
		}
	if (vFragenSammlung1 > 9)
		{
		if (oFormular1.frage[9].value > 0) oFormular1.frage[9].checked = true
		else oFormular1.frage[9].checked = false
		}
	}
// End: Functions used in Multiple Choice Quiz.


// Functions used in Assignment Quiz.
// Each table`s field is defined by its id. This function gets the field´s value, using the id to identify the field.
// The field´s value is either text or an image.
function getFieldContent(v1)
	{
	var i;
	var oImageCollection1;
	var oImage1;
	var vChars1;
	var vDropTarget1;
	var vImage1;
	var vPos1;

	oImage1 = document.getElementById(v1);
	oImageCollection1 = oImage1.getElementsByTagName('img');
	if (oImageCollection1.length > 0)
		{
		// Field value is an image.
		for(i in oImageCollection1)
			{
			if(/ref/.test(oImageCollection1[i].src))
				{
				vDropTarget1 = document.getElementById(v1).firstChild.src;
				vPos1 = vDropTarget1.indexOf("/ref/");
				if (vPos1 > 0)
					{
					vChars1 = vDropTarget1.length;
					vImage1 = vDropTarget1.substring(vPos1 +1, vChars1);
					vImage1 = "<img src=" + vImage1 + ">";
					}
				return vImage1;
   				}
			}
		}
	else
		{
		// Field value is text.
		vDropTarget1 = document.getElementById(v1).firstChild.data;
		return vDropTarget1;
		}
	}


function evalAssignmentQuiz()
	{
	var vAssignment1 = "";
	var vAssignment2 = "<table border='4' cellpadding='10' cellspacing='0' rules='rows' style='margin-left: 0px'>";
	var vAssignment3 = "";
	var vAssignment4 = "";
	var vAssignment5 = "";
	var vPos1 = 0;
	var vPos2 = 0;
	var vPos3 = 0;

	document.getElementById('Evaluation').innerHTML = "";
	while(gvAQ1.length>1)
		{
		vPos1 = gvAQ1.indexOf("&&"); // Separator between each assignment.
		if (vPos1 > 0)
			{
			vAssignment1 = gvAQ1.substring(0, vPos1);
			vPos3 = vAssignment1.indexOf("==");
			if (vPos3 > 0)
				{
				vAssignment3 = vAssignment1.substring(0, vPos3); // Drag element.
				vAssignment4 = vAssignment1.substring(vPos3 +2, vAssignment1.length); // Drop element.
				}
			vAssignment3 = getFieldContent(vAssignment3);
			vAssignment4 = getFieldContent(vAssignment4);
			vAssignment5 = "<td>" + vAssignment3 + "</td><td><img src=ref/belongs_01.gif></td><td>" + vAssignment4 + "</td>";
			vPos2 = vUpshot1.toLowerCase().indexOf(vAssignment1.toLowerCase()); // Compare choice with solution.
			if (vPos2 > -1)
				{
				vAssignment2 += "<tr valign=middle><td><img src='ref/right_01.gif'></td>" + vAssignment5 + "</tr>"; 
				}
			else
				{
				vAssignment2 += "<tr valign=middle><td><img src='ref/wrong_01.gif'></td>" + vAssignment5 + "</tr>"; 
				}				
			gvAQ1 = gvAQ1.substring(vPos1 +2, gvAQ1.length);
			}
		}
	vAssignment2 += "</table>"
	gvAQ1 = "";

	// Write evaluation into div 'Evaluation'.
	if (gvCounter1 == 0) document.getElementById('Evaluation').innerHTML = vDOK53;
	else document.getElementById('Evaluation').innerHTML = "<p style='margin-left: 0px'>" + vDOK20 + "</p>" + vAssignment2;
	gvCounter1 = 0; // Reset counter.
	}
// End: Functions used in Assignment Quiz.


// Functions used in Sortable Quiz.
function evalSortableQuiz()
	{
	var vListing1;
	var vListing2;
	var vValue1;
	var vValue2;
	var vEvaluation1 = "";

	// document.getElementById('Evaluation').innerHTML = $('#LA').sortable('toArray') + " + " + $('#LB').sortable('toArray'); // Write both listings.

	vListing1 = $('#LA').sortable('toArray');
	vListing2 = $('#LB').sortable('toArray');
	
	// Listing A is empty.
	if (vListing1.length == 0)
		{
		document.getElementById('Evaluation').innerHTML = vDOK14;
		}
	
	// Check for significant order.
	if (vUpshot2 != "" && vListing1.length != 0)
		{
		for (var i=0; i<vListing1.length; i++)
			{
			vValue1 = vListing1[i];
			vEvaluation1 += vValue1;
			}
		if (vEvaluation1 == vUpshot2)
			{
			document.getElementById('Evaluation').innerHTML = '<img src="ref/right_01.gif"><br>' + vDOK10 + '</p>';
			}
		else
			{
			document.getElementById('Evaluation').innerHTML = '<img src="ref/wrong_01.gif"><br>' + vDOK11 + '</p>';
			}
		}

	// Check for pairs only.
	if (vUpshot2 == "" && vListing1.length != 0)
		{
		for (var i=0; i<vListing1.length; i++)
			{
			vValue1 = vListing1[i];
			j = i + 1;
			if (j < vListing1.length)
				{
				vValue2 = vListing1[j];
				for (var k=0; k<vUpshot1.length; k++)
					{
					if (vUpshot1[k] == vValue1 + vValue2) vEvaluation1 += "<tr valign=middle><td><img src='ref/right_01.gif'></td><td>" + getListingContent(vValue1) + "</td><td><img src='ref/belongs_01.gif'></td><td>" + getListingContent(vValue2) + "</td></tr>";
					if (vUpshot1[k] == vValue2 + vValue1) vEvaluation1 += "<tr valign=middle><td><img src='ref/right_01.gif'></td><td>" + getListingContent(vValue1) + "</td><td><img src='ref/belongs_01.gif'></td><td>" + getListingContent(vValue2) + "</td></tr>";
					}
				}

			}
		if (vEvaluation1 == "") document.getElementById('Evaluation').innerHTML = "<p>" + vDOK11 + "</p>";
		else document.getElementById('Evaluation').innerHTML = "<p>" + vDOK20 + "</p>" + "<table>" + vEvaluation1 + "</table>";
		}
	}


// Each listingŽs value is defined by its id. This function gets the value, using the id to identify the value.
// The listingŽs value is either text or an image.
function getListingContent(v1)
	{
	var i;
	var oImageCollection1;
	var oImage1;
	var vChars1;
	var vDropTarget1;
	var vImage1;
	var vPos1;

	oImage1 = document.getElementById(v1);
	oImageCollection1 = oImage1.getElementsByTagName('img');
	if (oImageCollection1.length > 0)
		{
		// Value is an image.
		for(i in oImageCollection1)
			{
			if(/ref/.test(oImageCollection1[i].src))
				{
				vDropTarget1 = oImageCollection1[0].src;
				vPos1 = vDropTarget1.indexOf("/ref/");
				if (vPos1 > 0)
					{
					vChars1 = vDropTarget1.length;
					vImage1 = vDropTarget1.substring(vPos1 +1, vChars1);
					vImage1 = "<img src=" + vImage1 + ">";
					}
				return vImage1;
   				}
			}
		}
	else
		{
		// Value is text.
		vDropTarget1 = document.getElementById(v1).lastChild.data;
		return vDropTarget1;
		}
	}
// End: Functions used in Sortable Quiz.


// Functions used in Puzzle Quiz.
function getQuizName()
	{
	return document.getElementById("QuizName").firstChild.data
	}


function getPQV1Evaluation()
	{
	for (var i=0; i<goPQV1Upshot1.length; i++)
		{
		if (goPQV1Upshot1[i].quizname==getQuizName()) 
			{
			if (goPQV1Upshot1[i].upshot==$('#PQV1').sortable('toArray')) alert(vDOK18); 
			else alert(vDOK19);
			}
		}
	}


function getPQV1Solution()
	{
	// Local variable.
	var vList1 = "";

	for (var i=0; i<goPQV1Table2.length; i++)
		{
		if (goPQV1Table2[i].quizname==getQuizName()) vList1 += "<img src='ref/" + goPQV1Table2[i].image + "' " + "id='" + goPQV1Table2[i].ref + "' " + "class='SortableObject'>";
		}
	$("#PQV1").html(vList1);
	}


function getPQV2Evaluation()
	{
	// Local variables.
	var bSolution1 = true;
	var oGrafikCollection1;
	var oImage1 = [];
	var oOrder1 = [];
	var vCell1 = 0;
	var vPos1;

	// Get the solution for this quiz out of the total collection in goPQV2Upshot1 and write it in oImage1 and oOrder1. 
	for (var i=0; i<goPQV2Upshot1.length; i++)
		{
		if (goPQV2Upshot1[i].quizname==getQuizName())
			{
			oImage1[vCell1] = goPQV2Upshot1[i].image; // Holds all images used in this quiz.
			oOrder1[vCell1] = goPQV2Upshot1[i].order; // Holds the field position in DropTable. First position is 1 (not 0) at the upper left corner of the table. Every position starts and ends with a comma. 
			vCell1++;
			}
		}

	// Compare the real position of every image to its desired position. 
	oGrafikCollection1 = document.getElementById("DropTable").getElementsByTagName('img');
	for (var i=0; i<oGrafikCollection1.length; i++)
		{
		for (var j=0; j<oImage1.length; j++)
			{
			vPos1 = oGrafikCollection1[i].src.toUpperCase().indexOf(oImage1[j].toUpperCase());
			if (vPos1 >= 0) 
				{
				vCell1 =  i + 1;
				vPos1 = oOrder1[j].indexOf("," + vCell1 + ",");
				if (vPos1 >= 0) 
					{
					break;
					}
				else
					{
					if (j==oImage1.length -1)
						{
						document.getElementById("DropTable" + i).innerHTML = goPQV2DropTable1[i] + '<br><img src="ref/wrong_01.gif">';
						bSolution1 = false;
						}
					}
				}
			else
				{
				if (j==oImage1.length -1)
					{
					vPos1 = oGrafikCollection1[i].src.indexOf("null.png");
					if (vPos1 >= 0) 
						{
						// Nothing to do.
						}
					else
						{
						document.getElementById("DropTable" + i).innerHTML = goPQV2DropTable1[i] + '<br><img src="ref/wrong_01.gif">';
						bSolution1 = false;
						}
					}
				}
			}
		}

	if (bSolution1 == true) alert(vDOK18); // That´s right!
	}


function setPQV2Solution()
	{
	// Local variables.
	var oGrafikCollection1;
	var oImage1 = [];
	var oOrder1 = [];
	var vCell1 = 0;
	var vPos1;

	// Get the solution for this quiz out of the total collection in goPQV2Upshot1 and write it in oImage1 and oOrder1. 
	for (var i=0; i<goPQV2Upshot1.length; i++)
		{
		if (goPQV2Upshot1[i].quizname==getQuizName())
			{
			oImage1[vCell1] = goPQV2Upshot1[i].image; // Holds all images used in this quiz.
			oOrder1[vCell1] = goPQV2Upshot1[i].order; // Holds the field position in DropTable. First position is 1 (not 0) at the upper left corner of the table. Every position starts and ends with a comma. 
			vCell1++;
			}
		}

	//Compare every field id with an entry in oOrder1.
	oGrafikCollection1 = document.getElementById("DropTable").getElementsByTagName('img');
	for (var i=0; i<oGrafikCollection1.length; i++)
		{
		vCell1 = i + 1;
		for (var j=0; j<oOrder1.length; j++)
			{
			vPos1 = oOrder1[j].indexOf("," + vCell1 + ",")
			if (vPos1 >= 0) 
				{
				document.getElementById("DropTable" + i).innerHTML = goPQV2DropTable1[i] + '<br><img src="ref/' + oImage1[j] + '" />';
				}
			}
		}
	}


function setDragTable()
	{
	// Local variables.
	var oList1 = [];
	var vCell1 = 0;
	var vCell2 = 0;
	var vCellOffset1 = 0;
	var vDragTable1 = "";
	var vColumns1;
	var vRows1;

	// Get the images for this quiz out of the total collection in goPQV2DragTable1 and and overwrite goPQV2DragTable1. 
	for (var i=0; i<goPQV2DragTable1.length; i++)
		{
		if (goPQV2DragTable1[i].quizname==getQuizName())
			{
			oList1[vCell2] = goPQV2DragTable1[i].image;
			vCell2++;
			}
		}
	goPQV2DragTable1 = oList1;

	// Get the table size.
	for (var i=0; i<goPQV2TableSize1.length; i++)
		{
		if (goPQV2TableSize1[i].quizname==getQuizName() && goPQV2TableSize1[i].ref=="Drag")
			{
			vColumns1 = goPQV2TableSize1[i].columns;
			vRows1 = goPQV2TableSize1[i].rows;
			}
		}

	// Prepare the DropTable and write it into the page.
	vDragTable1 = '<table cellspacing="0" cellpadding="10" border="0">';
	for (var i=0;i<vRows1;i++) // For each row.
		{
		vCellOffset1 = i * vColumns1;
		vDragTable1 += '<tr>';
		for (var j=0;j<vColumns1;j++) // For each column.
			{
			vCell1 = j + vCellOffset1;
			vDragTable1 += '<td class="DragTable" id="DragTable' + vCell1 + '"><img src="ref/' + goPQV2DragTable1[vCell1] + '" /></td>';
			}
		vDragTable1 += '</tr>';
		}
	vDragTable1 += '</table>';
	document.getElementById("DragTable").innerHTML = vDragTable1;
	}


function setDropTable()
	{
	// Local variables.
	var oInfo1 = [];
	var vCell1 = 0;
	var vCellOffset1 = 0;
	var vColumns1;
	var vDropTable1 = "";
	var vRows1;

	// Get the values for this quiz out of the total collection in goPQV2DropTable1 and write it in oInfo1 and overwrite goPQV2DropTable1.
	for (var i=0; i<goPQV2DropTable1.length; i++)
		{
		if (goPQV2DropTable1[i].quizname==getQuizName())
			{
			oInfo1[vCell1] = goPQV2DropTable1[i].info;
			vCell1++;
			}
		}
	goPQV2DropTable1 = oInfo1;
	vCell1 = 0;

	// Get the table size.
	for (var i=0; i<goPQV2TableSize1.length; i++)
		{
		if (goPQV2TableSize1[i].quizname==getQuizName() && goPQV2TableSize1[i].ref=="Drop")
			{
			vColumns1 = goPQV2TableSize1[i].columns;
			vRows1 = goPQV2TableSize1[i].rows;
			}
		}

	// Prepare the DropTable ans write into the page.
	vDropTable1 = '<table cellspacing="0" cellpadding="0" border="0">';
	for (var i=0; i<vRows1; i++) // For each row.
		{
		vCellOffset1 = i * vColumns1;
		vDropTable1 += '<tr>';
		for (var j=0;j<vColumns1;j++) // For each column.
			{
			vCell1 = j + vCellOffset1;
			if (oInfo1[vCell1]!="")
				{
				vDropTable1 += '<td class="DropTable" id="DropTable' + vCell1 + '">' + goPQV2DropTable1[vCell1] + '<br><img src="ref/target.png" /></td>';
				}
			else  vDropTable1 += '<td id="DropTable' + vCell1 + '"><img src="ref/null.png" /></td>';
			}
		vDropTable1 += '</tr>';
		}
	vDropTable1 += '</table>';
	document.getElementById("DropTable").innerHTML = vDropTable1;
	}
// End: Functions used in Puzzle Quiz. 


// Functions used in ImageShow.
function getShowName()
	{
	return document.getElementById("ShowName").firstChild.data
	}

// Standard delay is 3 seconds between two images. Delay can be in- and decreased using mousewheel (over div "controls") during the show or before show has started.
function startImageShow()
	{
	if (gvMouseWheel1==0) $("#Timer").html("3 s"); // Mousewheel has not moved, use standard delay. 
	gvImageNumber1++;
	if (gvMouseWheel1==-3 || gbImageShow1==true) // Stop show when delay is 0 seconds (gvMouseWheel1 = -3) or toggle switch is used.
		{
		gbImageShow1 = true;
		$("#FrameNumber").html("");
		$("#Timer").html("");
		}
	else
		{
		if (gvImageNumber1<goImageName1.length)
			{
			if (gvMouseWheel1<0) // Deactivate effect with a delay less than 3 seconds (gvMouseWheel1 < 0).
				{
				$("#Stage1").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
				$("#Stage2").html("");
				$("#ImageText").html("");
				if (gvMouseWheel1==-1)  setTimeout("startImageShow()", 2000);
				if (gvMouseWheel1==-2)  setTimeout("startImageShow()", 1000);
				}
			else
				{
				$("#Stage1").animate({opacity: 1.0}, 0).fadeOut('slow', function() {$(this).html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");});
				$("#Stage1").animate({opacity: 1.0}, 0).fadeIn('slow'); 
				$("#Stage2").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");

				// Option for next release!!!
				//if (goImageText1[gvImageNumber1]) $("#ImageText").html(goImageText1[gvImageNumber1]);
				//else $("#ImageText").html("");
				// End: Option...

				setTimeout("startImageShow()", (1000 * gvMouseWheel1) + 3000);
				}
			$("#FrameNumber").html(gvImageNumber1 + "/" + (goImageName1.length - 1));
			}
		else
			{
			gbImageShow1 = true;
			gvMouseWheel1=0;
			gvImageNumber1 = 0;
			$("#FrameNumber").html("");
			$("#Timer").html("");
			$("#Stage1").html("<img src='ref/" + goImageName1[0] + "' />");
			$("#Stage2").html("");
			}
		}
	}


// Show first image.
function firstImage()
	{
	gvImageNumber1 = 0;
	$("#FrameNumber").html("");
	$("#Timer").html("");
	$("#ImageText").html("");
	$("#Stage1").html("<img src='ref/" + goImageName1[0] + "' />");
	$("#Stage2").html("");
	}


// Show next image.
function nextImage()
	{
	gvImageNumber1++;
	if (gvImageNumber1<goImageName1.length)
		{
		if (gbImageShow1==false || gvMouseWheel1<0) // Deactivate effect with image show running or a delay less than 3 seconds (gvMouseWheel1 < 0).
			{
			$("#Stage1").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
			$("#Stage2").html("");
			}
		else
			{
			$("#Stage1").animate({opacity: 1.0}, 0).fadeOut('fast', function() {$(this).html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");});
			$("#Stage1").animate({opacity: 1.0}, 0).fadeIn('fast'); 
			$("#Stage2").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
			}

		// Option for next release!!!
		//if (goImageText1[gvImageNumber1]) $("#ImageText").html(goImageText1[gvImageNumber1]);
		//else $("#ImageText").html("");
		// End: Option...

		$("#FrameNumber").html(gvImageNumber1 + "/" + (goImageName1.length - 1));
		}
	else
		{
		gvImageNumber1 = 0;
		$("#FrameNumber").html("");
		$("#Timer").html("");
		$("#Stage1").html("<img src='ref/" + goImageName1[0] + "' />");
		$("#Stage2").html("");
		}
	}


// Show previous image.
function previousImage()
	{
	gvImageNumber1--;
	if (gvImageNumber1>0)
		{
		if (gbImageShow1==false || gvMouseWheel1<0)  // Deactivate effect with image show running or a delay less than 3 seconds (gvMouseWheel1 < 0).
			{
			$("#Stage1").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
			$("#Stage2").html("");
			}
		else
			{
			$("#Stage1").animate({opacity: 1.0}, 0).fadeOut('fast', function() {$(this).html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");});
			$("#Stage1").animate({opacity: 1.0}, 0).fadeIn('fast'); 
			$("#Stage2").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
			}

		// Option for next release!!!
		//if (goImageText1[gvImageNumber1]) $("#ImageText").html(goImageText1[gvImageNumber1]);
		//else $("#ImageText").html("");
		// End: Option...

		$("#FrameNumber").html(gvImageNumber1 + "/" + (goImageName1.length - 1));
		}
	else
		{
		gvImageNumber1 = 0;
		$("#FrameNumber").html("");
		$("#Timer").html("");
		$("#ImageText").html("");
		$("#Stage1").html("<img src='ref/" + goImageName1[0] + "' />");
		$("#Stage2").html("");
		}
	}


// Show last image.
function lastImage()
	{
	gvImageNumber1 = goImageName1.length -1;
	$("#Stage1").animate({opacity: 1.0}, 0).fadeOut('fast', function() {$(this).html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");});
	$("#Stage1").animate({opacity: 1.0}, 0).fadeIn('fast'); 
	$("#Stage2").html("<img src='ref/" + goImageName1[gvImageNumber1] + "' />");
	$("#FrameNumber").html(gvImageNumber1 + "/" + (goImageName1.length - 1));
	}
// End: Functions used in ImageShow.


// Functions used in MCT.
function getMCTEvaluation(v1)
	{
	// Local variables.
	var oForm1;
	var oList1;
	var vIndex1;
	var vMaxPoints1;
	var vPoints1;
	var vQuestion1;
	var vResult1;
	var vSingleMCT1;
	var vTotalPoints1;
	var vZ1;

	oList1 = [];
	vIndex1 = 0;
	vZ1 = 0;
	oForm1 = document.forms[0];
	vTotalPoints1 = 0;
	vResult1 = 0;
	vMaxPoints1 = 0;
	vSingleMCT1 = vDOK20 + '<br><table border="0" width="100%">';
	
	// Get optional informations for wrong answers.
	for (var j=0; j<goMCTText1.length; j++)
		{
		if (goMCTText1[j].quizname==getQuizName())
			{
			oList1[vIndex1] = goMCTText1[j].info;
			vIndex1++;
			}
		}

	for (var i=0; i<oForm1.elements.length; i++)
		{
		vZ1 += 1;
		vQuestion1 = (oForm1.choice[i].checked) ? "ja" : "nein";
		if (vQuestion1 == "nein")
			{
			oForm1.choice[i].checked = true
			}
		vPoints1 = oForm1.choice[i].value;
		if (vQuestion1 == "nein")
			{
			oForm1.choice[i].checked = false // Reset.
			}
		vPoints1 = parseFloat (vPoints1);
		if (vPoints1 > 0) vMaxPoints1 += vPoints1;
		if (vQuestion1 == "ja") 
			{
			if (vPoints1 > 0) vSingleMCT1 +=  "<tr><td width='30'><img src='ref/right_01.gif' alt=" + vDOK18 + "></td><td>" + vDOK49 + vZ1 + ': ' + vPoints1 + vDOK23 + "</td></tr>";
			else vSingleMCT1 +=  "<tr><td width='30'><img src='ref/wrong_01.gif' alt=" + vDOK19 + "></td><td>" + vDOK49 + vZ1 + ': ' + vPoints1 + vDOK23 + oList1[i] + "</td></tr>";
			vTotalPoints1 += vPoints1;
			}
		}

	vSingleMCT1 +=  "</table><br>";
	vResult1 = vTotalPoints1 / vMaxPoints1;
	if (isNaN(vResult1) == true) vResult1 = 0; 
	vResult1 = vResult1 * 100;
	vResult1 = Math.round(vResult1); 
	vSingleMCT1 +=  vDOK21 + vTotalPoints1 + vDOK23;
	vSingleMCT1 +=  vDOK22 + vMaxPoints1 + vDOK23;
	vSingleMCT1 +=  "<br>" + vDOK24 + vResult1 + vDOK25;
	seteTOKTotalMCT(v1 + '::' + vTotalPoints1 + '::' + vMaxPoints1);
	document.getElementById('Evaluation').innerHTML = vSingleMCT1;
	}

function getTotalEvaluationMCT()
	{
	// Local variables.
	var vAllMCT1;
	var vMaxPoints1;
	var vMaxPoints2;
	var vPart1;
	var vPoints1;
	var vPoints2;
	var vPos1;
	var vPos2;
	var vPos3;
	var vResult1;
	var vSeparator1;
	var vTitle1;

	vAllMCT1 = geteTOKTotalMCT();
	if (vAllMCT1=="") vTotalMCT1 = vDOK29;
	else
		{
		vPoints2 = "0";
		vMaxPoints2 = "0";
		vPoints1 = 0;
		vResult1 = 0;
		vMaxPoints1 = 0;
		if (vAllMCT1.length > 0)
			{
			vTotalMCT1 = '<table border="1" cellspacing="0"><tr><td>' + vDOK26 + '</td><td align="center">' + vDOK27 + '</td><td align="center">' + vDOK28 + '</td></tr>';
			}
		while (vAllMCT1.length > 0)
			{
			vSeparator1 = "::";
			vPos1 = vAllMCT1.indexOf(vSeparator1);
			if (vPos1 < 0) 
				{
				alert(vDOK30);
				vAllMCT1 = "";
				}
			else
				{
				vPos3 = vAllMCT1.indexOf(";;", vPos1);
				vTitle1 = vAllMCT1.substring (0, vPos1);
				vPart1 = vAllMCT1.substring (vPos1+2, vPos3);
				vPos2 = vPart1.indexOf(vSeparator1);
				vPoints1 = vPart1.substring (0, vPos2);
				vMaxPoints1 = vPart1.substring (vPos2+2, vPos3);
				vPoints1 = parseFloat (vPoints1);
				vMaxPoints1 = parseFloat (vMaxPoints1);
				vPoints2 = parseFloat (vPoints2);
				vMaxPoints2 = parseFloat (vMaxPoints2);
				vPoints2 = vPoints2 + vPoints1;
				vMaxPoints2 = vMaxPoints2 + vMaxPoints1;
				vAllMCT1 = vAllMCT1.substring (vPos3+2, vAllMCT1.length);
				vTotalMCT1 += '<tr>' +
				'<td valign="top"><br>' + vTitle1 + '<br><br>' +
				'<td valign="middle" align="center">' + vPoints1 + '</td>' +
				'<td valign="middle" align="center">' + vMaxPoints1 + '</td></tr>';
				}
			}
		vResult1 = vPoints2 / vMaxPoints2;
		if (isNaN(vResult1)== true) vResult1 = 0; 
		vResult1 = vResult1 * 100;
		vResult1 = Math.round(vResult1); 
		vTotalMCT1 += '<tr>' +
		'<td valign="top"><br>' + vDOK21 + '<br><br>' +
		'<td valign="middle" align="center">' + vPoints2 + '</td>' +
		'<td valign="middle" align="center">' + vMaxPoints2 + '</td></tr>';
		vTotalMCT1 += '</table>' + vDOK24 + vResult1 + vDOK25;
		}
	}

// End: Functions used in MCT.
