
/*

Markierung von Glossarbegriffen per JS

Version:		1.0 (2008-02-04)
Copyright: 	Hald online (www.hald.de)

sGlossarLanguage muss vorher gesetzt sein (de oder en)

*/


// ----------------------------------------------
// Globale Variablen für Markup
var markup_step = 0;

// ----------------------------------------------
// Hilfsfunktionen

//function $(str) {
//	return document.getElementById(str);
//}

function _stringTrim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

// ----------------------------------------------
// Ajax-Funktion

function doAjaxCall(strURL)
{
	var objAjax;

	if(typeof XMLHttpRequest != "undefined")
	{
		objAjax = new XMLHttpRequest();
	}
	else
	{
		objAjax = new ActiveXObject("Microsoft.XMLHTTP");
	}

	objAjax.open("GET",strURL,false);
	objAjax.send(null);
	var strResponse = objAjax.responseText;

	return strResponse;
}

function getTtTxt(iNo) {
	return doAjaxCall('http://www.d-traffic.de/hartmann/de/glossar-items.php?lang='+sGlossarLanguage+'&mode=ajax_text&no='+iNo);
}

// ----------------------------------------------

// "Main-Funktion" für Markup-Script
function markupGlossary(sContentID) {

	// Basis
	oStartNode = $(sContentID);

	// Text dieser Node prüfen und gefundene Begriffe markieren
	_markupGlossaryText(oStartNode);

	// Wenn _markupGlossaryText fertig ist, Markierungen ersetzen

	sNodeCode = oStartNode.innerHTML;

	// Alle eröffnende Markierungen ersetzen
	sNodeCode = sNodeCode.replace(/##\{(\d{1,}):/g, "<span style='color:#000099;' onmouseover=\"Tip(getTtTxt('$1'), WIDTH, 500, FOLLOWMOUSE, false);\">");
	// Alle abschließende Markierungen ersetzen
	sNodeCode = sNodeCode.replace(/\}##/g, "</span>");

	// HTML-Code im Knoten durch neuen Code ersetzen
	oStartNode.innerHTML = sNodeCode;
}

function _markupGlossaryText(oNode) {

	// text in dieser node vorhanden?
	bCheckNode = oNode.nodeValue == null ? false : true;
	bCheckChilds = true;

	// kein attribut vorhanden, welches die auswertung verbietet?
	if(oNode.getAttribute) {
		if(oNode.getAttribute("GLOSSARYMARKUP")=="NO") {
			bCheckNode = false;
			bCheckChilds = false;
		}
	}

	// glossarbegriffe in node suchen?
	if(bCheckNode) {

		sResultText = oNode.nodeValue;
		bItemFound = false;


		// jeden glossarbegriff durchgehen
		for(var iCurGlossar=0; iCurGlossar<iGlossaryLength; iCurGlossar++) {

			sGlossaryItem = CaGlossary[iCurGlossar];
			iPos = sResultText.indexOf(sGlossaryItem);

			if(sGlossaryItem=='Corporate Design') {
				//console.log(sResultText, iPos);
			}

			if(iPos==-1) continue;

			// gefunden: markieren
			sResultText = sResultText.slice(0,iPos) + "##{" + iCurGlossar + ":" + sGlossaryItem + "}##" + sResultText.slice(iPos + sGlossaryItem.length);
			bItemFound = true;

		}

		// text wieder einfügen (wenn etwas gefunden wurde)
		if(bItemFound) {
			oNode.nodeValue = sResultText;
		}
	}

	// Childs auslesen und rekursiv durchlaufen
	if(bCheckChilds && oNode.hasChildNodes) {
		var iNodeLength = oNode.childNodes.length;
		for(var iCurNode=0; iCurNode<iNodeLength; iCurNode++) {
			_markupGlossaryText(oNode.childNodes[iCurNode]);
		}
	}

	// Berücksichtigen, wenn in dieser Node keine Texte ersetzt werden sollen
	// GLOSSARYMARKUP="NO"
}

// ----------------------------------------------