//	Escaped HTML-Zeichen
function textPlain2HTML( text ) {

	text		=	text.replace( /&/g, '&amp;' );
	text		=	text.replace( /</g, '&lt;' );
	text		=	text.replace( />/g, '&gt;' );
	text		=	text.replace( /\'/g, '&#039;' );
	text		=	text.replace( /\"/g, '&quot;' );

	return	text;

}

//	Liefert einen groben Richtwert für die zur Verfuegung stehende Breite oder
//	defaultValue wenn eine Gewinnung nicht moeglich ist. 
function getAvailableWidth( defaultValue ) {

	var	byWindow	=	0;
	var	byScreen	=	0;

	if ( typeof( window.innerWidth ) != 'undefined' ) {
		byWindow		=	window.innerWidth;
	}
	else if ( typeof( document.documentElement.clientWidth ) != 'undefined' ) {
		byWindow		=	document.documentElement.clientWidth;
	}

	byScreen		=	screen.availWidth - 50;

	if ( byWindow != 0  &&  byScreen != 0 ) {
		return	Math.min( byWindow, byScreen );
	}
	else if ( byWindow == 0  &&  byScreen == 0 ) {
		return	defaultValue;
	}
	else {
		return	Math.max( byWindow, byScreen );
	}
}


//	Liefert einen groben Richtwert für die zur Verfuegung stehende Höhe oder
//	defaultValue wenn eine Gewinnung nicht moeglich ist. 
function getAvailableHeight( defaultValue ) {

	var	byWindow	=	0;
	var	byScreen	=	0;

	if ( typeof( window.innerHeight ) != 'undefined' ) {
		byWindow		=	window.innerHeight;
	}
	else if ( typeof( document.documentElement.clientHeight ) != 'undefined' ) {
		byWindow		=	document.documentElement.clientHeight;
	}

	byScreen		=	screen.availHeight - 50;

	if ( byWindow != 0  &&  byScreen != 0 ) {
		return	Math.min( byWindow, byScreen );
	}
	else if ( byWindow == 0  &&  byScreen == 0 ) {
		return	defaultValue;
	}
	else {
		return	Math.max( byWindow, byScreen );
	}
}


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 * 1000 );			// millis
		expiresGMT		= date.toGMTString();
		document.cookie = key + "=" + escape( value ) + ";path=/;expires=" + expiresGMT;
	}

	dummy			= getCookieValue( key );

	return dummy;

}


// 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 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_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() {

	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();

