	
	/**********************************************************************/
	/* Fachhochschule Münster                                             */
	/* Fachbereich Elektrotechnik und Informatik                          */
	/*                                                                    */
	/* extended DHTML Controls                                            */
	/* Projektarbeit im Fach Weborganisation/-Gestaltung (DHTML)          */
	/*                                                                    */
	/* (c) 2006 Matthias Boehmer | mail@m-boehmer.de | www.m-boehmer.de   */
	/*                                                                    */
	/* $Id: script.js,v 1.22 2006/03/20 22:33:17 mboehmer Exp $           */
	/*                                                                    */
	/**********************************************************************/
	
	// check, wheter browser is internet explorer or not
	var isIE = (window.opera || window.netscape) ? false : true;
	
	// global array for all html-objects
	var xElements = new Object();
	var xTooltip = null;	
	

	// short form for long function getElementsByTagName
	function getByTag(tagName) {
		return document.getElementsByTagName(tagName);	
	}

	// short form for long function getElementById
	function getById(id) {
		return document.getElementById(id);	
	}
	
	// function for debugging purpose
	function debug(msg) {
		alert("[debug] " + msg);
	}
	
	// add eventhandler to node
	function addEventOnClick(node,f) {
		// debug("addEventOnClick: "+f);
		// add the function to eventhandlerers
		if (!isIE) {
			node.setAttribute("onclick", f);
		} else {
			// TODO: add eventhandler instead of replace in IE
			node.onclick = new Function(f);
		}	
	}

	// add eventhandler to node
	function addEventOnMouseOver(node,f) {
		// add the function to eventhandlerers
		if (!isIE) {
			node.setAttribute("onmouseover", f);
		} else {
			// TODO: add eventhandler instead of replace in IE
			node.onmouseover = new Function(f);
		}	
	}
	
	// add eventhandler to node
	function addEventOnMouseMove(node,f) {
		// add the function to eventhandlerers
		if (!isIE) {
			node.setAttribute("onmousemove", f);
		} else {
			node.onmousemove = new Function(f);
		}	
	}

	// add eventhandler to node
	function addEventOnMouseOut(node,f) {
		// add the function to eventhandlerers
		if (!isIE) {
			node.setAttribute("onmouseout", f);
		} else {
			// TODO: add eventhandler instead of replace in IE
			node.onmouseout = new Function(f);
		}	
	}
		
	// get CSS-classname from node
	function getClassName(node) {
		// debug("getClassName(node)");
		if (isIE) {
			return node.className;
		} else {
			return node.getAttribute("class");
		}
	}
	
	// set CSS-classname of node
	function setClassName(node, c) {
		// debug("setClassName(node, c)");
		if (isIE) {
			node.className = c;
		} else {
			return node.setAttribute("class",c);
		}
	}
	

	// concat two strings and add space
	function appendToString(str, add) {
		// debug("appendToString([str= "+str+"], [add= "+add+"])");
		
		// assert
		if (str == null) return add;
		if (add == null) return str;
		
		// only if not already done
		if (str.indexOf(add) == -1) {
			return (str + " " + add);
		} else {
			return str;
		}
	}

	// remove part from string
	function removeFromString(str, rem) {
		// assert
		if (str == null) return ("");
		if (rem == null) return str;
		
		// only if not already done
		if (str.indexOf(rem) != -1) {
			var array = str.split(rem);
			return array.join(" ");
		} else {
			return str;
		}
	}

	// adds a classname to CSS-style
	function addClassToNodeStyle(node, nc) {
		// debug("addClassToNodeStyle(node="+node+", nc="+nc+")");
		// assert
		if ((node == null) || (nc == null)) return false;

		// set new classnames
		var oldclass = getClassName(node);
		setClassName(node,appendToString(oldclass,nc));
	}

	// remove classname from style of node
	function removeClassFromNodeStyle(node, nc) {
		// debug("removeClassFromNodeStyle(node="+node+", nc="+nc+")");
		// assert
		if ((node == null) || (nc == null)) return null;
		
		// set new classnames
		var oldclass = getClassName(node);
		setClassName(node,removeFromString(oldclass,nc));
	}

	// hide a html-node in document
	function hideNode(node) {
		// assert
		if (node == null) return false;
		
		// hide
		node.style.visibility = "hidden";
		node.style.position = "absolute";
	}

	// setzt den Class-Style eines Nodes abhaengig davon, ob der xRegExp passt oder nicht
	function setRegExpStyleListener(node) {
		// debug("setRegExpStyleListener(node)");
		xClassErr = node.getAttribute("xClassErr");
		xClassOkay = node.getAttribute("xClassOkay");;
		
		if (checkRegExp(node)) {
			// regExp passt
			addClassToNodeStyle(node, xClassOkay);
			removeClassFromNodeStyle(node,xClassErr);
		} else {
			// regExp passt nicht
			addClassToNodeStyle(node, xClassErr);
			removeClassFromNodeStyle(node, xClassOkay);
		}
	
	}

	// prueft, ob das value eines Nodes auf den regulaeren Ausdruck xRegExp (Attribut) passt 
	function checkRegExp(node) {
		value = node.value;
		xRegExp = node.getAttribute('xRegExp');
//		debug(xRegExp);		
		// wenn es kein Attribut xRegExp gibt, dann nicht pruefen
		if (xRegExp == null)
			return true;
		
		// Regulaeren Ausdruck aus String erzeugen
		var re = new RegExp(xRegExp);
		
		// pruefen
		if (value.match(re)) 
			return true;
		else 
			return false
	}
	
	
	// add the new eventhandler for onkeyup for setting css-class depending on regexp
	function addRegExpStyleListener(node) {
		// debug("addRegExpStyleListener(node="+node.name+")");
		
		// add the function to eventhandler
		if (!isIE) {
			oldhandler = node.getAttribute("onkeyup");
			node.setAttribute("onkeyup", "setRegExpStyleListener(this); " + ((oldhandler == null) ? "" : oldhandler));
		} else {
			// TODO: add eventhandler instead of replace in IE
			node.onkeyup = new Function("setRegExpStyleListener(this);");
		}
	}
	
	// adds an xRegExp for existing xType attribute
	function addRegExpFromType(node) {
		// debug("addRegExpFromType(node="+node.name+")");
		var xregexp = "";

		// get the type
		xtype = node.getAttribute("xType");

		// create an regexp
		switch(xtype) {
			case "integer": xregexp = "^[0-9]+$"; break;			
			case "date": xregexp = "^[0-9]{1,2}.[0-9]{1,2}.[0-9]{4}$"; break;
			case "plz": xregexp="^[A-Za-z]{0,3}[-]{0,1}[0-9]{5}$"; break;
			case "phone": xregexp="^[0-9-/\+\(\)]+$"; break;
		}

		// set the xregexp to node		
		if (xregexp != "") node.setAttribute("xRegExp", xregexp);
	}
	
	
	// find all relevant nodes in the document and save a reference in global array
	function getAllNodes() {
		var allNodes = new Object();
		
		// get all input fields
		allNodes['input'] = new Array();
		allNodes['radio'] = new Array();
		allNodes['checkbox'] = new Array();
		allNodes['passw'] = new Array();

		var allInput = getByTag("input");
		for (var i=0; i < allInput.length; i++) {
			switch (allInput[i].type) {
				case "text":
					allNodes['input'].push(allInput[i]);
					break;
				case "checkbox":
					allNodes['checkbox'].push(allInput[i]);
					break;
				case "radio":
					allNodes['radio'].push(allInput[i]);
					break;
				case "password":
					allNodes['input'].push(allInput[i]);
					break;
			}		
		}

		// get all select boxes and lists
		allNodes['selectBox'] = new Array();
		allNodes['selectList'] = new Array();
		
		var allSelects = getByTag("select");	
		for (var i=0; i < allSelects.length; i++) {
			s = allSelects[i].size;
			if (s > 1) {
				// debug("s>1: "+ allSelects[i].name + " selectList:" + allSelects[i].getAttribute('size'));
				allNodes['selectList'].push(allSelects[i]);
			} else {
				// debug("else: "+ allSelects[i].name + " selectBox:" + allSelects[i].getAttribute('size'));
				allNodes['selectBox'].push(allSelects[i]);
			}		
		}
		
		// get all select textareas
		allNodes['textarea'] = getByTag("textarea");

		return allNodes;
	}
	
	// toggles the value and style of a checkbox
	function toggleXCheckBox(node) {
		// get classname for down status		
		var xCheckBoxDown = (node.refer.attributes["xClassDown"]) ? node.refer.attributes['xClassDown'].value : "";
//		debug("xCheckBoxDown: " + node.refer.attributes["xClassDown"] + " " + xCheckBoxDown);

		if (node.refer.checked) {
			removeClassFromNodeStyle(node,xCheckBoxDown);
			node.refer.checked = false;
		} else {
			addClassToNodeStyle(node,xCheckBoxDown);
			node.refer.checked = true;
		}
	}
	
	// set the radiobutton to "checked"
	function setXRadioButtonChecked(node) {
		if (!node.refer.checked) {
			// get classname for down status
			var xRadioDown = (node.refer.attributes["xClassDown"]) ? node.refer.attributes['xClassDown'].value : "";

			addClassToNodeStyle(node,xRadioDown);
			node.refer.checked = true;
		}
	}
	
	// toggles the value and style of a radiobutton
	function toggleXRadioButton(node) {
		// debug(node.refer.name);

		// set checked
		setXRadioButtonChecked(node);
		
		// set other radiobuttons of group unchecked
		for (var i=0; i < xElements['radio'].length; i++) {
			c = xElements['radio'][i];
			if ((c.name == node.refer.name) && (c != node.refer)) {
				// get classname for down status
				var xRadioDown = (c.attributes["xClassDown"]) ? c.attributes['xClassDown'].value : "";
				removeClassFromNodeStyle(c.refer, xRadioDown);
				//node.refer.checked = true;
			}
		}
	}
	
	// create XRadiobuttons
	function createXRadioButtons (nodes) {
		for (var i=0; i < nodes.length; i++) {
			e = nodes[i];
			// debug(e.name+": "+e.value);
			img = document.createElement("img");
			img.src = "img/spacer.gif";
			
			// assign the style for xCheckBox
			var xClass = (e.attributes["xClass"]) ? e.attributes['xClass'].value : "";
			addClassToNodeStyle(img, xClass);
			
			// if radiobutton is checked by default
			if (e.checked) {
				// get classname for down status
				var xRadioDown = (e.attributes["xClassDown"]) ? e.attributes['xClassDown'].value : "";
				addClassToNodeStyle(img, xRadioDown);
			}
			
			// get class name
			var xClassOver = (e.attributes["xClassOver"]) ? e.attributes['xClassOver'].value : "";

			// add the function to eventhandler
			addEventOnClick(img,"toggleXRadioButton(this);");
			addEventOnMouseOver(img,"addClassToNodeStyle(this,'"+xClassOver+"');");
			addEventOnMouseOut(img,"removeClassFromNodeStyle(this,'"+xClassOver+"');");

			// add a handle to the orignal checkbox to the div
			img.refer = e;
			e.refer = img;

			// add xTooltip
			if (e.attributes["xTooltip"]) {
				img.setAttribute("xTooltip", e.attributes["xTooltip"].value);
			}

			// add div to document					
			e.parentNode.insertBefore(img,e);
			
			// hide original radiobutton
			hideNode(e);
		}
	}

		
	// create XCheckBoxes
	function createXCheckBoxes (nodes) {
		for (var i=0; i < nodes.length; i++) {
		
			e = nodes[i];
			
			img = document.createElement("img");
			img.src = "img/spacer.gif";
			
			// assign the style for xCheckBox
			var xClass = (e.attributes["xClass"]) ? e.attributes['xClass'].value : "";
			addClassToNodeStyle(img,xClass);
			
			// if checkbox is checked by default
			if (e.checked) {
				// get classname for down status
				var xCheckBoxDown = (e.attributes["xClassDown"]) ? e.attributes['xClassDown'].value : "";
				addClassToNodeStyle(img, xCheckBoxDown);
			}
			
			// get class name
			var xClassOver = (e.attributes["xClassOver"]) ? e.attributes['xClassOver'].value : "";
			
			// add the function to eventhandler
			addEventOnClick(img,"toggleXCheckBox(this);");
			addEventOnMouseOver(img,"addClassToNodeStyle(this,'"+xClassOver+"');");
			addEventOnMouseOut(img,"removeClassFromNodeStyle(this,'"+xClassOver+"');");
		
			// add a handle to the orignal checkbox to the div
			img.refer = e;
			
			// add xTooltip
			if (e.attributes["xTooltip"]) {
				img.setAttribute("xTooltip", e.attributes["xTooltip"].value);
			}

			// add div to document					
			e.parentNode.insertBefore(img,e);

			// hide original checkbox
			hideNode(e);

		}
	}

	// set regexp-mechanismn for nodes	
	function createRegExpMechanism (nodes) {
		for (var i=0; i < nodes.length; i++) {
			e = nodes[i];

			// set the attribute xRegExp if attribute xType exists
			if (e.getAttribute("xType") != null)
				addRegExpFromType(e);

			// add the eventhandler if attribute xregexp exists
			if (e.getAttribute("xregexp") != null)
				addRegExpStyleListener(e);
		}
	
	}

	// show the pulldown menue of a xSelectBox
	function showXSelectBoxMenue(node) {
		// debug("showXSelectBoxMenue(node)");
		node.xSelectBoxMenue.style.visibility = "visible";
	}

	// hide the pulldown menue of a xSelectBox
	function hideXSelectBoxMenue(node) {
		// debug("hideXSelectBoxMenue(node)");
		node.xSelectBoxMenue.style.visibility = "hidden";
	}

	// replaces the value of xSelectBox
	function showValueXSelectBox(node) {
		sel = node.originalselect;
		value = sel.options[sel.selectedIndex].text;
		// debug("node.xSelectBoxValue: " + node);
		node.xSelectBoxValue.nodeValue = value;
	}
	
	// select the option in original select-box
	function setSelectedIndexXSelectBox(li) {
		li.originalselect.selectedIndex = li.index;
		showValueXSelectBox(li.xSelectBox);
	}

	// select the option in original select-list
	function setSelectedIndexXSelectList(li) {

		opt = li.originalselect.options;
		sel = li.originalselect;

		if (sel.multiple) {
			opt[li.index].selected = !opt[li.index].selected;
			
			// set the style
			if (opt[li.index].selected) {
				addClassToNodeStyle(opt[li.index].li, "xSelectListOptionDown");
			} else {
				removeClassFromNodeStyle(opt[li.index].li, "xSelectListOptionDown");
			}
		} else {
			// set the selected index in original select list
			sel.selectedIndex = li.index;
			
			// set the sytles in index in cSelectList
			for (var m = 0; m < opt.length; m++) {
				if (opt[m].selected) {
					addClassToNodeStyle(opt[m].li, "xSelectListOptionDown");
				} else {
					removeClassFromNodeStyle(opt[m].li, "xSelectListOptionDown");
				}
			}
		}

	}

	// prepare values and send form
	// by hofer@eyecatch.at
	function prepareAndSend (node) {
		var scriptName = document.URL.search (/archiv.+/);

		xToolName=node.attributes['xTooltip'].value;
		name=xToolName.substring (16, xToolName.lastIndexOf (" aus"));

		switch (name) {
			case "ein Thema": 	
				if (document.af.topic.value!="-") {
				document.af.letter.value="-";
				document.af.architect.value="-";
				if (document.getElementById("architect2") != null) {
					document.af.architect2.value="-";
				}
				if (document.getElementById("project") != null) {
					document.af.project.value="-";
				}
			}
				break;

			case "eine 2te ArchitektIn": 	
				document.af.architect.options.selectedIndex=0;
				//with (document.af.architect) alert (options[selectedIndex].value);
				if (document.getElementById("project") != null) {
					document.af.project.value="-";
				}
				if (document.getElementById("topic") != null) {
					document.af.topic.value=0;
				}
				break;
				
			case "eine ArchitektIn": 	
				if (document.getElementById("project") != null) {
					document.af.project.value="-";
				}
				
				if (scriptName == -1) { 
					if (document.getElementById("topic") != null) {
						document.af.topic.value=0;
					}
				} 
				break;	
							
			case "ein Projekt":
				if (scriptName == -1) { // werkliste.php
					if (document.getElementById("topic") != null) {
						document.af.topic.value=0;
					}
				}
				if (document.af.letter.value == "-") document.af.architect.value="-";	
				break;	
			
		}
		document.af.submit();

	}

	// move select-menues if larger than browserwindow
	function moveXSelectBoxes (nodes, heights, zIndex) {
		for (var i=0; i < nodes.length; i++) {
			// get easy handle to node
			var e = nodes[i];
			//debug(e.name);
			e.xSelectBox.xSelectBoxMenue.style.visibility = "visible";
			eval ('document.getElementById("'+e.name+'").style.zIndex='+zIndex[i]+';');
			e.xSelectBox.xSelectBoxMenue.style.top = "-"+heights[i]+"px";
			e.xSelectBox.xSelectBoxMenue.style.visibility = "hidden";
		}		
	}
	
	// add the styleable select boxes to the document
	function createXSelectBoxes (nodes) {
		for (var i=0; i < nodes.length; i++) {
			// get easy handle to node
			var e = nodes[i];

			// debug(e.name);
			
			// get classes
			var xClass = (e.attributes["xClass"]) ? e.attributes['xClass'].value : "";
			var xClassArrow = (e.attributes["xClassArrow"]) ? e.attributes['xClassArrow'].value : "";
			var xClassMenue = (e.attributes["xClassMenue"]) ? e.attributes['xClassMenue'].value : "";
			var xClassText = (e.attributes["xClassText"]) ? e.attributes['xClassText'].value : "";
			
			// create main-node for xSelectBox and set style
			var xSelectBox = document.createElement("div");
			addClassToNodeStyle(xSelectBox,"xSelectBox");
			addClassToNodeStyle(xSelectBox,e.className);
			
			// create node for visible selection and set style
			var xSelectBoxText = document.createElement("div");
			addClassToNodeStyle(xSelectBoxText, xClassText);	
			
			// create node for pulldown arrow and set style
			var xSelectBoxPulldown = document.createElement("div");
			addClassToNodeStyle(xSelectBoxPulldown, xClassArrow);

			// create node for pulldown menue and set style
			var xSelectBoxMenue = document.createElement("div");
			addClassToNodeStyle(xSelectBoxMenue,xClassMenue);
			xSelectBoxMenue.style.visibility = "hidden";
	
			// create text-node for value
			var xSelectBoxValue = document.createTextNode("select");
	
			// add some referers for easier use
			e.xSelectBox = xSelectBox;
			xSelectBox.originalselect = e;
			xSelectBox.xSelectBoxValue = xSelectBoxValue;
			xSelectBox.xSelectBoxText = xSelectBoxText;
			xSelectBox.xSelectBoxPulldown = xSelectBoxPulldown;
			xSelectBox.xSelectBoxMenue = xSelectBoxMenue;

			// add the options as unsorted list
			var xSelectBoxOptions = document.createElement("ul");
			for (var j = 0; j < e.options.length; j++) {
				var opt = document.createElement("li");
				// debug("select: " + e.name + " | option: " + opt.text);
				opt.index = j;
				opt.originalselect = e;
				opt.xSelectBox = xSelectBox;
				var optText = document.createTextNode(e.options[j].text);
				
				// get class names and set them
				var xClass = (e.options[j].attributes["xClass"]) ? e.options[j].attributes['xClass'].value : "";
				var xClassOver = (e.options[j].attributes["xClassOver"]) ? e.options[j].attributes['xClassOver'].value : "";
				addClassToNodeStyle(opt, xClass);
				
				addEventOnClick(opt,"setSelectedIndexXSelectBox(this);");
				addEventOnMouseOver(opt,"addClassToNodeStyle(this,'" + xClassOver + "');");
				addEventOnMouseOut(opt,"removeClassFromNodeStyle(this,'" + xClassOver + "');");

				opt.appendChild(optText);
				xSelectBoxOptions.appendChild(opt);
			}

			// put nodes together
			xSelectBoxText.appendChild(xSelectBoxValue);
			xSelectBox.appendChild(xSelectBoxText);
			xSelectBox.appendChild(xSelectBoxPulldown);
			xSelectBoxMenue.appendChild(xSelectBoxOptions);
			xSelectBox.appendChild(xSelectBoxMenue);

			// add the function to eventhandlerers
			
			if (i==0 && secAct==1) {
				addEventOnMouseOver(xSelectBox, "document.af.architect2.xSelectBox.xSelectBoxMenue.style.visibility = 'visible';document.af.architect.xSelectBox.xSelectBoxMenue.style.visibility = 'visible';");
				addEventOnMouseOut(xSelectBox, "document.af.architect2.xSelectBox.xSelectBoxMenue.style.visibility = 'hidden';document.af.architect.xSelectBox.xSelectBoxMenue.style.visibility = 'hidden';");
			
			}
			else {
				addEventOnMouseOver(xSelectBox, "showXSelectBoxMenue(this);");
				addEventOnMouseOut(xSelectBox, "hideXSelectBoxMenue(this);");
			}
			// extended by hofer@eyecatch.at
			addEventOnClick(xSelectBox, "prepareAndSend(this);");
			
			// add xTooltip
			if (e.attributes["xTooltip"]) {
				xSelectBox.setAttribute("xTooltip", e.attributes["xTooltip"].value);
				xSelectBoxText.setAttribute("xTooltip", e.attributes["xTooltip"].value);
				xSelectBoxPulldown.setAttribute("xTooltip", e.attributes["xTooltip"].value);
			}

			// set the selected default value
			showValueXSelectBox(xSelectBox);
			
			// add xSelectBox to document					
			e.parentNode.insertBefore(xSelectBox,e);

			// hide original checkbox
			hideNode(e);
		}
	}
	
	// add the styleable select boxes to the document
	function createXSelectLists (nodes) {
		for (var i=0; i < nodes.length; i++) {
			// get easy handle to node
			var e = nodes[i];

			// debug("in createXSelectLists " + e.name);

			// create main-node for xSelectBox and set style
			var xSelectList = document.createElement("div");
			var xClass = (e.attributes["xClass"]) ? e.attributes['xClass'].value : "";
			addClassToNodeStyle(xSelectList, xClass);

			// add some referers for easier use
			e.xSelectList = xSelectList;
			xSelectList.originalselect = e;
			
			// add the options as unsorted list
			var xSelectListOptions = document.createElement("ul");
			for (var j=0; j < e.options.length; j++) {

				// create list item for option
				var opt = document.createElement("li");
				var optText = document.createTextNode(e.options[j].text);
				
				// set some references
				opt.index = j;
				opt.originalselect = e;
				opt.xSelectList = xSelectList;
				e.options[j].li = opt;

				// get class names and set them
				var xClass = (e.options[j].attributes["xClass"]) ? e.options[j].attributes['xClass'].value : "";
				var xClassOver = (e.options[j].attributes["xClassOver"]) ? e.options[j].attributes['xClassOver'].value : "";
				var xClassDown = (e.options[j].attributes["xClassDown"]) ? e.options[j].attributes['xClassDown'].value : "";
				addClassToNodeStyle(opt, xClass);
				
				// add xTooltip
				if (e.attributes["xTooltip"]) {
					opt.setAttribute("xTooltip", e.attributes["xTooltip"].value);
				}
				
				// add the event handlers for functionality
				addEventOnClick(opt,"setSelectedIndexXSelectList(this);");
				addEventOnMouseOver(opt,"addClassToNodeStyle(this,'"+ xClassOver +"');");
				addEventOnMouseOut(opt,"removeClassFromNodeStyle(this,'"+ xClassOver +"');");

				// add option to document
				opt.appendChild(optText);
				xSelectListOptions.appendChild(opt);
				
				// initialize
				if (e.options[j].selected) {
					addClassToNodeStyle(opt, xClassDown);
				}

			}
			
			// put nodes together
			xSelectList.appendChild(xSelectListOptions);

			// add xSelectBox to document
			e.parentNode.insertBefore(xSelectList,e);

			// hide original checkbox
			hideNode(e);
			
			// debug("out createXSelectLists " + e.name);
		}
	}
	
	
	// update the tooltip
	function updateXTooltip(mozillaEvent) {
		// assert
		if (xTooltip == null) return false;
		
		// debug("updateXTooltip");
		
		// get event source
		if (isIE) {
			eventSrc = event;
			eventSrcObj = event.srcElement;
		} else {
			eventSrc = mozillaEvent;
			eventSrcObj = mozillaEvent.target;
		}
   
		// update the tooltip
		if (eventSrcObj.attributes["xTooltip"]) {
			
			var x,y;
			if (self.pageYOffset) { // all except Explorer 
				x = self.pageXOffset;
				y = self.pageYOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
				x = document.documentElement.scrollLeft;
				y = document.documentElement.scrollTop;
			} else if (document.body) { // all other Explorers
				x = document.body.scrollLeft;
				y = document.body.scrollTop;
			}
			
			xTooltip.innerHTML = eventSrcObj.attributes["xTooltip"].value;
			xTooltip.style.top = eventSrc.clientY + 13 + y + "px";
			xTooltip.style.left = eventSrc.clientX + 13 + x + "px";
			
			// visibility
			xTooltip.style.visibility = "visible";

		} else {
			xTooltip.style.visibility = "hidden";

		}
	}
	
	// add functionatiliy for the tooltip
	function addXTooltip() {
		// add div to document
		// debug("addXTooltip");
		xTooltip = document.createElement("div");
		addClassToNodeStyle(xTooltip, "xTooltip");
		addClassToNodeStyle(xTooltip, "font");
		xTooltip.style.top = "10px";
		xTooltip.style.left = "10px";
		bodies = getByTag('body');
		body = bodies[0];
		
		body.appendChild(xTooltip);
	
		// update the xTooltip for every mouse movement
		document.onmousemove = updateXTooltip;
	}
	
	
	
	// main function: creates all the functionality for extended DHTML Controls
	function doXStyling() {
		// debug('BOF function doXStyling()');
		
		// zweidimensionales assoziatives Array, in dem alle zu stylenden Nodes gespeichert werden
		xElements = getAllNodes();
		
		// set regexp-mechanismn for all input-fields
		createRegExpMechanism(xElements['input']);

		// set regexp-mechanismn for all textarea-fields
		//createRegExpMechanism(xElements['textarea']);

		// add the styleable checkboxes to the document
		//createXCheckBoxes(xElements['checkbox']);

		// add the styleable radiobuttons to the document
		//createXRadioButtons(xElements['radio']);

		// add the styleable select boxes to the document
		createXSelectBoxes(xElements['selectBox']);

		// add the styleable select lists to the document
		//createXSelectLists(xElements['selectList']);
		
		// add xTooltip
		//addXTooltip();
		
		// debug('EOF function doXStyling()');
	}
	