// global settings
// settings concerning the case simulation are in the file "config.js"

/**
 * sub-directory where the renderer for the page-types are stored. This
 * directory is relative to the base-directory of the light-player-files.
 */
var lfbase = "lf";

var fokussiert = "null";

// only used for logging
var jsessionid = "";

var startCtl = false;
var recordshown = false;

/**
 * case, that is loaded on startup. This values is overwritten, when a case is
 * selected in the case selection list.
 */
var casenr = 123; // 123 is an example value

// for TherapyLoopArray
var start_therapyloop_page = new Array();
var end_therapyloop_page = new Array();
var noFeedback;

var events = new Object();

/**
 * Is initialized with an Array of page-objects, when a case is selected. Each
 * element in this array has 2 important attributs: - type contains a number,
 * indicating the type of the page (e.g. Question, pick list, text,
 * introduction) - res contains a number, indicating the resources, that are
 * used to render this type of page the number is used during rendering to fetch
 * the language and category dependent resource-strings that are displayed in
 * the user interface.
 */
var pages;

/**
 * Is initialized with an Array of indices into the page-array. A block in a
 * case is are structural component like medical history, physical examination
 * ...
 */
var blocks;
var changecontent = false;

// Values used for experimental score calculation
var score_min = 0; // Absolute minimum score in case
var score_max = 0; // Absolute maximaum score in case
var score = 0; // Current score of learner during session

/**
 * Is Initialized with the language resources, that are used during rendering.
 */
var res;

/* Patient record */
var record; // Patient record; Array, that contains one element for each medical
// category
// The attribute "section" contains the index of the section, that is selected
var record_items; // Object containing all available medical items during the
// session
var refcount = 0; // Counter, that is used for indexing the
// record_items-Object.
// refcount is incremented for each item, that is added to the record

// Browser-Check; used for layerwrite
var ns4 = (document.layers) ? true : false;
var ie4 = (document.all) ? true : false;

/*
 * Current Mode 1 - Request 2 - Feedback
 */
var current;
var currentpos; // Index in pages Array
var pagecount; // No of Pages in case
var loopcount; // No of therapy loops in case
var blockcount; // No of blocks in case

var init = true; // Fall wird neu gestartet
/**
 * Initializes the patient record. called when a new case is selected
 */
function initRecord() {
	// Create all record sections
	record = new Object();
	record[0] = new Object();
	record[0].size = 0;
	record[0].page = 0;
	record[1] = new Object();
	record[1].size = 0;
	record[1].page = 0;
	record[2] = new Object();
	record[2].size = 0;
	record[2].page = 0;
	record[3] = new Object();
	record[3].size = 0;
	record[3].page = 0;
	record[4] = new Object();
	record[4].size = 0;
	record[4].page = 0;
	record[5] = new Object();
	record[5].size = 0;
	record[5].page = 0;
	// Initially section with index "0" is selected
	record.section = 0;
	record.page = 0;
	record_items = new Object();
	refcount = 0;
}

function getNoFeedback() {
	return noFeedback;
}

// Indicates if the surveylink should be shown
function getShowFragebogen() {
	return show_surveyLink;
}

// Returns the survey url including the surveyid
function getSurveyURL() {
	return surveyURL + "?surveyid=" + top.data.survey.id;
}

// Returns the patient record
function getRecordData() {
	return record;
}

// Returns the item with a specific refid
function getRecordItem(refid) {
	return record_items[refid];
}

// Indicates if comments should be displayed
function isShowComments() {
	return showcomments;
}

// Experimental
function isShowNecessary() {
	return shownecessary;
}

// Returns the current page
function getCurrentPage() {
	return pages[currentpos];
}

function getCurrentPageNumber() {
	return currentpos;
}

// Renders the current page
// The current page is the page at the index 'currentpos'
function showCurrentPage() {
	showRenderer();
}

// Indicates, if feedback to selected items should be given for all items
function isCompleteFeedback() {
	return completeFeedback;
}

// Sets the language. Currently the languages 'de' and 'en' are supported
function setLanguage(code) {
	lang = code;
	loadLanguage();
}

// Returns the language code
function getLanguage() {
	return lang;
}

// Returns the No of the selected case
function getCaseNr() {
	return casenr;

}

// adds the selected attribute to an item
function addSelectedItem(obj) {
	obj.selected = true;
}

// Returns the number of pages ini the case
function getPageCount() {
	return pagecount;
}

var newFeedbackSection = false;

function addFeedbackSection() {
	newFeedbackSection = true;
}

/**
 * Adds one item to the patient record. Is ususally called after selection items
 * from the pick-list.
 */
function addRecordItem(page, item) {
	// items, that are not selected and are irrelevant
	// are not inserted into the patient record
	// if(! item.selected && item.status == 103)
	// return;
	refcount++;
	item.refid = refcount;
	record_items[refcount] = item;
	item.loop = page.loop;
	item.ctl = page.ctl;
	// determine section
	item.section = translateResource(page.res);
	// add item into section
	addSectionItem(record[item.section], item);
	// update score [experimental]
	if (item.status == 101) { // increment score, if item is necessary
		// (status=101)
		score++;
	} else if (item.status == 103) { // decrement score, if item is
		// irrelevant (status=103)
		score--;
	}
}

function endFeedbackSection() {
	updateScoreMeter(score_min, score_max, score);
}

// Returns the language resources for a specific resource and id
function getVoc(res, id) {
	return top.data.voc[translateResource(res)][id];
}

// Returns the record section index for a particular item resource
// e. g. if the page has resource 1, then it is put in section 0 in the patient
// record

// 0: Medical History
// 1: Physical Examination
// 2: Lab Tests
// 3: Technical Examination
// 4: Diagnosis
// 5: Therapies

function translateResource(res) {
	switch (res) {
	case 1:
		return 0;
		break;
	case 2:
		return 1;
		break;
	case 6:
		return 3;
		break;
	case 3:
	case 8:
		return 4;
		break;
	case 7:
		return 2;
		break;
	case 9:
		return 5;
		break;
	}
	return -1;
}

/**
 * Adds an Item to the patient record in the section, that is given as
 * parameter. "section" should be an elemente of the object "record" that is
 * declared in this file.
 */
function addSectionItem(section, item) {
	if (newFeedbackSection == true) {
		if (section[0]) {
			section[section.size] = new Object();
			section[section.size++].separator = true;
		}
		newFeedbackSection = false;
	}
	section[section.size++] = item;
}

/**
 * Valid Types 0 - Vorstellung 1 - Auswahl 2 - Text 3 - Frage 4 - Medien
 * 
 * Valid Resources
 * 
 * 0 - Vorstellung 1 - Anamnese 2 - K�rperliche Untersuchung 3 -
 * Verdachtsdiagnose 4 - Frage 5 - Zusammenfassung 6 - Technische Untersuchung 7 -
 * Labor 8 - Arbeitsdiagnose 9 - Therapie 11 - Einleitung DTS 12 - Klinischer
 * Verlauf 13 - Prognose 14 - Zusammenfassung
 */

/**
 * reset all information about page-visits in the pages-array.
 */
function resetPages() {
	var i = 0;
	while (pages[i]) {
		pages[i].visited = false;
		pages[i].finished = false;
		pages[i].additional_select = false;
		i++;
	}
}

/**
 * Converts the javascript object model of the case into pages This function is
 * crucial to the light-player, because it contains the logic that is used for
 * converting the CAMPUS case-structure into a set of pages. Replacing this
 * function by another case-layout-strategy can result in a completely different
 * approach.
 */

function getCaseTitle() {
	return top.data.pat.title;
}

function createPageLinks() {

	if (top.onlyQuestions == false) {
		// zz for TherapyLoopArrayIndexfor TherapyLoopArrayIndex
		var zz = 1;
		// soll erstmal gleich 10 gesetzt werden, spaeter wird der richtige
		// wert reingeschrieben. Notwendig fuer die korrekte Anzeige der
		// Nav-Schleifen
		start_therapyloop_page[1] = (20);
		var pat = top.data.pat;
		pages = new Object();
		blocks = new Object();
		var i = -1;
		var j = -1;
		var loopcount = 0;

		/* Vorstellung */
		i = appendEventQuestions(i, pat, 0, loopcount);
		pages[++i] = pat;
		pages[i].type = 0;
		pages[i].res = 0;
		blocks[++j] = i;
		pages[i].loop = loopcount;
		i = appendEventQuestions(i, pat, 42, loopcount);

		/* Anamnese */
		if (pat.hist.sum || pat.hist[0]) {
			i = appendEventQuestions(i, pat.hist, 1, loopcount);
			if (pat.hist[0]) {
				pages[++i] = pat.hist;
				pages[i].type = 1;
				pages[i].res = 1;
				pages[i].loop = loopcount;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.hist, loopcount);
			} else {
				blocks[++j] = i + 1;
			}
			if (pat.hist.sum) {
				pages[++i] = new Object();
				pages[i].sum = pat.hist.sum;
				pages[i].type = 2;
				pages[i].res = 1;
				pages[i].loop = loopcount;
			}
			i = appendEventQuestions(i, pat.hist, 3, loopcount);
			i = appendEventQuestions(i, pat.hist, 4, loopcount);
		}

		/* Koerperliche Untersuchung */
		if (pat.phys && (pat.phys.sum || pat.phys[0])) {
			i = appendEventQuestions(i, pat.phys, 5, loopcount);
			if (pat.phys[0]) {
				pages[++i] = pat.phys;
				pages[i].type = 1;
				pages[i].res = 2;
				pages[i].loop = loopcount;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.phys, loopcount);
			} else {
				blocks[++j] = i + 1;
			}
			if (pat.phys.sum) {
				pages[++i] = new Object();
				pages[i].sum = pat.phys.sum;
				pages[i].type = 2;
				pages[i].loop = loopcount;
				pages[i].res = 2;
			}
			i = appendEventQuestions(i, pat.phys, 7, loopcount);
			i = appendEventQuestions(i, pat.phys, 8, loopcount);
		}

		// Therapiekette 0 / Verdachtsdiagnose & Akuttherapie

		i = appendEventQuestions(i, pat.loops[0], 66, loopcount);
                /*
		pages[++i] = pat.loops[0].diag;
		pages[i].type = 1;
		pages[i].res = 3;
		pages[i].loop = loopcount;
		blocks[++j] = i;
                */
		i = appendPartQuestions(i, pat.loops[0].diag, loopcount);
		i = appendEventQuestions(i, pat.loops[0], 68, loopcount);
		i = appendEventQuestions(i, pat.loops[0], 70, loopcount);

		if (pat.loops[0].therap[0] || pat.loops[0].therap.sum) {
			i = appendEventQuestions(i, pat.loops[0], 73, loopcount);
			// Therapie
			if (pat.loops[0].therap[0]) {
				pages[++i] = pat.loops[0].therap;
				pages[i].type = 1;
				pages[i].loop = loopcount;
				pages[i].res = 9;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.loops[0].therap, loopcount);
				i = appendEventQuestions(i, pat.loops[0], 75, loopcount);
				i = appendEventQuestions(i, pat.loops[0], 77, loopcount);
			}

			if (pat.loops[0].therap.sum) {
				pages[++i] = new Object();
				pages[i].sum = pat.loops[loopcount].therap.sum;
				pages[i].type = 2;
				pages[i].res = 9;
			}

		}

		// Weitere Therapieketten
		loopcount = 1;
		while (pat.loops[loopcount] != undefined) {
			start_therapyloop_page[zz] = (i + 1);

			pages[++i] = pat.loops[loopcount];
			pages[i].type = 2;
			pages[i].loop = loopcount;
			pages[i].care = pat.loops[loopcount].care;
			pages[i].time = pat.loops[loopcount].time;
			pages[i].res = 11;
			blocks[++j] = i;

			i = appendEventQuestions(i, pat.loops[loopcount], 39, loopcount);
			if (pat.loops[loopcount].desc) {
				/* Einleitung DTS */

				// Die Fragen mit Items 16 und 17 gehoeren hier nicht hin,
				// glaub ich...
				// Sie muessen das Playerereigniss "Frage nach Betreuungsart"
				// umschliessen...
				i = appendEventQuestions(i, pat.loops[loopcount], 16, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 17, loopcount);
			}

			if (pat.loops[loopcount].lab) {
				// Labor
				i = appendEventQuestions(i, pat.loops[loopcount], 21, loopcount);
				pages[++i] = pat.loops[loopcount].lab;
				pages[i].type = 1;
				pages[i].loop = loopcount;
				pages[i].res = 7;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.loops[loopcount].lab, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 23, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 20, loopcount);
			}

			if (pat.loops[loopcount].tech) {
				// Technische Untersuchung
				i = appendEventQuestions(i, pat.loops[loopcount], 17, loopcount);
				pages[++i] = pat.loops[loopcount].tech;
				pages[i].type = 1;
				pages[i].loop = loopcount;
				pages[i].res = 6;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.loops[loopcount].tech, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 19, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 24, loopcount);
			}

			if (pat.loops[loopcount].phys) {
				// Koerperliche Untersuchung
				i = appendEventQuestions(i, pat.loops[loopcount], 25, loopcount);
				pages[++i] = pat.loops[loopcount].phys;
				pages[i].type = 1;
				pages[i].loop = loopcount;
				pages[i].res = 2;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.loops[loopcount].phys, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 27, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 28, loopcount);
			}

			if (pat.loops[loopcount].diag[0]) {
				// Arbeitsdiagnose
				i = appendEventQuestions(i, pat.loops[loopcount], 9, loopcount);
				pages[++i] = pat.loops[loopcount].diag;
				pages[i].type = 1;
				pages[i].loop = loopcount;
				pages[i].res = 8;
				blocks[++j] = i;
				i = appendPartQuestions(i, pat.loops[loopcount].diag, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 11, loopcount);
			}

			if (pat.loops[loopcount].therap.sum
					|| pat.loops[loopcount].therap[0]) {
				// Therapie
				i = appendEventQuestions(i, pat.loops[loopcount], 29, loopcount);
				if (pat.loops[loopcount].therap[0]) {
					pages[++i] = pat.loops[loopcount].therap;
					pages[i].type = 1;
					pages[i].res = 9;
					pages[i].loop = loopcount;
					blocks[++j] = i;
					i = appendPartQuestions(i, pat.loops[loopcount].therap,
							loopcount);
					i = appendEventQuestions(i, pat.loops[loopcount], 30,
							loopcount);
					i = appendEventQuestions(i, pat.loops[loopcount], 31,
							loopcount);
				}
				if (pat.loops[loopcount].therap.sum) {
					pages[++i] = new Object();
					pages[i].sum = pat.loops[loopcount].therap.sum;
					pages[i].type = 2;
					pages[i].res = 9;
				}
			}
			if (pat.loops[loopcount].ctl) {
				i = appendEventQuestions(i, pat.loops[loopcount], 32, loopcount);
				if (pat.loops[loopcount].ctl.lab) {
					// Lab
					pages[++i] = pat.loops[loopcount].ctl.lab;
					pages[i].ctl = true;
					pages[i].type = 1;
					pages[i].loop = loopcount;
					pages[i].res = 7;
					blocks[++j] = i;
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.lab,
							loopcount);
				}

				if (pat.loops[loopcount].ctl.tech) {
					// Technische Untersuchung
					pages[++i] = pat.loops[loopcount].ctl.tech;
					pages[i].ctl = true;
					pages[i].type = 1;
					pages[i].loop = loopcount;
					pages[i].res = 6;
					blocks[++j] = i;
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.tech,
							loopcount);
				}

				if (pat.loops[loopcount].ctl.phys) {
					// Koerperliche Untersuchung
					pages[++i] = pat.loops[loopcount].ctl.phys;
					pages[i].ctl = true;
					pages[i].type = 1;
					pages[i].loop = loopcount;
					pages[i].res = 2;
					blocks[++j] = i;
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.phys,
							loopcount);
				}
				i = appendEventQuestions(i, pat.loops[loopcount], 33, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 34, loopcount);

			}
			if (pat.loops[loopcount].prog) {
				// Verlauf
				pages[++i] = new Object();
				pages[i].sum = pat.loops[loopcount].prog;
				pages[i].type = 2;
				pages[i].loop = loopcount;
				pages[i].res = 12;
				blocks[++j] = i;
			}
			i = appendEventQuestions(i, pat.loops[loopcount], 35, loopcount);
			i = appendEventQuestions(i, pat.loops[loopcount], 36, loopcount);
			i = appendEventQuestions(i, pat.loops[loopcount], 40, loopcount);

			loopcount++;
			end_therapyloop_page[zz] = (i);
			zz++;
		}

		if (pat.prognosis) {
			// Prognose
			pages[++i] = new Object();
			pages[i].sum = pat.prognosis;
			pages[i].loop = loopcount;
			pages[i].type = 2;
			pages[i].res = 13;
			blocks[++j] = i;
		}

		if (pat.sum) {
			// Zusammenfassung
			pages[++i] = new Object();
			pages[i].sum = pat.sum;
			pages[i].type = 2;
			pages[i].loop = loopcount;
			pages[i].res = 14;
			blocks[++j] = i;
		}

		pagecount = i + 1;
		blockcount = j + 1;
	} // if onlyQuestions == false

	else {
		// zz for TherapyLoopArrayIndexfor TherapyLoopArrayIndex
		var zz = 1;
		// soll erstmal gleich 10 gesetzt werden, spaeter wird der richtige
		// wert reingeschrieben. Notwendig fuer die korrekte Anzeige der
		// Nav-Schleifen
		start_therapyloop_page[1] = (20);
		var pat = top.data.pat;
		pages = new Object();
		blocks = new Object();
		var i = -1;
		var j = -1;
		var loopcount = 0;

		/* Vorstellung */
		i = appendEventQuestions(i, pat, 0, loopcount);

		i = appendEventQuestions(i, pat, 42, loopcount);

		/* Anamnese */
		if (pat.hist.sum || pat.hist[0]) {
			i = appendEventQuestions(i, pat.hist, 1, loopcount);
			if (pat.hist[0]) {
				i = appendPartQuestions(i, pat.hist, loopcount);
			} else {
				blocks[++j] = i + 1;
			}
			if (pat.hist.sum) {
			}
			i = appendEventQuestions(i, pat.hist, 3, loopcount);
			i = appendEventQuestions(i, pat.hist, 4, loopcount);
		}

		/* Koerperliche Untersuchung */
		if (pat.phys && (pat.phys.sum || pat.phys[0])) {
			i = appendEventQuestions(i, pat.phys, 5, loopcount);
			if (pat.phys[0]) {
				i = appendPartQuestions(i, pat.phys, loopcount);
			} else {
				blocks[++j] = i + 1;
			}
			if (pat.phys.sum) {
			}
			i = appendEventQuestions(i, pat.phys, 7, loopcount);
			i = appendEventQuestions(i, pat.phys, 8, loopcount);
		}

		// Therapiekette 0 / Verdachtsdiagnose & Akuttherapie

		i = appendEventQuestions(i, pat.loops[0], 66, loopcount);
		i = appendPartQuestions(i, pat.loops[0].diag, loopcount);
		i = appendEventQuestions(i, pat.loops[0], 68, loopcount);
		i = appendEventQuestions(i, pat.loops[0], 70, loopcount);

		if (pat.loops[0].therap[0]) {
			i = appendEventQuestions(i, pat.loops[0], 73, loopcount);
			// Therapie
			i = appendPartQuestions(i, pat.loops[0].therap, loopcount);
			i = appendEventQuestions(i, pat.loops[0], 75, loopcount);
			i = appendEventQuestions(i, pat.loops[0], 77, loopcount);
		}

		// Weitere Therapieketten
		loopcount = 1;
		while (pat.loops[loopcount] != undefined) {
			start_therapyloop_page[zz] = (i + 1);
			i = appendEventQuestions(i, pat.loops[loopcount], 39, loopcount);
			if (pat.loops[loopcount].desc) {
				/* Einleitung DTS */
				// Die Fragen mit Items 16 und 17 gehoeren hier nicht hin,
				// glaub ich...
				// Sie muessen das Playerereigniss "Frage nach Betreuungsart"
				// umschliessen...
				i = appendEventQuestions(i, pat.loops[loopcount], 16, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 17, loopcount);
			}

			if (pat.loops[loopcount].lab) {
				// Labor
				i = appendEventQuestions(i, pat.loops[loopcount], 21, loopcount);
				i = appendPartQuestions(i, pat.loops[loopcount].lab, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 23, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 20, loopcount);
			}

			if (pat.loops[loopcount].tech) {
				// Technische Untersuchung
				i = appendEventQuestions(i, pat.loops[loopcount], 17, loopcount);
				i = appendPartQuestions(i, pat.loops[loopcount].tech, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 19, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 24, loopcount);
			}

			if (pat.loops[loopcount].phys) {
				// Koerperliche Untersuchung
				i = appendEventQuestions(i, pat.loops[loopcount], 25, loopcount);
				i = appendPartQuestions(i, pat.loops[loopcount].phys, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 27, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 28, loopcount);
			}

			if (pat.loops[loopcount].diag[0]) {
				// Arbeitsdiagnose
				i = appendEventQuestions(i, pat.loops[loopcount], 9, loopcount);
				i = appendPartQuestions(i, pat.loops[loopcount].diag, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 11, loopcount);
			}

			if (pat.loops[loopcount].therap[0]
					|| pat.loops[loopcount].therap.sum) {
				// Therapie
				i = appendEventQuestions(i, pat.loops[loopcount], 29, loopcount);
				i = appendPartQuestions(i, pat.loops[loopcount].therap,
						loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 30, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 31, loopcount);
			}
			if (pat.loops[loopcount].ctl) {
				i = appendEventQuestions(i, pat.loops[loopcount], 32, loopcount);
				if (pat.loops[loopcount].ctl.lab) {
					// Lab
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.lab,
							loopcount);
				}

				if (pat.loops[loopcount].ctl.tech) {
					// Technische Untersuchung
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.tech,
							loopcount);
				}

				if (pat.loops[loopcount].ctl.phys) {
					// Koerperliche Untersuchung
					i = appendPartQuestions(i, pat.loops[loopcount].ctl.phys,
							loopcount);
				}
				i = appendEventQuestions(i, pat.loops[loopcount], 33, loopcount);
				i = appendEventQuestions(i, pat.loops[loopcount], 34, loopcount);

			}
			if (pat.loops[loopcount].prog) {
				// Verlauf
			}
			i = appendEventQuestions(i, pat.loops[loopcount], 35, loopcount);
			i = appendEventQuestions(i, pat.loops[loopcount], 36, loopcount);
			i = appendEventQuestions(i, pat.loops[loopcount], 40, loopcount);
			end_therapyloop_page[zz] = (i);
			loopcount++;

			zz++;
		}

		if (pat.prognosis) {
			// Prognose
		}

		if (pat.sum) {
			// Zusammenfassung
		}

		pagecount = i + 1;
		blockcount = j + 1;

	}
}

/* calculates the minimum and maximum score in the case [experimental] */
function calculateScore() {
	var i = 0;
	score_min = 0;
	score_max = 0;
	score = 0;
	while (pages[i]) {
		pages[i].score_min = 0;
		pages[i].score_max = 0;
		switch (pages[i].type) {
		case 1:
			addSelectionScore(pages[i]);
			break;
		case 3:
			addQuestionScore(pages[i]);
		}
		i++;
	}
}

/**
 * Adds the values of one page to the current values of minimum and maximum
 * score [experimental]
 */
function addSelectionScore(page) {
	var i = 0;
	while (page[i]) {
		if (page[i].status == 101) {
			page.score_max++;
		} else if (page[i].status == 103) {
			page.score_min++;
		}
		i++;
	}
	score_min += page.score_min;
	score_max += page.score_max;
}

// used for scoring questions [experimatal, not used]
function addQuestionScore(page) {

}

/**
 * Order the items on all pages If categories are present, the items are ordered
 * in categories
 */
function orderAllPageItems() {
	var i = 0;
	while (pages[i]) {
		if (pages[i].type == 1)
			orderItems(pages[i]);
		i++;
	}
}

/**
 * Order items on the given page.
 */
function orderItems(page) {

	if (page[0] && page[0].cat) {
		var i = 0;
		var size = getSize(page);
		var dummy = new Object();
		var keys = new Array(size);
		while (page[i]) {
			keys[i] = normNumber(999999, page[i].cat) + ":"
					+ normNumber(999999, page[i].sort);
			// alert("'"+keys[i]+"'");
			dummy[keys[i]] = page[i];
			i++;
		}
		keys.sort();
		i = 0;
		while (keys[i]) {
			page[i] = dummy[keys[i]];
			i++;
		}
	}
}

function normNumber(high, num) {
	var temp = num;
	if (temp == 0)
		temp = 1;
	while (temp <= high) {
		num = " " + num;
		temp = temp * 10;
	}
	return num;
}

/**
 * Shuffle items on all pages, if page.type=1 => for MultipleChoice Questions
 */
function shuffleAllPageItems() {
	var i = 0;
	while (pages[i]) {
		if ((pages[i].type == 1 && shuffleitems) || pages[i].res == 9
				|| pages[i].res == 8)
			shuffleItems(pages[i]);
		i++;
	}
}

/**
 * Shuffle items on given page
 */
function shuffleItems(page) {
	var i = 0;
	var size = getSize(page);
	var dummy = new Object();
	var keys = new Array(size);
	while (page[i]) {
		do {
			keys[i] = Math.round(Math.random() * 1000);
		} while (dummy[keys[i]]);
		dummy[keys[i]] = page[i];
		i++;
	}
	keys.sort();
	i = 0;
	while (keys[i]) {
		page[i] = dummy[keys[i]];
		i++;
	}
}

/**
 * returns number of items (=size) on given page.
 */
function getSize(page) {
	var size = 0;
	while (page[size++])
		;
	return size;
}

/**
 * Apend question pages to pages array, that are displayed at a specific event
 */
function appendEventQuestions(i, part, event, l) {
	return appendItemQuestions(i, part, null, event, l);
}

function appendPartQuestions(i, part, l) {
	var n = 0;
	while (part[n]) {
		i = appendItemQuestions(i, part[n], part[n], null, l);
		n++;
	}
	return i;
}

function appendItemQuestions(i, item, target, event, l) {

	if (item.quest && showquestions) {
		var n = 0;
		while (item.quest[n]) {
			if (event == null || event == item.quest[n].event) {
				pages[++i] = new Object();
				if (target)
					pages[i].item = target;
				pages[i].quest = item.quest[n];
				pages[i].type = 3; // Questions have type 3
				pages[i].res = 4; // Questions have resource number 4
				pages[i].id = n;
				pages[i].loop = l;
			}
			n++;
		}
	}
	return i;
}

/**
 * Create bidirectional link beween two objects
 */
function createLink(elem, nextelem) {
	elem.next = nextelem;
	nextelem.prev = elem;
}

/**
 * Returns url to the image for the given page and status, that is displayed in
 * the navigation bar.
 */
function getPageImage(page, enabled, act) {
	var s = getBaseDir() + "/img/typ_" + page.type;
	if (page.type == 1) {
		s = s + "_" + page.res;
	} else if (page.type == 2) {
		if (page.res == 1 || page.res == 2 || page.res == 9) {
			s = s + "_" + page.res;
		}
	}

	if (page.type == 3 && page.res == 4 && page.quest.answer == "") {
		s = getBaseDir() + "/img/typ_15";
	}

	if (enabled)
		s += "_enabled";
	else
		s += "_disabled";
	if (top.onlyQuestions == false) {
		var therapyLoop = indicateNewTherapyLoop(act);
	} else {
		therapyLoop = 3;
	}
	if (therapyLoop == 1) {
		s += "_start.gif";
	} else if (therapyLoop == 2) {
		s += "_end.gif";
	} else if (therapyLoop == 3) {
		s += "_nonav.gif";
	} else {
		s += ".gif";
	}

	return s;
}

// function for indicate a new therapyLoop in the current Page
function indicateNewTherapyLoop(act) {
	var therapyLoop = 0;

	for (z = 1; z < start_therapyloop_page.length; z++) {
		if (act == start_therapyloop_page[z]) {
			return therapyLoop = 1;
		}
	}
	for (zz = 1; zz < end_therapyloop_page.length; zz++) {
		if (act == end_therapyloop_page[zz]) {
			return therapyLoop = 2;
		}
	}
	// alert (end_therapyloop_page.length);
	if ((act < start_therapyloop_page[1])
			|| (act > end_therapyloop_page[end_therapyloop_page.length - 1])) {
		therapyLoop = 3;
	}
	return therapyLoop;
}

/**
 * Initializes the navigation bar, start and end Attributes for
 * Navigationbar-Intervall
 */
function createNavigation(start, end) {

	if (initial_dummy) {
		start = 0;
		end = 0;
	} else {
		if (pagecount < 29) {
			start = 0;
			end = pagecount;
		} else {
			if (start < 0) {
				start = 0;
				end = 29;
			}
			if (end > pagecount) {
				end = pagecount;
				start = (pagecount - 29);
			}
		}
	}

	var win = window.open("about:blank", "nav");
	var i = 0;
	win.document.open();
	win.document
			.writeln('<table cellspacing=0 cellpadding=0 bgcolor="#415D7B" width="100%" border="0">');
	win.document
			.writeln('<tr bgcolor="#4a6a8b" height="3"><td colspan="5"></td></tr>');
	win.document.writeln('<tr><td width="120"></td><td align="left">');
	win.document.writeln("<span id=\"back\"><img border=0 src=\""
			+ getBaseDir() + "/img/nav_left_enabled.gif\"></span>");
	win.document.writeln('</td><td valign="center" align="center">');
	win.document
			.writeln("<table width=\"100%\" cellspacing=0 cellpadding=0 border=0 background=\""
					+ getBaseDir()
					+ "/img/nav_line.gif\"><tr><td align=\"center\">");

	for (act = start; act < end; act++) {

		if (pages[act]) {
			win.document.write("<img src=\"" + getBaseDir()
					+ "/img/dummy.gif\" width=2 height=13><span id=\"pp_" + act
					+ "\">");
			if (!pages[act].visited) {
				win.document.write("<img name=\"page_" + act
						+ "\" border=0 \" src=\"" + getBaseDir()
						+ "/img/disabled.gif\">");
			} else {
				var content = "<img border=\"0\" name=\"page_" + act
						+ "\" src=\"" + getPageImage(pages[act], false, act)
						+ "\">";
				win.document.write("<a title=\"" + getPageTitle(act + 1)
						+ "\"href=\"javascript:top.showPage(" + act
						+ ");void(0);\">" + content + "</a>");
			}
			win.document.write("</span>");
		}
	}

	win.document.writeln('</td><tr></table>');
	win.document.writeln('</td><td align="right">');
	win.document.writeln("<span id=\"forward\"><img border=0 src=\""
			+ getBaseDir() + "/img/nav_right_enabled.gif\"></span>");
	win.document.writeln('</td>');
	win.document.writeln('<td align="center" rowspan="2" width="70">');
	win.document.writeln('<span id="page">');
	win.document.writeln("</span>");
	win.document
			.writeln('</td></tr><tr><td></td><td align="center"colspan="3">');
	win.document.writeln("</td></tr></table>");
	win.document
			.writeln("<div style=\"position:absolute; top:0px; left:0px; \" id=\"tutor_body\"><img src=\""
					+ getBaseDir()
					+ "/img/body.gif\" name=\"tutor_image\"></div>");

	if (top.show_help == true) {
		var language = getLanguage();
		if (language == 'en') {
			win.document
					.writeln("<div style=\"position:absolute; top:12px; left:35px; \"><a title=\"Hilfe\" href=\"javascript:top.help();\" target=\"content\" onMouseUp=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/help.gif'; \" onMouseOver=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/help.gif'; \" onMouseDown=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/help.gif'; \" onMouseOut=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/help.gif'; \"><img border=0 name=\"img_settings\" src=\""
							+ getBaseDir() + "/img/help.gif\"></a></div>");
		} else if (language == 'de') {
			win.document
					.writeln("<div style=\"position:absolute; top:12px; left:35px;\"><a title=\"Help\" href=\"javascript:top.help();\" target=\"content\" onMouseUp=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/hilfe.gif'; \" onMouseOver=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/hilfe.gif'; \" onMouseDown=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/hilfe.gif'; \" onMouseOut=\"img_settings.src='"
							+ getBaseDir()
							+ "/img/hilfe.gif'; \"><img border=0 name=\"img_settings\" src=\""
							+ getBaseDir() + "/img/hilfe.gif\"></a></div>");
		}
	}
	win.document.close();
}

var help_selected = false;
function help() {
	if (help_selected == false) {
		help_selected = true;
	} else {
		help_selected = false;
	}
	showPage(currentpos);
	createContext();
}

function helpBypass(clickedItem) {
	if (help_selected == false) {
		/*
		 * switch (clickedItem) { case ("submitButton"): {processQuestion();
		 * break;} }
		 */
	} else if (help_selected == true) {
		// handled by the upper script withot function fpr capture the help
		// request
		alert(clickedItem);
	}
}

function getCursor() {
	if (help_selected == false) {
		return "default";
	} else {
		return "help";
	}

}

/**
 * Initializes the context frame, this is the left frame in the user interface,
 * that contains the buttons for case selection, patient record and the tutor.
 * Optionally it may also contain a button for displaying the properties dialog
 * and the score bar.
 */

var initial = true;
function createContext() {
	initial = false;
	var win = window.open("about:blank", "context");
	win.document.open();
	win.document.writeln("<html>");
	win.document.writeln("<head>");
	win.document.writeln("</head>");
	win.document.writeln("<body background=\"" + getBaseDir() + "/img/"
			+ leftBackgroundImage + "\">");

	var caselist;
	if (top.caselistdir) {
		caselist = top.caselistdir;
	} else {
		caselist = getBaseDir();
	}
	caselist += "/content.html";
	var offset = 20;
	var counter = 0;
	if ((top.examination == false) || (loggedIn == true)) {
		if (help_selected == false) {
			// Case Selection
			if (top.show_caseSelection) {
				win.document
						.writeln('<div style="position:absolute; top:' + eval(offset
								+ counter * 90) + 'px; left:18px; " id="selection">');
				win.document
						.writeln("<a title=\""
								+ res[1000].selectcase
								+ "\" href=\""
								+ caselist
								+ "\" target=\"content\" onMouseUp=\"img_filer.src='"
								+ getBaseDir()
								+ "/img/but_filer_activated.gif'; \" onMouseOver=\"img_filer.src='"
								+ getBaseDir()
								+ "/img/but_filer_activated.gif'; \" onMouseDown=\"img_filer.src='"
								+ getBaseDir()
								+ "/img/but_filer_pressed.gif'; \" onMouseOut=\"img_filer.src='"
								+ getBaseDir()
								+ "/img/but_filer.gif'; \"><img border=0 name=\"img_filer\" src=\""
								+ getBaseDir() + "/img/but_filer.gif\"></a>");
				win.document.writeln("</div>");
				counter++;
			}

			// Patient record
			// win.document.writeln("<img
			// src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">");
			win.document
					.writeln('<div style="position:absolute; top:' + eval(offset
							+ counter * 90) + 'px; left:18px; " id="record">');
			if (casenr == 000000) {
				win.document
						.writeln("<a title=\""
								+ res[1000].showrecord
								+ "\" target=\"content\" id=\"record_link\"><img border=0 name=\"img_record\" src=\""
								+ getBaseDir()
								+ "/img/but_record_disabled.jpg\"></a>");
			} else {
				win.document
						.writeln("<a title=\""
								+ res[1000].showrecord
								+ "\" href=\""
								+ getBaseDir()
								+ "/"
								+ lfbase
								+ "/record.html\" target=\"content\" onMouseUp=\"img_record.src='"
								+ getBaseDir()
								+ "/img/but_record_activated.gif'; \" onMouseOver=\"img_record.src='"
								+ getBaseDir()
								+ "/img/but_record_activated.gif'; \" onMouseDown=\"img_record.src='"
								+ getBaseDir()
								+ "/img/but_record_pressed.gif'; \" onMouseOut=\"img_record.src='"
								+ getBaseDir()
								+ "/img/but_record.gif';\"><img border=0 name=\"img_record\" src=\""
								+ getBaseDir() + "/img/but_record.gif\"></a>");
			}
			win.document.writeln("</div>");
			counter++;

			// Settings
			if (top.show_Settings) {
				// win.document.writeln("<img
				// src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">");
				win.document
						.writeln('<div style="position:absolute; top:' + eval(offset
								+ counter * 90) + 'px; left:18px; " id="settings">');
				win.document
						.writeln("<a title=\""
								+ res[1000].settings
								+ "\" href=\""
								+ getBaseDir()
								+ "/settings.html\" target=\"content\" onMouseUp=\"img_settings.src='"
								+ getBaseDir()
								+ "/img/but_settings_activated.gif'; \" onMouseOver=\"img_settings.src='"
								+ getBaseDir()
								+ "/img/but_settings_activated.gif'; \" onMouseDown=\"img_settings.src='"
								+ getBaseDir()
								+ "/img/but_settings_pressed.gif'; \" onMouseOut=\"img_settings.src='"
								+ getBaseDir()
								+ "/img/but_settings.gif'; \"><img border=0 name=\"img_settings\" src=\""
								+ getBaseDir() + "/img/but_settings.gif\"></a>");
				win.document.writeln("</div>");
				counter++;
			}

			if (top.show_Information) {
				// win.document.writeln("<img
				// src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">");
				win.document
						.writeln('<div style="position:absolute; top:' + eval(offset
								+ counter * 90) + 'px; left:18px; " id="info">');
				win.document
						.writeln("<a title=\""
								+ res[1000].information
								+ "\" href=\""
								+ getBaseDir()
								+ "/info.html\" target=\"content\" onMouseUp=\"img_info.src='"
								+ getBaseDir()
								+ "/img/but_info_activated.gif'; \" onMouseOver=\"img_info.src='"
								+ getBaseDir()
								+ "/img/but_info_activated.gif'; \" onMouseDown=\"img_info.src='"
								+ getBaseDir()
								+ "/img/but_info_pressed.gif'; \" onMouseOut=\"img_info.src='"
								+ getBaseDir()
								+ "/img/but_info.gif'; \"><img border=0 name=\"img_info\" src=\""
								+ getBaseDir() + "/img/but_info.gif\"></a>");
				win.document.writeln("</div>");
				counter++;
			}
		} else if (help_selected == true) {
			// Case Selection
			if (top.show_caseSelection) {
				win.document
						.writeln('<div style="position:absolute; top:' + eval(offset
								+ counter * 90) + 'px; left:18px; ">');
				win.document
						.writeln('<img src= \"' + top.getBaseDir() + '/img/but_filer.gif\" onMouseOver = "javascript:top.setHelpFocus(\'CaseSelection-Button\');" onclick = "javascript:top.helpBypass(\'CaseSelection-Button\');">');
				win.document.writeln("</div>");
				counter++;
			}

			// Patient record
			win.document
					.writeln('<div style="position:absolute; top:' + eval(offset
							+ counter * 90) + 'px; left:18px;">');
			win.document
					.writeln('<img src= \"' + top.getBaseDir() + '/img/but_record.gif\" onMouseOver = "javascript:top.setHelpFocus(\'PatientRecord-Button\');" onclick = "javascript:top.helpBypass(\'PatientRecord-Button\');">');
			win.document.writeln("</div>");
			counter++;

			// Settings
			if (top.show_Settings) {
				win.document
						.writeln('<div style="position:absolute; top:' + eval(offset
								+ counter * 90) + 'px; left:18px;">');
				win.document
						.writeln('<img src= \"' + top.getBaseDir() + '/img/but_settings.gif" onMouseOver = "javascript:top.setHelpFocus(\'Settings-Button\');" onclick = "javascript:top.helpBypass(\'Settings-Button\');">');
				win.document.writeln("</div>");
				counter++;
			}
		}

	}
	// Login
	/*
	 * if (top.logging == true) { // win.document.writeln("<img
	 * src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">"); //<script
	 * type="text/javascript" src="jquery/thickboxmod/thickbox.js"></script>
	 * 
	 * win.document.writeln('<div style="position:absolute;
	 * top:'+eval(offset+counter*90)+'px; left:18px; " id="login">');
	 * //win.document.writeln("<a title=\""+res[1000].settings+"\"
	 * href=\""+getBaseDir()+"/comment.html\" target=\"content\"
	 * onMouseUp=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif'; \"
	 * onMouseOver=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif'; \"
	 * onMouseDown=\"img_login.src='"+getBaseDir()+"/img/but_login_pressed_"+getLoginImage()+".gif'; \"
	 * onMouseOut=\"img_login.src='"+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif';
	 * \"><img border=0 name=\"img_login\"
	 * src=\""+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif\"></a>");
	 * win.document.writeln("<a title=\""+res[1000].settings+"\"
	 * href=\"javascript:showWriteNoteDialog()\" target=\"content\"
	 * class='thickbox'
	 * onMouseUp=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif'; \"
	 * onMouseOver=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif'; \"
	 * onMouseDown=\"img_login.src='"+getBaseDir()+"/img/but_login_pressed_"+getLoginImage()+".gif'; \"
	 * onMouseOut=\"img_login.src='"+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif';
	 * \"><img border=0 name=\"img_login\"
	 * src=\""+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif\"></a>");
	 * win.document.writeln("</div>"); counter++; }
	 */
	// Notes
	if (top.enable_Notes == true) {
		// win.document.writeln("<img
		// src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">");
		// <script type="text/javascript"
		// src="jquery/thickboxmod/thickbox.js"></script>

		win.document
				.writeln('<div style="position:absolute; top:' + eval(offset
						+ counter * 90) + 'px; left:18px; " id="notes">');
		// win.document.writeln("<a title=\""+res[1000].settings+"\"
		// href=\""+getBaseDir()+"/comment.html\" target=\"content\"
		// onMouseUp=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif';
		// \"
		// onMouseOver=\"img_login.src='"+getBaseDir()+"/img/but_login_activated_"+getLoginImage()+".gif';
		// \"
		// onMouseDown=\"img_login.src='"+getBaseDir()+"/img/but_login_pressed_"+getLoginImage()+".gif';
		// \"
		// onMouseOut=\"img_login.src='"+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif';
		// \"><img border=0 name=\"img_login\"
		// src=\""+getBaseDir()+"/img/but_login_"+getLoginImage()+".gif\"></a>");
		// win.document.writeln("<a title=\""+res[1000].settings+"\"
		// href=\"javascript:showWriteNoteDialog()\" target=\"content\"
		// onMouseUp=\"img_notes.src='"+getBaseDir()+"/img/but_notes_activated.gif';
		// \"
		// onMouseOver=\"img_notes.src='"+getBaseDir()+"/img/but_notes_activated.gif';
		// \"
		// onMouseDown=\"img_notes.src='"+getBaseDir()+"/img/but_notes_pressed.gif';
		// \" onMouseOut=\"img_notes.src='"+getBaseDir()+"/img/but_notes.gif';
		// \"><img border=0 name=\"img_notes\"
		// src=\""+getBaseDir()+"/img/but_notes.gif\"></a>");
		if (casenr == 000000) {
			win.document
					.writeln("<a title=\""
							+ res[1000].notes
							+ "\" target=\"content\" ><img border=0 name=\"img_notes\" src=\""
							+ getBaseDir()
							+ "/img/but_notes_disabled.gif\" alt=\"notes disabled\"></a>");
		} else {
			win.document
					.writeln("<a title=\""
							+ res[1000].notes
							+ "\" href=\"javascript:top.showWriteNoteDialogPlain()\" target=\"content\" onMouseUp=\"img_notes.src='"
							+ getBaseDir()
							+ "/img/but_notes_activated.gif'; \" onMouseOver=\"img_notes.src='"
							+ getBaseDir()
							+ "/img/but_notes_activated.gif'; \" onMouseDown=\"img_notes.src='"
							+ getBaseDir()
							+ "/img/but_notes_pressed.gif'; \" onMouseOut=\"img_notes.src='"
							+ getBaseDir()
							+ "/img/but_notes.gif'; \"><img border=0 name=\"img_notes\" src=\""
							+ getBaseDir() + "/img/but_notes.gif\"></a>");
		}
		win.document.writeln("</div>");
		counter++;
	}
	/*
	 * Save noch nicht da... // Save // win.document.writeln("<img
	 * src=\""+getBaseDir()+"/img/"+leftBackgroundImage+"\">");
	 * win.document.writeln('<div style="position:absolute; top:380px;
	 * left:18px; " id="save">'); win.document.writeln("<a
	 * title=\""+res[1000].settings+"\" href=\""+getBaseDir()+"/save.html\"
	 * target=\"content\"
	 * onMouseUp=\"img_save.src='"+getBaseDir()+"/img/but_save_activated.gif'; \"
	 * onMouseOver=\"img_save.src='"+getBaseDir()+"/img/but_save_activated.gif'; \"
	 * onMouseDown=\"img_save.src='"+getBaseDir()+"/img/but_save_pressed.gif'; \"
	 * onMouseOut=\"img_save.src='"+getBaseDir()+"/img/but_save.gif'; \"><img
	 * border=0 name=\"img_save\" src=\""+getBaseDir()+"/img/but_save.gif\"></a>");
	 * win.document.writeln("</div>");
	 */

	// win.document.write("<div style=\"position:absolute; top:280px; left:26px;
	// \" id=\"score_meter\">");
	// win.document.write("</div>");
	if (document.all)
		win.document
				.writeln('<div style="position:absolute; bottom:-10px; left:0px; " id="tutor">');
	else
		win.document
				.writeln('<div style="position:absolute; bottom:-1px; left:0px; " id="tutor">');
	win.document
			.writeln("<img src=\""
					+ getBaseDir()
					+ "/img/default.gif\" name=\"tutor_image\" id=\"tutor_image\"></img>");
	win.document.writeln("</div>");
	win.document.writeln("</body>");
	win.document.writeln("</html>")
	win.document.close();
}
/**
 * Returns url to the image for the given page and status, that is displayed in
 * the navigation bar.
 */
function getLoginImage() {
	var s = "";
	if (loggedIn == true) {
		s = "true";
		return s;
	} else {
		s = "false";
		return s;
	}

}

/* updates the socre bar [experimental] */
function updateScoreMeter(min, max, score) {
	var abs_height = 100;
	var min_height = Math.round((min / (min + max)) * abs_height);
	var max_height = abs_height - min_height;
	var score_height = Math.round(Math.abs(score) / (min + max) * abs_height);
	var html = "<table bgcolor=#ffffff border=0 cellpadding=0 cellspacing=0 ><tr><td><table bgcolor=#ffffff border=0 cellspacing=0 cellpadding=0 width=40>";
	if (score >= 0) {
		html += "<tr><td height=" + (max_height - score_height)
				+ " bgcolor=#AAFFAA></td><tr/>";
		html += "<tr><td bgcolor=#000000 height=2></td></tr>";
		html += "<tr><td height=" + (score_height)
				+ " bgcolor=#AAFFAA></td><tr/>";
		html += "<tr><td height=" + (min_height)
				+ " bgcolor=#FFAAAA></td></tr>";
	} else {
		html += "<tr><td height=" + (max_height)
				+ " bgcolor=#AAFFAA></td><tr/>";
		html += "<tr><td height=" + (score_height)
				+ " bgcolor=#FFAAAA></td><tr/>";
		html += "<tr><td bgcolor=#000000 height=2></td></tr>";
		html += "<tr><td height=" + (min_height - score_height)
				+ " bgcolor=#FFAAAA></td></tr>";
	}
	html += "</table></td></tr>";
	html += "<tr><td align=\"center\">" + score + "</td></tr>";
	html += "</table>";
	layerWrite("score_meter", context, html);
}

/* start tutor speaking */
function startSpeaking() {
	top.context.document.tutor_image.src = getBaseDir() + "/img/speaking.gif";
}

/* stop tutor speaking */
function stopSpeaking() {
	top.context.document.tutor_image.src = getBaseDir() + "/img/default.gif";
}

/**
 * write text in specific layer in the user interface works in IE and Mozilla
 */
function layerWrite(id, parent, text) {
	if (document.getElementById) {
		x = parent.document.getElementById(id);
		if (x) {
			x.innerHTML = '';
			x.innerHTML = text;

		}
	} else if (parent.document.all) {
		if (x) {
			x = parent.document.all[id];
			x.innerHTML = text;

		}
	} else if (parent.document.layers) {
		x = parent.document.layers[id];
		if (x) {
			text2 = '<P CLASS="testclass">' + text + '</P>;';
			x.document.open();
			x.document.write(text2);
			x.document.close();
		}
	}
}

var rend = 1;

function hasRenderer(ex) {
	if (ex.renderer)
		return true;
	return false;
}

function renderItem(docu, data) {
	// newrend = renderer[data.section+"_"+data.itemid];
	// if(newrend != rend) {
	// window.open(getBaseDir()+"renderer/"+newrend+"/index.html","etc");
	// else // renderer already loaded
	rendererLoaded(docu, data);
}

function rendererLoaded(docu, renditem) {
	top.etc.renderItem(docu, renditem);
}

var initial_dummy = true;
/**
 * Called, when a case is selected in the case selection list. This is the
 * starting point for initialization of the user interface when starting a new
 * session.
 */
function startCase_lang(nr, lang) {
	if (enable_SCORM) {
		SCOInitialize();
	}
	if (enable_Logging == true && jsessionid == "") {
		top.location.href = "login.html";
	} else {
		setLanguage(lang);
		start_therapyloop_page = new Array();
		end_therapyloop_page = new Array();
		if ((casenr != 000000) && (casenr != 123)) {
			top.callToServer("Fall", "close", "");
		}
		casenr = nr; // store case number
		if (casenr != 000000) {
			top.callToServer("Fall", "open", casenr);
			initial_dummy = false;
			// determine path to case-data
			var file = getCaseDir() + "/";
			if (top.casefile)
				file += top.casefile;
			else
				file += "index.html";
			// load case-data in the data frame
			var win = window.open(file, "data");
		} else {
			initial_dummy = true;
			var file = getCaseDir() + "/";
			if (top.casefile)
				file += top.casefile;
			else
				file += "index.html";
			// load case-data in the data frame
			var win = window.open(file, "data");

		}
	}
}

function startCase(nr) {
	if (enable_SCORM) {
		SCOInitialize();
	}
	if (enable_Logging == true && jsessionid == "") {
		top.location.href = "login.html";
	} else {
		start_therapyloop_page = new Array();
		end_therapyloop_page = new Array();
		if ((casenr != 000000) && (casenr != 123)) {
			top.callToServer("Fall", "close", "");
		}
		casenr = nr; // store case number
		if (casenr != 000000) {
			top.callToServer("Fall", "open", casenr);
			initial_dummy = false;
			// determine path to case-data
			var file = getCaseDir() + "/";
			if (top.casefile)
				file += top.casefile;
			else
				file += "index.html";
			// load case-data in the data frame
			var win = window.open(file, "data");
		} else {
			initial_dummy = true;
			var file = getCaseDir() + "/";
			if (top.casefile)
				file += top.casefile;
			else
				file += "index.html";
			// load case-data in the data frame
			var win = window.open(file, "data");
		}
	}

}

/**
 * mark all pages as visited
 */
function markPagesVisited() {
	var i = 0;
	while (pages[i]) {
		pages[i].visited = true;
		pages[i].finished = true;

		/*
		 * if activated, then all results are displayed immediately in full
		 * feedback mode -> presentation linear
		 */
		// pages[i].feedback = true;
		// if(pages[i].quest)
		// pages[i].quest.feedback = true;
		i++;
	}
}

// Indicates, if the Player is still in the initialization process
// This flag is only used during the init-process.
var isInit = false;

// Initializes the GUI
function buildGUI() {
	isInit = true;
	loadLanguage();
}

// Load language resources
function loadLanguage() {
	window.open(getBaseDir() + "/lang/" + lang + "/index.html", "resource");
	window.open(getBaseDir() + "/renderer/1/index.html", "etc");
}

// is called from the language Resource file
// (index.html), when the language Resources are loaded

function languageLoaded() {
	res = top.resource.res;
	if (isInit) {
		isInit = false;
		doBuildGUI();
	}
}

function doBuildGUI() {
	init = true;
	current = top.data.pat;
	currentpos = 0;
	createPageLinks();
	orderAllPageItems();
	// if(shuffleitems) {
	shuffleAllPageItems();
	// }
	if (fullnavigation) {
		resetPages();
		markPagesVisited();
	}
	initRecord();
	createNavigation(0, 28);
	createContext();
	calculateScore();
	showPage(0);
	init = false;
	updateScoreMeter(score_min, score_max, score);
}

/**
 * Returns the case dir where the current case is stored.
 */
function getCaseDir() {
	// Check if casedir is hardcoded
	// this allows the use of an arbitrary directory where cases are stored
	// the value is set in config.js, if available
	// and is used e.g. in the preview function of the authoring system
	if (top.casedir)
		return top.casedir;
	// return default case directory
	return getBaseDir() + "/cases/" + getCaseNr();
}

/**
 * Returns the base dir of the player component.
 */
function getBaseDir() {
	// Check if basedir is hardcoded
	// this allows the use of an arbitrary base directory
	// the value is set in config.js, if available
	// and is used e.g. in the preview function of the authoring system
	if (top.basedir)
		return top.basedir;
	// return default base directory
	var url = top.document.location.href;
	url = url.substr(0, url.lastIndexOf("/"));
	return url;
}

/**
 * Displays the renderer for the current page in the content-frame. The renderer
 * is selected depending on the attribute "type" of the page-object.
 */
function showRenderer() {
	if (initial_dummy == false) {
		window.open(getBaseDir() + "/" + lfbase + "/" + pages[currentpos].type
				+ ".html", "content");
	} else {
		window.open(getBaseDir() + "/" + lfbase + "/" + "0.html", "content");
	}
}

/**
 * Checks if the appropriate renderer for the current page is already loaded. If
 * not, loads the renderer for the current page.
 */
function checkRenderer() {
	var page = getCurrentPage();
	var url = top.content.document.location.href;
	url = url.substr(url.lastIndexOf("/") + 1);
	url = url.substr(0, url.lastIndexOf("."));
	if (page.type != url) {
		showRenderer();
	}
}

/**
 * Displays the patient record in the content-frame
 */
function showRecord() {
	showRecord(-1, false);
}

/**
 * displays the patient record and displays and activates the section with index
 * "type". showMessage indicates if an introduction message should be displayed
 * by the tutor.
 */
function showRecord(type, showMessage) {
	if (type >= 0)
		record.section = translateResource(type);
	if (showMessage == true) {
		var re = getResource(getCurrentPage().res);
		record.message = applyParameters(res[1000].resultrecord, re.sev_items);
	} else
		record.message = undefined;
	window.open(getBaseDir() + "/" + lfbase + "/record.html", "content");
}

/**
 * Displays the page at index "pagepointer" in the content-frame This function
 * is called when clicking on the navigation buttons.
 */
function showPage(pagepointer) {
	if ((enable_SCORM) && (pagepointer == 0)) {
		setNavigablePage(pagecount);
	}
	if (enable_SCORM) {
		SetThisPage(pagepointer + 1);
	}
	noFeedback = false;
	var x = pagepointer;
	var pagetype;
	var logkategorie;

	var logdata = "";

	if (!init) {

		tmploop = top.indicateNewTherapyLoop(top.currentpos);
		// die Akte wurde verlassen
		if (top.recordshown) {
			// defined in record.html

			var log_kategorie = "";
			var type = top.getRecordData();
			switch (type.section) {
			case 0:
				if (pages[currentpos].loop == 0) {
					log_kategorie = "Anamnese";
					top.callToServer(log_kategorie + ".Feedback", "close", "");
				}
				break;
			case 1:
				/*
				 * if(pages[currentpos].loop!=0 && (typeof
				 * top.getCurrentPage().ctl == 'undefined')){ log_kategorie =
				 * "Therapiekette.KlinikBlock"; top.callToServer(log_kategorie +
				 * ".Feedback", "close", ""); }else
				 */
				if (pages[currentpos].loop == 0) {
					log_kategorie = "KlinUntersuchung";
					top.callToServer(log_kategorie + ".Feedback", "close", "");
				}
				break;
			case 2:
				/*
				 * if(typeof top.getCurrentPage().ctl == 'undefined'){
				 * log_kategorie = "Therapiekette.LaborBlock";
				 * top.callToServer(log_kategorie + ".Feedback", "close", ""); }
				 */
				break;
			case 3:
				/*
				 * if(typeof top.getCurrentPage().ctl== 'undefined'){
				 * log_kategorie = "Therapiekette.TechnikBlock";
				 * top.callToServer(log_kategorie + ".Feedback", "close", ""); }
				 */
				break;
			case 4:
				if (top.getCurrentPage().res == 3) {
					if (pages[currentpos].loop == 0) {
						log_kategorie = "Verdachtsdiagnose";
						top.callToServer(log_kategorie + ".Feedback", "close",
								"");
					}
				}/*
					 * else { log_kategorie = "Therapiekette.DiagnoseBlock";
					 * top.callToServer(log_kategorie + ".Feedback", "close",
					 * ""); }
					 */
				break;
			case 5:
				/*
				 * log_kategorie = "Therapiekette.TherapieBlock";
				 * top.callToServer(log_kategorie + ".Feedback", "close", "");
				 */
				break;
			default:
				// alert("Fehler in api.js. Akte geoeffnet! " + type);
			}

			top.recordshown = false;
		}

		switch (pages[currentpos].res) {
		case 0:
			if ((casenr != 000000) && (casenr != 123)
					&& pages[currentpos].type == 0) {
				log_pagetype = "Vorstellung";
				top.callToServer(log_pagetype, 'close', logdata);
			}
			break;
		case 1:
			if (pages[currentpos].type != 2) {
				log_pagetype = "Anamnese";
				top.callToServer(log_pagetype, 'close', logdata);
			}
			break;
		case 2:
			if (pages[currentpos].type != 2
					&& (typeof pages[currentpos].ctl == 'undefined')
					&& (pages[currentpos].loop == 0)) {// zu Beginn, vor DTS
				log_pagetype = "KlinUntersuchung";
				top.callToServer(log_pagetype, 'close', logdata);
			} else if (pages[currentpos].type != 2
					&& (typeof pages[currentpos].ctl == 'undefined')) {
				log_pagetype = "Therapiekette.KlinUntersuchung";
				top.callToServer(log_pagetype, 'close', logdata);
			}
			break;
		case 3:
			log_pagetype = "Verdachtsdiagnose";
			top.callToServer(log_pagetype, 'close', logdata);
			break;
		case 4:
			if (pages[currentpos].quest.answer != "") {
				log_pagetype = "Wissensfrage.Feedback";
				logdata = pages[currentpos].quest.questNr;
				top.callToServer(log_pagetype, 'close', logdata);
			}
			break;
		case 6:
			if (typeof pages[currentpos].ctl == 'undefined') {
				log_pagetype = "Therapiekette.TechnikBlock";
				top.callToServer(log_pagetype, 'close', logdata);

			}
			break;
		case 7:
			if (typeof pages[currentpos].ctl == 'undefined') {
				log_pagetype = "Therapiekette.LaborBlock";
				top.callToServer(log_pagetype, 'close', logdata);

			}
			break;
		case 8:
			if (typeof pages[currentpos].ctl == 'undefined') {
				log_pagetype = "Therapiekette.DiagnoseBlock";
				top.callToServer(log_pagetype, 'close', logdata);

			}
			break;
		case 9:
			if (pages[currentpos].type != 2) {
				log_pagetype = "Therapiekette.TherapieBlock";
				top.callToServer(log_pagetype, 'close', logdata);
			}
			break;
		case 11:
			break;
		case 12:

			log_pagetype = "Therapiekette.Verlaufstext";
			top.callToServer(log_pagetype, 'close', logdata);
			break;
		case 13:
			// Prognose
			break;
		case 14: // Zusammenfassung
			break;
		default:
			// alert('Define Page-Type in api.js!');
			// alert('Nicht angefangen: ' + page.res);
			break;
		}

		if ((top.startCtl) && (typeof pages[currentpos].ctl == 'undefined')) {
			top.callToServer('Therapiekette.KontrollUntersuchung', 'close', '');
			top.startCtl = false;
		}

		if (tmploop == 2) {

			top.callToServer('Therapiekette', 'close', '');

		}
	}
	createNavigation((x - 14), (x + 14));
	activatePageIcon(pagepointer);
	changecontent = true;
	currentpos = pagepointer;

	logdata = "";

	switch (pages[currentpos].res) {
	case 0:
		if ((casenr != 000000) && (casenr != 123)
				&& pages[currentpos].type == 0) {
			log_pagetype = "Vorstellung";
			top.callToServer(log_pagetype, 'open', logdata);
		}
		break;
	case 1:
		if (pages[currentpos].type != 2) {
			log_pagetype = "Anamnese";
			top.callToServer(log_pagetype, 'open', logdata);
		}
		break;
	case 2:

		if ((!top.startCtl) && (typeof pages[currentpos].ctl != 'undefined')) {
			top.callToServer("Therapiekette.KontrollUntersuchung", 'open', "");
			top.startCtl = true;
		}
		if (pages[currentpos].type != 2
				&& (typeof pages[currentpos].ctl == 'undefined')
				&& (pages[currentpos].loop == 0)) {
			log_pagetype = "KlinUntersuchung";
			top.callToServer(log_pagetype, 'open', logdata);
		} else if (pages[currentpos].type != 2
				&& (typeof pages[currentpos].ctl == 'undefined')) {
			log_pagetype = "Therapiekette.KlinUntersuchung";
			top.callToServer(log_pagetype, 'open', logdata);
		}
		break;
	case 3:
		log_pagetype = "Verdachtsdiagnose";
		top.callToServer(log_pagetype, 'open', logdata);
		break;
	case 4:
		if (pages[currentpos].quest.answer != ""
				|| pages[currentpos].quest.t != 3) {
			log_pagetype = "Wissensfrage";
			logdata = pages[currentpos].quest.questNr;
			top.callToServer(log_pagetype, 'open', logdata);
		}
		break;
	case 6:
		if ((!top.startCtl) && (typeof pages[currentpos].ctl != 'undefined')) {
			top.callToServer("Therapiekette.KontrollUntersuchung", 'open', "");
			top.startCtl = true;
		}
		if (typeof pages[currentpos].ctl == 'undefined') {
			log_pagetype = "Therapiekette.TechnikBlock";
			top.callToServer(log_pagetype, 'open', logdata);

		}
		break;
	case 7:
		if ((!top.startCtl) && (typeof pages[currentpos].ctl != 'undefined')) {
			top.callToServer("Therapiekette.KontrollUntersuchung", 'open', "");
			top.startCtl = true;
		}

		if (typeof pages[currentpos].ctl == 'undefined') {
			log_pagetype = "Therapiekette.LaborBlock";
			top.callToServer(log_pagetype, 'open', logdata);

		}
		break;
	case 8:
		if (typeof pages[currentpos].ctl == 'undefined') {
			log_pagetype = "Therapiekette.DiagnoseBlock";
			top.callToServer(log_pagetype, 'open', logdata);

		}
		break;
	case 9:
		if (pages[currentpos].type != 2) {
			log_pagetype = "Therapiekette.TherapieBlock";
			top.callToServer(log_pagetype, 'open', logdata);
		}
		break;
	case 11:
		top.callToServer("Therapiekette", 'open', "");

		break;
	case 12:
		log_pagetype = "Therapiekette.Verlaufstext";
		top.callToServer(log_pagetype, 'open', logdata);
		break;
	case 13:
		// Prognose
		break;
	case 14: // Zusammenfassung
		break;
	default:
		// alert('Define Page-Type in api.js!');
		// alert('Nicht angefangen: ' + page.res);
		break;
	}

	if (pages[currentpos].visited != true)
		noFeedback = true;
	pages[currentpos].visited = true;
	activateLinks(currentpos);
	if (initial_dummy) {
	} else {
		layerWrite("page", top.nav,
				"<font face=\"Arial\" size=2 color=\"#FFFFFF\">"
						+ res[1000].current + "<br>" + (currentpos + 1) + "/"
						+ pagecount + "</font>");
	}
	stopSpeaking();
	showRenderer();
}

/**
 * Activates the page-icon at index "pagepointer" in the navigation bar.
 */
function activatePageIcon(pagepointer) {
	// top.nav.document.images["page_"+pagepointer].src =
	// getBaseDir()+"/img/typ_"+pages[pagepointer].type+".gif";
	// top.nav.document.images["page_"+currentpos].style.width= '13px';
	// top.nav.document.images["page_"+pagepointer].style.width = '20px';
	var old_content = "<img border=\"0\" \" name=\"page_" + currentpos
			+ "\" src=\"" + getPageImage(pages[currentpos], false, currentpos)
			+ "\">";
	layerWrite("pp_" + currentpos, top.nav, "<a title=\""
			+ getPageTitle(currentpos + 1)
			+ "\" href=\"javascript:top.showPage(" + currentpos
			+ ");void(0);\">" + old_content + "</a>");
	var new_content = "<nobreak><img border=\"0\" width=13 height=13 src=\""
			+ getBaseDir() + "/img/dummy.gif\">";
	new_content += "<img border=\"0\" \" name=\"page_" + pagepointer
			+ "\" src=\"" + getPageImage(pages[pagepointer], true, pagepointer)
			+ "\">";
	new_content += "<img border=\"0\" \"  width=13 height=13 src=\""
			+ getBaseDir() + "/img/dummy.gif\"></nobreak>";
	layerWrite("pp_" + pagepointer, top.nav, "<a title=\""
			+ getPageTitle(pagepointer + 1)
			+ "\" href=\"javascript:top.showPage(" + pagepointer
			+ ");void(0);\">" + new_content + "</a>");
}

/**
 * Returns the localized title of a page. Titles are used as tooltips in the
 * navigation bar.
 */
function getPageTitle(pageindex) {
	// return pages[pageindex-1].quest.answer;
	if (pages[pageindex - 1].res == 4
			&& pages[pageindex - 1].quest.answer == "") {
		return res[1000].page + " " + (pageindex) + ": " + res[1000].comment;
	}
	// return res[1000].page+" "+(pageindex)+":
	// "+res[pages[pageindex-1].res].title;
	if (pages[pageindex - 1].type == 0) {
		return res[1000].page + " " + (pageindex) + ": "
				+ res[pages[pageindex - 1].res].title;
	}
	if (pages[pageindex - 1].type == 1) {

		if (pages[pageindex - 1].visited)
			return res[1000].page + " " + (pageindex) + ": "
					+ res[pages[pageindex - 1].res].titlefeedback;
		else
			return res[1000].page + " " + (pageindex) + ": "
					+ res[pages[pageindex - 1].res].title;
	}
	if (pages[pageindex - 1].type == 2) {
		return res[1000].page + " " + (pageindex) + ": "
				+ res[pages[pageindex - 1].res].titleconclusion;
	}
	if (pages[pageindex - 1].type == 3) {
		return res[1000].page + " " + (pageindex) + ": "
				+ res[pages[pageindex - 1].res].title;
	}
	if (pages[pageindex - 1].type == 4) {
		return res[1000].page + " " + (pageindex) + ": "
				+ res[pages[pageindex - 1].res].title;
	}

}

/**
 * Activate/deactivate next and prev according to the current position "pos".
 */
function activateLinks(pos) {
	setNextEnabled(pos < pagecount - 1);
	setPrevEnabled(pos > 0);
}

/**
 * Enables/disables the next button.
 */
function setNextEnabled(enabled) {
	var next = "<img name=\"img_right\" border=0 src=\"" + getBaseDir()
			+ "/img/nav_right_enabled.gif\">";
	if ((enabled == true) && (!initial_dummy)) {
		next = "<a title=\""
				+ res[1000].next
				+ " "
				+ res[1000].page
				+ "\" onMouseDown=\"img_right.src='"
				+ getBaseDir()
				+ "/img/nav_right_pressed.gif';\" onMouseOut=\"img_right.src='"
				+ getBaseDir()
				+ "/img/nav_right_enabled.gif';\" onMouseOver=\"img_right.src='"
				+ getBaseDir()
				+ "/img/nav_right_activated.gif';\" href=\"javascript:top.nextPage();void(0);\" target=\"content\">"
				+ next + "</a>";
	} else {
		next = "<img name=\"img_right\" border=0 src=\"" + getBaseDir()
				+ "/img/nav_right_disabled.gif\">";
	}
	layerWrite("forward", top.nav, next);
}

/**
 * Enables/disables the prev-Button
 */
function setPrevEnabled(enabled) {
	var prev = "<img name=\"img_left\" border=0 src=\"" + getBaseDir()
			+ "/img/nav_left_enabled.gif\">";
	if (enabled == true) {
		prev = "<a  title=\""
				+ res[1000].prev
				+ " "
				+ res[1000].page
				+ "\" onMouseDown=\"img_left.src='"
				+ getBaseDir()
				+ "/img/nav_left_pressed.gif';\" onMouseOut=\"img_left.src='"
				+ getBaseDir()
				+ "/img/nav_left_enabled.gif';\" onMouseOver=\"img_left.src='"
				+ getBaseDir()
				+ "/img/nav_left_activated.gif';\" href=\"javascript:top.prevPage();void(0);\" target=\"content\">"
				+ prev + "</a>";
	} else {
		prev = "<img name=\"img_left\" border=0 src=\"" + getBaseDir()
				+ "/img/nav_left_disabled.gif\">";
	}
	layerWrite("back", top.nav, prev);
}

/**
 * Displays the first page of the block indicated by "blockpointer" in the
 * content-Frame
 */
function showBlock(blockpointer) {
	showPage(blocks[blockpointer]);
	return true;
}

/**
 * Returns the current Blockpointer.
 */
function getBlockPointer() {
	return getSpecificBlockPointer(currentpos);
}

/**
 * Returns the Blockpointer for the page "pos". This is the block in to that the
 * page at "pos" belongs to.
 */
function getSpecificBlockPointer(pos) {
	var i = 0;
	while (pos >= blocks[i + 1]) {
		i++;
	}
	return i;
}

/**
 * Display the previous page in the content-frame. Called when clicking on the
 * prev-button.
 */
function prevPage() {
	if (pages[currentpos - 1] != undefined) {
		showPage(currentpos - 1);
	} else {
		alert(res[1000].firstpage);
		return false;
	}
}

/**
 * Display the next page in the content-frame and activate the next button.
 * Called when clicking on the next-button.
 */
function nextPage() {
	if (pages[currentpos + 1] != undefined) {
		var page = getCurrentPage();
		var res = getResource(page.res);
		var bres = getBasicResource();
		if (page.type == 1 && !page.feedback && !fullnavigation) {
			// falls Diagnosen vorhanden sind so ist mindestens eine
			// auszuwaehlen
			if (page && page[0]) {
				content.showTutorText(applyParameters(bres.advanceselection,
						res.sev_items, res.verb_past));
				// callToServer("Expertenkommentar","open","");
			}
			// ansonsten geht es weiter
			else {
				showPage(currentpos + 1);
			}
		} else if (page.type == 3 && !page.quest.feedback && !fullnavigation
				&& !page.quest.answer == "") {
			content.showTutorText(bres.advancequestion);
			// callToServer("Expertenkommentar","open","");
		} else if (enable_Bouncing && page.type == 3 && page.quest.t == 1
				&& !fullnavigation) {
			var j = 0;
			if (!page.quest.correctAnsweringRequired || page.quest.correct) {
				page.visited = true;
				page.finished = true;
				showPage(currentpos + 1);
			} else {
				page.visited = false;
				page.finished = false;
				page.additional_select = false;
				page.quest.feedback = false;
				page.quest.correct = false;
				content.showTutorText(bres.advancequestion);
			}
		} else {
			showPage(currentpos + 1);
		}
	} else {
		alert(res[1000].lastpage);
		return false;
	}
}

function prevBlock() {
	var p = getBlockPointer() - 1;
	if (blocks[p] >= 0) {
		showPage(blocks[p]);
	} else {
		alert(res[1000].firstblock);
		return false;
	}
}

function nextBlock() {
	var p = getBlockPointer() + 1;
	if (blocks[p] >= 0) {
		showPage(blocks[p]);
	} else {
		alert(res[1000].lastblock);
		return false;
	}
}

// Resources for the page types
// at the moment only different Colors are used

var type_res = new Object();
type_res[0] = new Object();
type_res[0].color = "#94ADC3";
type_res[0].type = 0;
// type_res[0].color = "#AF8DA9";
type_res[1] = new Object();
type_res[1].color = "#AED286";
type_res[1].type = 1;
type_res[2] = new Object();
type_res[2].color = "#94ADC3";
type_res[2].type = 2;
type_res[3] = new Object();
type_res[3].color = "#AF8DA9";
type_res[3].type = 3;

// Returns the resource for a given resource id
// Resources used in case-rendering have ids lower than 1000
function getResource(id) {
	return res[id];
}

// Returns the resource-array for the resources, that
// are used internally in the light-player
function getBasicResource() {
	return res[1000]; // Basic-Resources have Index 1000
}

/* do basic replacement in resource strings */
function applyParameters(tmpl) {
	var res = tmpl;
	for (i = 1; i < arguments.length; i++) {
		res = res.replace("{" + i + "}", arguments[i]);
	}
	return res;
}

function setHelpFocus(helpElement) {
	top.fokussiert = helpElement;
}

// Login
var loggedIn = false;
// CAMPUS-Events, not used at the moment, experimental
/*
 * events[0] = "Fall.open"; events[1] = "Anamnese.open"; events[2] =
 * "AnamneseFrageAntwort.open"; events[3] = "Anamnese.close"; events[7] =
 * "KlinUntersuchung.close"; events[8] = "KlinUntersuchung.Feedback.close";
 * events[9] = "Therapiekette.DiagnoseBlock.open"; events[10] =
 * "Therapiekette.DiagnoseBlock.close"; events[11] =
 * "Therapiekette.DiagnoseBlock.Feedback.close"; events
 */
