/**
 * Config Einstellungen
 * Server Pfad wird benötigt für den Zugriff auf IFRAME-Contents
 */
//var server = "http://tdict.leo.org";
var server;
var url = server + "/forum/ajax.php";
var trainerPath = "/trainer/";
var forumPath = "/forum/";
var lang = "en";
var lp = "ende";

var clear = true;

/**
* Ändert bei obj den style display auf none oder block
*/
function help(event, obj)
{
	if (obj.style.display == "none" ||obj.style.display == "") {
		positionRight(event, obj);
		obj.style.display = "block";
	}
	else {
		obj.style.display = "none";
	}
}

/**
* Setzt den Eingabefocus beim Tippen, 
* fall gerade kein Texteingabefeld aktiv ist
*/
function setFocus(dictPage) {
	// Test ob der Fokus direkt in das Eingabefeld gesetzt werden soll
	if (dictPage) {
		// Speichern der Vokabeln wird aktivierten
		ajaxGetPopUp.url = server + trainerPath + "saveVocable.php?ajax=form";
		document.dict.search.focus();
		document.dict.search.select();
		
		vrweb_sndspeed = '80';
	}
	
	// Sonderbehandlung für den Opera unter Mac
	if (is_opera && is_mac) {
		document.onkeypress = autoFocus;
	}
	else {
		document.onkeydown = autoFocus;
	}
}

/**
* Setzt den Focus automatisch in das Suchfenster, 
* solange der Focus nich in einem anderen Eingabefeld ist
* und das setFocus Cookie nicht auf false gesetzt ist
*/
function autoFocus(evt) {
	try {
		if (!(getCookie("setFocus") && getCookie("setFocus") == "false")) {
			evt = (evt) ? evt : ((event) ? event : null);
			if (evt.target) {
				var target = evt.target;
			}
			else {
				var target = evt.srcElement;
			}
			
			if (!evt.metaKey && !evt.altKey && !evt.ctrlKey && isChar(evt.keyCode) && (target.nodeName != "INPUT" || (target.type.toLowerCase() != "text" && target.type.toLowerCase() != "password")) && target.nodeName != "TEXTAREA") {
				setFocusPosition(document.dict.search, document.dict.search.value.length);
				document.dict.search.value = "";
				document.dict.search.focus();
			}
			else if (evt.keyCode == 13 && (target.nodeName != "INPUT" || (target.type.toLowerCase() != "text" && target.type.toLowerCase() != "password")) && target.nodeName != "TEXTAREA"){
				// Frage ans Wörterbuch
				if (typeof window.getSelection != "undefined") {
					var selection = window.getSelection();
				}
				else {
					var selection =  document.selection.createRange().text;
				}
				startDictRequest(selection);
			}
		}
	}
	catch(e) {
		//alert(e);
	}
}

/**
* Setzt den Focus im Field field an die Position pos 
*/
function setFocusPosition(field, pos)
{
	if (document.selection) {
		// IE Support
		// Set focus on the element
		field.focus ();

		// Create empty selection range
		var selection = document.selection.createRange ();

		// Move selection start and end to 0 position
		selection.moveStart ('character', -field.value.length);

		// Move selection start and end to desired position
		selection.moveStart ('character', pos);
		selection.moveEnd ('character', 0);
// 		selection.select ();
	}

	// Firefox support
	else if (field.selectionStart || field.selectionStart == '0') {
		field.selectionStart = pos;
		field.selectionEnd = pos;
		field.focus ();
	}
}

/**
* Überprüft ob der keyCode zu einem Buchstaben gehört
* Funktioniert nicht für Umlaute
*/
function isChar(keyCode) {
	if (keyCode >= 65 && keyCode <= 90) {
		// A-Z
		return true;
	}
	else if (is_opera && is_mac && keyCode >= 97 && keyCode < 123) {
		return true;
	}
	else if (keyCode >= 192) {
		return true;
	}
	return keyCode == 0;
}

var translate;
function clearForm()
{
	document.dict.search.defaultValue = '';
	document.dict.search.value = '';
	document.dict.search.focus();
}

/**
* Wird nach dem Laden der Seite aufgerufen
* @var boolean dictPage gibt an ob es sich um einer Wörterbuchseite handelt
*/
function onLoad()
{
}

function setClear()
{
	clear = false;
}

/**
* Fügt dict-Panel im Mozilla hinzu
*/
function addPanel() {
  if ((typeof window.sidebar == "object") &&
    (typeof window.sidebar.addPanel == "function")){
    window.sidebar.addPanel ("LEO", server + "/dict/sidebar.html","");
  }
}

/**
* Öffnet einen Folder
* Könnte eventuell eleganter über css und className gehen?
*/
function openTree(obj) {
	if (obj.nextSibling) {
		if (obj.nextSibling.style.display.toLowerCase() == "block") {
			var node = obj.nextSibling;
			while (node) {
				node.style.display = "none";
				node = node.nextSibling;
			}
		}
		else {
			var node = obj.nextSibling;
			while (node) {
				node.style.display = "block";
				node = node.nextSibling;
			}
		}
	}
}

/*
* Ändert bei obj den style display auf none oder block und tausch im "aobj" die Pfeilrichtung aus
* Wird im Forum nicht mehr verwendet. Sollte auch im Vokabeltrainer durch fxEffekt ersetzt werden
*/
function upFolder(obj)
{
	obj = obj.parentNode;
	var node = obj.firstChild;
	while (node != null)
	{
		if (node.nodeName == "H2")
		{
			node.style.display = "block";
		}
		if (node.nodeName == "DIV")
		{
			node.style.display = "none";
		}
		node = node.nextSibling;
	}
	node = obj.parentNode.firstChild;
	while(node != null)
	{
		if (node != obj)
		{
			if (node.nodeName == "H2")
			{
				node.style.display = "none";
			}
			if (node.nodeName == "DIV")
			{
				node.style.display = "block";
			}
		}
		node = node.nextSibling;
	}
}

/*
* Wählt eine Option aus und zeigt die ausgewälte Option an
*/
function selectOption(obj, name, id)
{
	// Tabs werden markiert
	try
	{
		var node = obj.parentNode;
		while (node.parentNode.nodeName.toLowerCase() == "ul" || node.parentNode.nodeName.toLowerCase() == "li" )
		{
			node = node.parentNode;
		}
		// node ist jetzt der oberste "ul"
		node = node.firstChild;
		markOption(node, obj);
	}
	catch(ex)
	{
	}

	// Der entsprechende Inhalt wird angezeigt
	var i = 0;
	node = document.getElementById(name+i);
	while (node != null)
	{
		if (i != id)
		{
			node.style.display = "none";
		}
		else
		{
			node.style.display = "block";
		}
		i++;
		node = document.getElementById(name+i);
	}
}

/*
*Option wird als gewält / nicht gewält markiert
*/
function markOption(node, obj)
{
	while(node != null)
	{
		if (node.nodeName.toLowerCase() == "li" && node.childNodes.length == 1)
		{
			// Option wird als gewält / nicht gewält markiert
			try
			{
				if (node != obj)
				{
					node.style.backgroundColor = "transparent";
				}
				else
				{
					node.style.backgroundColor = "#E4E9FF";
				}

			}
			catch(ex)
			{
			}
		}
		if (node.childNodes.length > 0)
		{
			markOption(node.firstChild, obj);
		}

		node = node.nextSibling;
	}
}

/*
* Lädt einen I-Link
*/
function getMoreInfo(event, idWord)
{
	ajaxGetMoreInfo.request(event, idWord);
}

function position(event, obj) {
	var y;
	if (self.pageYOffset) {
		// all except Explorer
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop) {
		// Explorer 6 Strict
		y = document.documentElement.scrollTop;
	}
	else if (document.body) {
		// all other Explorers
		y = document.body.scrollTop;
	}

	if (event.pageX) {
		var pageX = event.pageX;
		var pageY = event.pageY;
	}
	else {
		var pageX = event.clientX;
		var pageY = event.clientY + y;
	}
	
	if (pageX > obj.clientWidth) {
		positionRight(event, obj);
	}
	else {
		positionLeft(event, obj);
	}
}
/*
* Positioniert das info Element links von der geklickten Position
*/
function positionLeft(e, obj) {
	var y;
	if (self.pageYOffset) {
		// all except Explorer
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop) {
		// Explorer 6 Strict
		y = document.documentElement.scrollTop;
	}
	else if (document.body) {
		// all other Explorers
		y = document.body.scrollTop;
	}

	if (e.pageX) {
		var pageX = e.pageX;
		var pageY = e.pageY;
	}
	else {
		var pageX = e.clientX;
		var pageY = e.clientY + y;
	}

	obj.style.right = "";
	obj.style.left = (pageX - 10)+ "px";
	obj.style.top = (pageY - 10) + "px";
}

/*
* Positioniert das info Element rechts von der geklickten Position
*/
function positionRight(e, pos)
{
	pos.style.left = "";

	var innerWidth, offSetY, pageX, pageY;

	/**
	* Die X/Y-Position "pageX, pageY" des Events wird bestimmt
	* Fuer den IE muss dazu der Scroll-Offset "offSetY"  bestimmt werden
	*/
	if (self.pageYOffset) // all except Explorer
	{
		offSetY = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
	// Explorer 6 Strict
	{
		offSetY = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		offSetY = document.body.scrollTop;
	}
	if (e.pageX)
	{
		pageX = e.pageX;
		pageY = e.pageY;
	}
	else
	{
		pageX = e.clientX;
		pageY = e.clientY + offSetY;
	}

	/**
	* Fensterbreite "innerWidth" wird bestimmt.
	*/
	if (self.innerHeight && self.innerWidth) {
		// alle Browser auser IE
		innerWidth = self.innerWidth;
		innerHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) {
		// IE 6 Strict Mode
		innerWidth = document.documentElement.clientWidth;
		innerHeight = document.documentElement.clientHeight;
	}
	else if (document.body) {
		// andere IEs
		innerWidth = document.body.clientWidth;
		innerHeight = document.body.clientHeight;
	}

// 	if ((e.pageX - innerWidth) < 0)
// 	{
// 		pos.style.left = (innerWidth - pageX - 30)+ "px";
// 	}
// 	else
// 	{
// 		pos.style.right = (innerWidth - pageX - 30)+ "px";
// 	}

	if (pageX > 320) {
		pos.style.right = (innerWidth - pageX - 30)+ "px";
	}
	else {
		positionLeft(e, pos);
	}
	if (pageY > 600) {
		pos.style.top = (pageY - 320) + "px";
	}
	else {
		pos.style.top = (pageY - 10) + "px";
	}
}

/*
* Generiert einen QueryString aus dem angegebenen Formular und dem geklickten Button
*/
function postBackString(event, formName)
{
	if (event)
	{
		if (event.target)
		{
			var value = event.target.value;
		}
		else
		{
			var value = event.srcElement.value;
		}
	}
	
	var fields = new Array();
	if(formName)
	{
		//loop through form elements and retrieve field NAMEs and Values
		for (var x = 0; x < eval("document."+formName+".elements.length"); x++)
		{
			// join them into a string.
			var type = eval("document."+formName+".elements[x].type");
			if (type == 'submit' || type == "button")
			{
				if (eval("document."+formName+".elements[x].value") == value)
				{
					eval("fields.push(encodeURIComponent(document."+formName+	".elements[x].name)+'='+encodeURIComponent(document."+formName+".elements[x].value));");
				}
			}
			else
			{
				if (type == "checkbox")
				{
					if (document.forms[formName].elements[x].checked == true)
					{
						eval("fields.push(encodeURIComponent(document."+formName+  ".elements[x].name)+'='+encodeURIComponent(document."+formName+".elements[x].value));");
					}
				}
				else if (type == "radio")
				{
					if (document.forms[formName].elements[x].checked == true)
					{
						eval("fields.push(encodeURIComponent(document."+formName+  ".elements[x].name)+'='+encodeURIComponent(document."+formName+".elements[x].value));");
					}
				}
				else
				{
					eval("fields.push(encodeURIComponent(document."+formName+	".elements[x].name)+'='+encodeURIComponent(document."+formName+".elements[x].value));");
					//üeval("fields.push(document."+formName+	".elements[x].name+'='+document."+formName+".elements[x].value);");
				}
			}
		}
		
		// RichTextAreas werden erfasst
		eval("var iframes = document."+formName+".getElementsByTagName('IFRAME');");
		for (var i = 0; i < iframes.length; i++)
		{
			if (iframes[i].contentDocument && iframes[i].contentDocument.designMode == 'on') 
			{
				if (is_safari)
				{
					// Der Safari verwendet immer CSS zum auszeichnen
					var html = iframes[i].contentDocument.body;
					convertCssToHtml(html, iframes[i].contentDocument);
					//alert(html.innerHTML);
					fields.push(encodeURIComponent(iframes[i].id)+'='+encodeURIComponent(html.innerHTML));
					
				}
				else
				{
					fields.push(encodeURIComponent(iframes[i].id)+'='+encodeURIComponent(iframes[i].contentDocument.body.innerHTML));
				}
				
			}
			else if(iframes[i].document && iframes[i].contentWindow.document.body.contentEditable)
			{
				// IE Hack
				fields.push(encodeURIComponent(iframes[i].id)+'='+encodeURIComponent(iframes[i].contentWindow.document.body.innerHTML));
			}
		}

	}
	return fields.join('&');
}


/*
* Encodet die entities in UFT8 Chars
*/
function decodeEntities(str)
{
	var matches = str.match(/&#x(\w)+;/g);

	if (matches)
	{
		for(var i = 0; i < matches.length; i++)
		{
			// line wraps here -- be careful copy/pasting
			var charCode = "0" + matches[i].replace(/\W+/g,"");
			var replacement = String.fromCharCode(charCode);

			str = str.replace(/&#(\w)+;/,replacement);
		}
	}
	return str;
}

/*
* Fügt den Buchstaben dem aktivierten Feld hinzu
*/
function addToField(letter)
{
	try
	{
		if (field)
		{
			field.value += letter;
			field.focus();
		}
	}
	catch(e)
	{
	}
}

function doNotSubmit(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt.keyCode == 13) {
		cancelEvent(evt);
	}
}
	
/**
* Beendet das Bubbling von Eventen
*/
function cancelEvent(e) {
	e = e ? e : window.event;
	if(e.stopPropagation)
		e.stopPropagation();
	if(e.preventDefault)
		e.preventDefault();
	e.cancelBubble = true;
	e.cancel = true;
	e.returnValue = false;
	return false;
}

/*
* Schaltet zwischen verschiedenen Tabs um
*/
function activateTab(name, n)
{
	var node = document.getElementById(name + '0');
	var i = 0;
	// Eingabehelfer wird versteckt
	if (document.getElementById("assistance") && name != "assistance") {
		document.getElementById("assistance").style.display = "none";
	}
	// Tabs werden aktualisiert
	while (node) {
		if (i == n) {
			// neuer Aktiver Tab
			node.className = node.className.replace(/inactive/,"active");
			document.getElementById(name +'Content'+i).style.display = "block";
		}
		else {
			// Inaktiver Tab
			node.className = node.className.replace(/(^| )active/,"inactive");
			document.getElementById(name + 'Content'+i).style.display = "none";
		}
		i++;
		node = document.getElementById(name+i);
	}
}

/**
* Convertiert alle Tags mit CSS Auszeichnung zu reinen HTML-Tags
* Wird verwendet um Safari Input in RichTextAreas zu wandeln
*/
function convertCssToHtml(node, doc)
{
	// Kindknoten werden behandelt
	var child = node.firstChild;
	while(child)
	{
		convertCssToHtml(child, doc);
		child = child.nextSibling;
	}
	// Umformung
	if (node.style && node.style.verticalAlign == "super")
	{
		var newNode = doc.createElement("sup");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}
	if (node.style && node.style.textDecoration == "underline")
	{
		var newNode = doc.createElement("u");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}
	if (node.style && node.style.textDecoration == "line-through")
	{
		var newNode = doc.createElement("strike");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}	
}

/**
* Convertiert alle Tags mit IE HTML Nodes in Gecko HTML Nodes
* Wird verwendet um IE Input in RichTextAreas zu wandeln
*/
function convertIEHtmlToGeckoHtml(node, doc)
{
	// Kindknoten werden behandelt
	var child = node.firstChild;
	while(child)
	{
		convertCssToHtml(child, doc);
		child = child.nextSibling;
	}
	// Umformung
	if (node.style && node.style.verticalAlign == "super")
	{
		var newNode = doc.createElement("sup");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}
	if (node.style && node.style.textDecoration == "underline")
	{
		var newNode = doc.createElement("u");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}
	if (node.style && node.style.textDecoration == "line-through")
	{
		var newNode = doc.createElement("strike");
		child = node.firstChild;
		while(child)
		{
			newNode.appendChild(child);
			child = child.nextSibling;
		}
		node.parentNode.replaceChild(newNode, node);
		return;
	}	
}

/*
* Überprüft ob ein Element in einem Array enthalten ist
*/
Array.prototype.inArray = function (value)
{
	
	for (var i=0; i < this.length; i++)
	{
		if (typeof value == 'object' && typeof value.isEqual == 'function')
		{
			if (value.isEqual(this[i]))
			{
				return true;
			}
		}
		else if (this[i] === value)
		{
			return true;
		}
	}
	return false;
};

/*
* Überprüft an welcher Stelle ein Objekt auftaucht
*/
Array.prototype.position = function (value)
{
	
	for (var i=0; i < this.length; i++)
	{
		if (typeof value == 'object' && typeof value.isEqual == 'function')
		{
			if (value.isEqual(this[i]))
			{
				return i;
			}
		}
		else if (this[i] === value)
		{
			return i;
		}
	}
	return -1;
};

Array.prototype.remove = function (value)
{
	for (var i=0; i < this.length; i++)
	{
		if (this[i] === value)
		{
			this.splice(i,1);
		}
	}
	return false;
};

String.prototype.trim = function ()
{
	return this.replace(/^(\s|\n|\r)*/,"") .replace(/(\s|\n|\r)*$/,"");
};


//-->
