
	// das das nicht einfacher mit parseInt zur Basis 16 ????????????????????
	// muss man im praktiwchen Fall mal ausprobieren.

	function hex2dec( hex ) {

		var i, res = 0;

		for ( i = 0; i < hex.length; i++ ) {
			res		+= hexString.indexOf( hex.charAt( i ) ) * Math.pow( 16, hex.length - i - 1 );
		}

		return res;
	}


	function dec2hex( dec ) {

		var i, res = "", mod;
		dec		= dec * 1;
		while ( dec > 0 ) {
			mod		= dec % 16;
			res		= hexString.charAt( mod ) + res;
			dec		= Math.floor( dec / 16 );
		}

		return res;
	}




	function startsWith( head, str ) {
		return str.substring( 0, head.length ) == head;
	}


	function endsWith( text, tail ) {

		if ( text.length < tail.length ) {
			return false;
		}

		if ( text.substring( text.length - tail.length ) == tail ) {
			return true;
		}
		else {
			return false;
		}

	}


	function getCookieValue( key ) {	// liefert null bei nicht gefunden

		var nStart, nMax, ni, sValue, sCk;

		key		= key + "=";

 		sCk		= document.cookie;

	 	ni		= sCk.indexOf( key );
		if ( ni == -1 ) {
			return null;
		}

		ni		= ni + key.length;
		nMax	= sCk.length;

		if ( ni < nMax ) {
			nStart	= ni;
			while ( (ni <= nMax) && (sCk.charAt( ni ) != ";" ) ) {
				ni++;
			}
			sValue = sCk.substring( nStart, ni );

			if ( sValue == "" ) {
				return null;
			}
			else {
				return unescape( sValue );
			}
		}

		return( null );

	}


	/**
	 * expires: '' oder 0 für bis zum Schliessen des Browsers. Sonst Zeit in Stunden.
	 */
	function setCookieValue( key, value, expires ) {	// writes and returns die actuall cookie value

		var	Dummy;

		if ( expires == ''  ||  expires == 0 ) {
			document.cookie = key + "=" + escape( value ) + ";path=/";
		}
		else {
			var date		= new Date();
			date.setTime( date.getTime() + expires * 3600 );
			expiresGMT		= date.toGMTString();
			document.cookie = 'expires=' + expiresGMT + ';' + key + "=" + escape( value ) + ";path=/";
		}

		dummy			= getCookieValue( key );

		return dummy;

	}


	function dom_analyseUserAgent() {

		uaName				= navigator.appName;
		uaVersion			= parseFloat( navigator.appVersion );
		uaVersionInt		= Math.floor( uaVersion );

		uaIsIE				= uaName.indexOf( "Microsoft" ) != -1;
		uaIsNS				= uaName.indexOf( "Netscape" ) != -1;
		uaIsOp				= uaName.indexOf( "Opera" ) != -1;

		uaDOMIsIE			= false;
		uaDOMIsNS			= false;
		uaDOMIsW3C			= false;

		if ( uaIsIE  && uaVersionInt >= 4 )
			uaDOMIsIE			= true;
		else if ( uaIsNS  &&  uaVersionInt >= 4  &&  uaVersionInt < 6  )
			uaDOMIsNS			= true;
		else if ( document.getElementById )
			uaDOMIsW3C			= true;

		uaIsIE4AndAbove		= uaIsIE  &&  uaVersionInt >= 4;

		/** Laut FAQ:

			ie = (    (document.all)
			       && (window.offscreenBuffering) ) ? true : false;
			nn = (    (document.captureEvents)
			       && (!document.getElementById)  ) ? true : false;
			mz = (    (document.getElementById)
			       && (!document.all)
			       && (document.documentElement)  ) ? true : false;
			op = (    (document.getElementById)
			       && (navigator.userAgent.indexOf('Opera') != -1) ) ? true : false;
		*/

	}


	function dom_getObjectByID( id ) {

		if ( uaDOMIsIE ) {
			return document.all[id];
		}
		else if ( uaDOMIsW3C ) {
			return document.getElementById( id );
		}
		else if ( uaDOMIsNS ) {
			return document.Content;
		}

	}


	function dom_placeObject( obj, posX, posY ) {

		if ( uaDOMIsW3C  ||  uaDOMIsIE ) {
			obj.style.left			= posX;
			obj.style.top			= posY;
		}
		else if ( isNS4 ) {
			obj.moveTo( posX, posY );
		}

	}


	function dom_setVisibility( obj, visible ) {

		if ( uaDOMIsW3C  ||  uaDOMIsIE ) {
			obj.style.visibility	= visible ? "visible" : "hidden"
		}
		else if ( uaDOMIsNS ) {
			obj.visibility			= visible ? "visible" : "hidden";
		}

	}


	function dom_getElementsPosAbs( obj ) {

		if ( obj == null )
			return new Array( 0, 0 );

		var		x		= obj.offsetLeft;
		var		y		= obj.offsetTop;
		var		debug	= obj.tagName + ": " + obj.offsetLeft + ",";

		while ( obj.parentNode ) {
			debug		+= obj.parentNode.tagName + ": " + obj.parentNode.offsetLeft + "/" +  + obj.parentNode.offsetTop + ", ";
			x			+= obj.parentNode.offsetLeft;
			y			+= obj.parentNode.offsetTop;
			obj			= obj.parentNode;
		}

// OP: Summe: 247/78/DIV: 0,TD: 70/0, TR: 0/70, TABLE: 157/8, BODY: 20/0, HTML: 0/0,
// gemessen: ~98
// IE: Summe: 247/155/DIV: 0,TD: 70/70, TR: 0/70, TBODY: 0/0, TABLE: 177/15, BODY: 0/0, HTML: 0/0,
// gemessen: ~89

//		prompt( 'x', "Summe: " + x + "/" + y + "/" + debug );

		return new Array( x, y );

	}


	/**
	 * Fuegt der Liste der feedback-Images ein Bild hinzu.
	 * Für das Bild srcFB wird ein Image-Objekt angelegt und das Bild folglich
	 *  geladen. Fuer srcNoFB wird nur dann ein Image-Objekt angelegt, wenn
	 *  loadNoFB true gesetzt wird. Denn normalerweise ist dieses Bild bereits
	 *  in der Seite und muss folglich nicht geladen werden.
	 */
	function feedback_addEntry( name, srcNoFB, srcFB, loadNoFB ) {

		img			= new Image();
		img.src		= srcFB;

		data		= new Array();
		data[0]		= name;
		data[1]		= srcNoFB;
		data[2]		= srcFB;

		feedback_entries[feedback_entries.length]	= data;

	}


	/**
	 * Gibt den Eintrag aus feedback_entries zurueck, der den uebergebenen Namen
	 *  traegt oder null.
	 */
	function feedback_getEntry( name ) {

		for ( i = 0; i < feedback_entries.length; i++ ) {
			if ( feedback_entries[i][0] == name )
				return feedback_entries[i];
		}

		return null;

	}


	function feedback_switchImage( name, isFB ) {

		entry		= feedback_getEntry( name );

		if ( entry != null  &&  document.images[name] ) {
			if ( isFB )
				document.images[name].src	= entry[2];
			else
				document.images[name].src	= entry[1];
		}

	}


	//	Newsticker FORMULAR-VERSION
	//
	//	Nächster Schritt des Newstickers

	function ticker_textfield_nextStep() {

		textField = document.getElementById( 'newsticker_input' );
		if ( textField ) {
			if ( ti_txf_currentPos >= ti_txf_textLength ) {	// reset to Beginning
				ti_txf_currentPos = 0;
				return;
			}
			textField.value			=	ti_txf_text.substring( ti_txf_currentPos );
			ti_txf_currentPos		+=	ti_txf_charsPerStep;
		}

	}


	//	Newsticker FORMULAR-VERSION
	//
	//	Startet den Newsticker
	//
	//	Wir machen es uns einfach und hängen den Text oft aneinander - so sparen wir
	//	das Looping
	//
	// lengthIndention - Anzahl Leerzeichen vorne anzuhängen. Max 1000

	function ticker_textfield_start( text, time, charsPerStep, lengthIndention ) {

		//	Initialisieren

		var indention;
		var i;
		var textUse;

		lengthIndention				=	Math.max( Math.min( lengthIndention, 1000 ), 0 );

		indention					=	'';
		for ( i = 0; i < lengthIndention; i++ ) {
			indention					+= ' ';
		}

		textUse						=	'';
		for ( i = 0; i < 20; i++ ) {
			textUse						+=	'          ' + text;
		}

		text						=	indention + textUse;

		ti_txf_text 				=	text;
		ti_txf_textLength			=	text.length;
		ti_txf_currentPos			=	0;
		ti_txf_paddingLeft			=	0;
		ti_txf_charsPerStep			=	charsPerStep;

		window.setInterval( "ticker_textfield_nextStep()", time );

	}



	//	Newsticker dHTML-VERSION
	//
	//	Nächster Schritt des Newstickers

	function ticker_dHTML_nextStep( charsPerStep ) {

		ti_dHTML_posXCurrent		-=	ti_dHTML_stepX;

		ti_dHTML_elementInside.style.left	=	ti_dHTML_posXCurrent + 'px';

		//	komplett links raus -> rechts neu starten

		if ( ti_dHTML_posXCurrent < ti_dHTML_posXRestart ) {
			ti_dHTML_elementInside.style.left	=	ti_dHTML_posXStart + 'px';
			ti_dHTML_posXCurrent		=	ti_dHTML_posXStart;
		}

	}


	//	Newsticker dHTML-VERSION
	//	Startet den Newsticker

	function ticker_dHTML_start( idOutside, idInside, time, pxPerStep ) {

		if ( !document.getElementById ) {
			return;
		}

		//	Initialisieren

		ti_dHTML_elementOutside		=	document.getElementById( idOutside );
		ti_dHTML_elementInside		=	document.getElementById( idInside );

		if ( !ti_dHTML_elementOutside  ||  !ti_dHTML_elementInside ) {
			return;
		}

		if ( typeof( ti_dHTML_elementOutside.offsetWidth ) == 'undefined' ) {
			return;
		}

		ti_dHTML_posXStart			=	ti_dHTML_elementOutside.offsetWidth + 10;
		ti_dHTML_posXCurrent		=	ti_dHTML_posXStart;
		ti_dHTML_posXRestart		=	- ti_dHTML_elementInside.offsetWidth;
		ti_dHTML_stepX				=	pxPerStep;

		ti_dHTML_elementInside.style.left	=	ti_dHTML_posXStart + 'px';

		window.setInterval( "ticker_dHTML_nextStep()", time );
	}


	feedback_entries		= new Array();



