// JavaScript Document

//===========================================================================================================================
// K L A S S E N - D E F I N I T I O N 
//===========================================================================================================================
//---------------------------------------------------------------------------------------------------------------------------
// Class Hint: Klasse für Hinweise zu Lösungschritten
//---------------------------------------------------------------------------------------------------------------------------
// Konstruktor
function Hint(iSchrittNr)
{
	// Eigenschaften
	this.iSchrittNr = iSchrittNr;	// Lösungsschritt
	this.aKeywords = new Array(); // Assoz. Array für Stichworte zu diesem Lösungsschritt
	// Methoden
	this.addKeyword = addKeyword;
	this.getKeyword = getKeyword;
	this.getKeywordsLength = getKeywordsLength;
}
// Methodenimplementierung
// fügt ein neues Stichwort dem Array hinzu
function addKeyword(sKeywordText)
{
	this.aKeywords[this.aKeywords.length] = new Keyword(sKeywordText);
}
// gibt ein Stichwort anhand des Stringindex zurück
function getKeyword(iStichwortNr)
{
	return this.aKeywords[iStichwortNr];
}
// gibt die Grösse des Arrays zurück
function getKeywordsLength()
{
	return this.aKeywords.length;
}
//---------------------------------------------------------------------------------------------------------------------------
// ENDE Class Hint
//---------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------
// Class Keyword: Klasse für Stichworte
//---------------------------------------------------------------------------------------------------------------------------
// Konstruktor
function Keyword(sKeywordText)
{
	// Eigenschaften
	this.sKeywordText = sKeywordText; // Text für Stichwort
	this.sExplanation = ""; // Text für Erklärung
	this.bExplanationOpen = false; // Erklärung anzeigen false = nein | true = ja
	this.sTipp = ""; // Text für Hinweis
	this.bTippOpen = false;	// Kommentar anzeigen
	// Methoden
	this.setKeywordText = setKeywordText;
	this.getKeywordText = getKeywordText;
	this.setExplanation = setExplanation;
	this.getExplanation = getExplanation;
	this.setTipp = setTipp;
	this.getTipp = getTipp;
	this.setExplanationOpen = setExplanationOpen;
	this.getExplanationOpen = getExplanationOpen;
	this.setTippOpen = setTippOpen;
	this.getTippOpen = getTippOpen;
}
// Methodenimplementierung
function setKeywordText(sKeywordText)
{
	this.sKeywordText = sKeywordText;
}
function getKeywordText()
{
	return this.sKeywordText;
}
function setExplanation(sExplanation)
{
	this.sExplanation = sExplanation;
}
function getExplanation()
{
	return this.sExplanation;
}
function setTipp(sTipp)
{
	this.sTipp = sTipp;
}
function getTipp(sTipp)
{
	return this.sTipp;
}
function setExplanationOpen(bOpen)
{
	this.bExplanationOpen = bOpen;
}
function getExplanationOpen()
{
	return this.bExplanationOpen;
}
function setTippOpen(bOpen)
{
	this.bTippOpen = bOpen;
}
function getTippOpen()
{
	return this.bTippOpen;
}
//---------------------------------------------------------------------------------------------------------------------------
// ENDE Class Keyword
//---------------------------------------------------------------------------------------------------------------------------

//---------------------------------------------------------------------------------------------------------------------------
// Globale Funktionen
//---------------------------------------------------------------------------------------------------------------------------
// öffnet (schließt) den Div und gibt zuerst die Stichworte aus
explainImageOff = new Image();
explainImageOff.src = "../images/frontend/schritt_schliessen.gif";
explainImageOn = new Image();
explainImageOn.src = "../images/frontend/schritt_erklaeren.gif";
function toggleDiv(strDiv, aufgabeNummer)
{
	if(aDivVisible[aufgabeNummer] == false)
	{
		showHint(strDiv, aufgabeNummer);
		aDivVisible[aufgabeNummer] = true;
		imageName = "schritt_erklaeren" + aufgabeNummer;
		document.images[imageName].src = explainImageOff.src;
	}
	else
	{
		document.getElementById(strDiv).innerHTML = '';
		document.getElementById(strDiv).style.visibility = "hidden";
		aDivVisible[aufgabeNummer] = false;
		imageName = "schritt_erklaeren" + aufgabeNummer;
		document.images[imageName].src = explainImageOn.src;
	}
}
// schreibt alle sichtbaren Zeilen in die Div
function showHint(strDiv, aufgabeNummer)
{
		sOut = getVisibleLines(aufgabeNummer);
	  document.getElementById(strDiv).innerHTML = sOut;
		document.getElementById(strDiv).style.visibility = "visible";
}


// setzt eine Erklärung zu einem Lösungsschritt auf sichtbar|unsichtbar
function showExplanation(strDiv, aufgabeNummer, keywordNummer, bOpen)
{
	if(aHints[aufgabeNummer].getKeyword(keywordNummer).getExplanationOpen() == false)
	{	
		aHints[aufgabeNummer].getKeyword(keywordNummer).setExplanationOpen(bOpen);
		showHint(strDiv, aufgabeNummer);
	}
	else
	{
		aHints[aufgabeNummer].getKeyword(keywordNummer).setExplanationOpen(false);
		showHint(strDiv, aufgabeNummer);
	}
}
// setzt einen Tipp zu einem Lösungsschritt auf sichtbar|unsichtbar
function showTipp(strDiv, aufgabeNummer, keywordNummer, bOpen)
{
	if(aHints[aufgabeNummer].getKeyword(keywordNummer).getTippOpen() == false)
	{	
		aHints[aufgabeNummer].getKeyword(keywordNummer).setTippOpen(bOpen);
		showHint(strDiv, aufgabeNummer);
	}
	else
	{
		aHints[aufgabeNummer].getKeyword(keywordNummer).setTippOpen(false);
		showHint(strDiv, aufgabeNummer);
	}
}
// Funktion gibt alle sichtbaren (geöffneten) Zeilen als String zurück
function getVisibleLines(aufgabeNummer)
{
	sOut = "";
	for(i = 0; i < aHints[aufgabeNummer].getKeywordsLength(); i++)
	{
		sOut = sOut + aHints[aufgabeNummer].getKeyword(i).getKeywordText() + "<br />";
		if(aHints[aufgabeNummer].getKeyword(i).getExplanationOpen())
		{
			sOut = sOut + aHints[aufgabeNummer].getKeyword(i).getExplanation() + "<br />";
		}
		if(aHints[aufgabeNummer].getKeyword(i).getTippOpen())
		{
			sOut = sOut + aHints[aufgabeNummer].getKeyword(i).getTipp() + "<br />";
		}
	} 
	return sOut;
}
// Funktion öffnet ein neues Fenster und zeigt darin Erklärung zu Stichwort an
function showKeywordExplanation(IDstich, IDstich_erkl)
{
	var url = 'show_keyword_explanation.php?IDstich_erkl=' + IDstich_erkl + '&IDstich=' + IDstich;
	oExplainWindow = window.open(url, 'explain', 'width=640,height=400,scrollbars=1');
}
//-------------------------------------------------------------------------------------------------------------------------------
// Funktionen für Soundsteuerung
//-------------------------------------------------------------------------------------------------------------------------------
var player = null;
var iVolume = 60;
var bSoundOn = false;
soundImageOff = new Image();
soundImageOff.src = "../images/frontend/ton_aus.gif";
soundImageOn = new Image();
soundImageOn.src = "../images/frontend/ton_ein.gif";
function initPlayer()
{
	try
	{
		if(window.ActiveXObject) // Internet Explorer
  		{
    		player = new ActiveXObject("WMPlayer.OCX.7");
  		}
  		else if (window.GeckoActiveXObject) // Netscape7.1
  		{
    		player = new GeckoActiveXObject("WMPlayer.OCX.7");
  		}
	}
	catch(e)
	{
		//alert('Bitte verwenden Sie den Windows Media Player 7 oder 9.\n Download: http://www.microsoft.com/windows/windowsmedia/download/default.asp')
	}
	if (player)
	{
  		var versionString = player.versionInfo;
//		alert(versionString);
//		document.soundform.volumewert.value = iVolume;
//		document.getElementById("volumewert").innerHTML = iVolume;
		document.player.settings.volume = iVolume;
	}
}
function startPlayer(url)
{
	document.player.URL = url;
	document.player.controls.play();
}
function stopPlayer()
{
	document.player.controls.stop();
}
function toggleSound(url, aufgabeNummer)
{
	volumeFeld = "volumewert" + aufgabeNummer;
	document.getElementById(volumeFeld).innerHTML = iVolume;
	if(bSoundOn == false)
	{
		bSoundOn = true;
		imageName = "soundButton" + aufgabeNummer;
		document.images[imageName].src = soundImageOff.src;
		document.player.URL = url;
		document.player.controls.play();
	}
	else
	{
		bSoundOn = false;
		imageName = "soundButton" + aufgabeNummer;
		document.images[imageName].src = soundImageOn.src;
		document.player.controls.stop();
	}
}
function pumpUpTheVolume(aufgabeNummer)
{
	if(iVolume < 100)
		iVolume += 20;
	volumeFeld = "volumewert" + aufgabeNummer;
	document.getElementById(volumeFeld).innerHTML = iVolume;
//	document.soundform.volumewert.value = iVolume;
	document.player.settings.volume = iVolume;
}
function comeDownVolume(aufgabeNummer)
{
	if(iVolume > 0)
		iVolume -= 20;
	volumeFeld = "volumewert" + aufgabeNummer;
	document.getElementById(volumeFeld).innerHTML = iVolume;
//	document.soundform.volumewert.value = iVolume;
	document.player.settings.volume = iVolume;
}

function toggleDivPrototype( element ) {
    var e = $(element);

    if (e) {
        e.style.display = ((e.style.display != 'block') ? 'block' : 'none');
    }
}


function toggleImgPrototype( element ) {
    var e = $(element);

    if (e) {
        e.src = ((e.src != explainImageOff.src) ? explainImageOff.src : explainImageOn.src);

    }
}