//______________________________________________________________________
// vars
var aQuestion = new Array();
var aBlockedQuestions = new Array();
var aBlockedAnswers = new Array();
var bUserWarned = false;
var fieldFocusId = '';

//______________________________________________________________________
// basic functions
function isInArray(array, item) {
	for (var i=0; i<array.length; i++) {
		if (item == array[i]) { return true; }
	}
	return false;
}

function storeFocus(obj) {
  fieldFocusId = obj.id;
}


//______________________________________________________________________
// toggle page elements
function toggleDisplay(element) {
	styleObj = document.getElementById(element).style;
	if (styleObj.display == "block") { styleObj.display = "none"; }
	else { styleObj.display = "block"; }
}

//______________________________________________________________________
// edit answers and start dependency check
function changeFormAnswer(elementId, nFrageNr, value, edit, arrayIndex) {
	formElement = document.getElementById(elementId);
	// alert(elementId + "\n" + nFrageNr + "\n" +  value + "\n" +  edit + "\n" + arrayIndex);

	// beim Editieren anschliessende, spaetere Fragen wieder zuruecksetzen
	if (edit == true) {
		if (aQuestion[arrayIndex]["type"] == 1) {	// only for textfields: no safety check
			// Sichtbarkeiten des zu editierenden Blocks
			toggleDisplay(elementId);										// Formularelement
			toggleDisplay('close' + nFrageNr);
			toggleDisplay('edit' + nFrageNr);
			if (document.getElementById('text' + nFrageNr)) {
				toggleDisplay('text' + nFrageNr);
			}
			document.getElementById("anstxt_" + nFrageNr).innerHTML = '';	// alter Ausgabe-Value
		}

		if (aQuestion[arrayIndex]["type"] == 0) {	// only for dropdowns
			if (bUserWarned == false) {	// warn user once, if he edits answers
				bCheckEdit = window.confirm(sUserWarning);
			}
			else { bCheckEdit = true; }

			if (bCheckEdit == true) {	// User confirmed or had been warned before
				bUserWarned = true;

				// Sichtbarkeiten des zu editierenden Blocks
				toggleDisplay(elementId);										// Formularelement
				toggleDisplay('close' + nFrageNr);
				toggleDisplay('edit' + nFrageNr);
				if (document.getElementById('text' + nFrageNr)) {
					toggleDisplay('text' + nFrageNr);
				}
				document.getElementById("anstxt_" + nFrageNr).innerHTML = '';	// alter Ausgabe-Value

				startIndex = arrayIndex + 1;
				for (i=startIndex; i<aQuestion.length; i++) {	// reset of all following questions
					changeElement = document.getElementById("ans_" + aQuestion[i]["id"]);
					// Formularwert zurücksetzen
					if (aQuestion[i]["type"] == 0) { changeElement.selectedIndex = 0; }
					else { changeElement.value = ''; }

					// Sichtbarkeiten umschalten
					document.getElementById("anstxt_" + aQuestion[i]["id"]).innerHTML = value;		// alter Ausgabe-Value
					document.getElementById("ans_" + aQuestion[i]["id"]).style.display = "block";	// Formularelement einschalten
					document.getElementById("qst_" + aQuestion[i]["id"]).style.display = "none";	// aber den Layer ausschalten
					document.getElementById("close" + aQuestion[i]["id"]).style.display = "block";
					document.getElementById("edit" + aQuestion[i]["id"]).style.display = "none";
					if (document.getElementById('text' + aQuestion[i]["id"])) {
						document.getElementById("text" + aQuestion[i]["id"]).style.display = "block";
					}
					if (document.getElementById("submitFrage").style.display == "block") {			// falls bereits letzte Frage erreicht war, auch den Button ausschalten
						document.getElementById("submitFrage").style.display = "none";
					}
				}

				clearBlockers(arrayIndex);
			}
		}
	}

	// ansonsten Frage abhaken und Abhaengigkeiten pruefen
	else if ((aQuestion[arrayIndex]["type"] == 1 && value != "") || (aQuestion[arrayIndex]["type"] == 0 && formElement.selectedIndex > 0)) {
		toggleDisplay(elementId);
		document.getElementById("anstxt_" + nFrageNr).innerHTML = value;
		toggleDisplay('close' + nFrageNr);
		toggleDisplay('edit' + nFrageNr);
		if (document.getElementById('text' + nFrageNr)) {
			toggleDisplay('text' + nFrageNr);
		}
		checkDependency(arrayIndex, true);
	}
}

//______________________________________________________________________
// beim Editieren Blocker neu setzen
function clearBlockers(arrayIndex) {
	aBlockedQuestions = new Array();
	aBlockedAnswers = new Array();

	for (i=0; i<arrayIndex; i++) {
		if (aQuestion[i]["type"] == 0) {
			checkDependency(i, false);
		}
	}
}

//______________________________________________________________________
// formular-abhaengigkeiten speichern
function checkDependency(arrayIndex, bFormAction) {
	// Abhaengigkeiten vorhanden?
	if (aQuestion[arrayIndex]["type"] == 0 && aQuestion[arrayIndex]["dependency"].length > 0) {
		formElement = document.getElementById("ans_" + aQuestion[arrayIndex]["id"]);
		selectedId = formElement.options[formElement.selectedIndex].value;
		if (aQuestion[arrayIndex]["dependency"][selectedId]) {
			dependencyArray = aQuestion[arrayIndex]["dependency"][selectedId]["questions"];
			if (dependencyArray.length > 0) {
				for (j=0; j<dependencyArray.length; j++) {
					aBlockedQuestions.push(dependencyArray[j]);
				}
			}
			dependencyArray = aQuestion[arrayIndex]["dependency"][selectedId]["answers"];
			if (dependencyArray.length > 0) {
				for (j=0; j<dependencyArray.length; j++) {
					aBlockedAnswers.push(dependencyArray[j]);
				}
			}
		}
	}

	if (bFormAction == true) {
		showNextQuestion(arrayIndex);
	}
}

//______________________________________________________________________
// formular-abhaengigkeiten pruefen und weiterspringen
function showNextQuestion(arrayIndex) {
	nextIndex = arrayIndex + 1;	// Array-Index der naechsten Frage
	//alert(nextIndex);
	if (aQuestion[nextIndex]) {
		nextId = aQuestion[nextIndex]["id"];
		if (isInArray(aBlockedQuestions, nextId)) {	// naechste Frage ist geblockt worden
			//alert('frage ' + aQuestion[nextIndex]["id"] + ' geblockt');
			arrayIndex++;
			showNextQuestion(arrayIndex);
		}
		else if (aQuestion[nextIndex]["type"] == 0) {	// options schreiben und pruefen ob einzelne Antworten geblockt
			optionArray = aQuestion[nextIndex]["options"];
			formElement = document.getElementById("ans_" + aQuestion[nextIndex]["id"]);
			formElement.options[0].value = "a";
			formElement.options[0].text = sChooseOption + '...';
			nOptionCounter = 1;

			for (c=0; c<optionArray.length; c++) {
				if (!isInArray(aBlockedAnswers, optionArray[c]["id"])) {	// Antwort fliegt nicht raus
					formElement.options.length = (nOptionCounter + 1);
					formElement.options[nOptionCounter].value = optionArray[c]["id"];
					formElement.options[nOptionCounter].text = optionArray[c]["text"];
					nOptionCounter++;
				}
				else {
					//alert('option ' + optionArray[c]["id"] + ' geblockt');
				}
			}
			formElement.options.length = nOptionCounter;

			nextElement = document.getElementById("qst_" + nextId);
			nextElement.style.display = "block";
		}
		else {	// naechste Frage kein Problem
			nextElement = document.getElementById("qst_" + nextId);
			nextElement.style.display = "block";
		}
	}

	else if (arrayIndex == aQuestion.length - 1) {	// letzte Frage erreicht => Button zeigen
		document.getElementById("submitFrage").style.display = "block";
	}
}

function rebuildQuestionnaire() {
	for (i=0; i<aQuestion.length; i++) {
		showValue = "";
		if (aQuestion[i]["type"] == 0) {
			for (j=0; j<aQuestion[i]["options"].length; j++) {
				option = aQuestion[i]["options"][j];
				if (option["id"] == aQuestion[i]["presetValue"]) {
					showValue = option["text"];
					document.getElementById('ans_' + aQuestion[i]["id"]).selectedIndex = (j+1);	// wichtig! -> muss gestzt werden, habe aber keine Ahnung warum (ansonsten ergibt der selectedIndex in Folgefuntion immer 1 oder 0)
				}
			}
		}
		else { showValue = aQuestion[i]["presetValue"]; }

		changeFormAnswer('ans_' + aQuestion[i]["id"], aQuestion[i]["id"], showValue, false, i);
	}
}


//______________________________________________________________________
// Hilfe oeffnen
function openHelpWin(url,fragebogenId, seiteId, frageId) {
	url = url+"?navi_id=" + fragebogenId + "&page_id=" + seiteId + "&id=" + frageId;
	helpwin = window.open(url , "help", "width=980, height=700, toolbar=no, location=no, scrollbars=yes, status=yes");
	helpwin.focus();
}


//______________________________________________________________________
// seite empfehlen
function invite(url) {
	var y = (Math.round((screen.availHeight-310)/2)) - 20;
	var x = (Math.round((screen.availWidth-350)/2));
	invitewin = open("popup_invite.php?link="+ url, "invite", "width=350, height=310, top=" + y + ", left=" + x + ", scrollbars=0, status=1, resizable=0, location=0, menubar=0, toolbar=0, fullscreen=0");
	invitewin.focus();
}


//______________________________________________________________________
// seite drucken
function openPrintWin(url, site) {
	var w = (site == "help") ? 645 : 618;
	var h = 600;
	l = Math.round(screen.availWidth/2) - Math.round(w/2);
	t = Math.round(screen.availHeight/2) - Math.round(h/2);
	if (screen.availheight<h) { h = (screen.availHeight-80); }
	printwin = open(url, 'printPopup', 'toolbar=yes, location=no, menubar=no, status=no, scrollbars=yes, resizable=no, width=' + w + ', height=' + h + ', top=' + t + ', left=' + l);
	printwin.focus();
}


//______________________________________________________________________
// warnmeldung
function userConfirm(page, txt) {
	var check = window.confirm(txt);
	if (check == true) {
		window.location.href = page;
	}
}


/********************************************************************/
// FLASH-DETECTION [oh -> adapted from Macromedia Flash-Detection-Kit]
/********************************************************************/
// Globals
// Major version of Flash required
var requiredMajorVersion = 7;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Minor version of Flash required
var requiredRevision = 0;
// the version of javascript supported
var jsVersion = 1.0;

// Detect Client Browser type
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
jsVersion = 1.1;

function JSGetSwfVer(i) { // JavaScript helper required to detect Flash Player PlugIn version information
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];

			if (descArray[3] != "") { tempArrayMinor = descArray[3].split("r"); }
			else { tempArrayMinor = descArray[4].split("r"); }

			versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	}
		else { flashVer = -1; }
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) { flashVer = 4; }
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) { flashVer = 3; }
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) { flashVer = 2; }
	// Can't detect in all other cases
	else { flashVer = -1; }
	return flashVer;
}

function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) {	// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);
   	// loop backwards through the versions until we find the newest version
	for (i=25; i>0; i--) {
		if (isIE && isWin && !isOpera) { versionStr = VBGetSwfVer(i); }
		else { versionStr = JSGetSwfVer(i); }

		if (versionStr == -1 ) { return false; }
		else if (versionStr != 0) {
			if (isIE && isWin && !isOpera) {
				tempArray         = versionStr.split(" ");
				tempString        = tempArray[1];
				versionArray      = tempString .split(",");
			}
			else {
				versionArray      = versionStr.split(".");
			}
			versionMajor      = versionArray[0];
			versionMinor      = versionArray[1];
			versionRevision   = versionArray[2];

			versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
			versionNum        = parseFloat(versionString);
        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
			if ((versionMajor > reqMajorVer) && (versionNum >= reqVer)) { return true; }
			else {
				return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );
			}
		}
	}
}

// Flash-Embed fuer IE
function embedFlash(oTag) { document.write(oTag); }