
function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}


// definiert Konstanten
var NS = typeof(document.layers) != 'undefined';
var IE = typeof(document.all) != 'undefined';
if(navigator.family == 'gecko') {
	NS=true;
	IE=false;
}
if(navigator.family == 'safari') {
	NS=true;
	IE=false;
}

if(IE) {
	SHOW = "visible";
	HIDE = "hidden";
}
if(NS) {
	SHOW = "show";
	HIDE = "hide";
}
if(navigator.family == 'gecko') {
	SHOW = "visible";
	HIDE = "hidden";
}
if(navigator.family == 'safari') {
	SHOW = "visible";
	HIDE = "hidden";
}

// zeigt Layer an
function fnDHTML_ShowLayer(id){
	var layer = fnDHTML_GetLayer(id);
	fnDHTML_ShowLayer_Fast(layer);
}
// zeigt als Objekt uebergebenes Layer an
function fnDHTML_ShowLayer_Fast(layer){
	if(layer){
		layer.style.visibility= SHOW;
	}
}

// blendet Layer aus
function fnDHTML_HideLayer(id){
	var layer = fnDHTML_GetLayer(id);
	fnDHTML_HideLayer_Fast(layer);
}
// blendet als Objekt uebergebenes Layer aus
function fnDHTML_HideLayer_Fast(layer){
	if(layer){
		layer.style.visibility= HIDE;
	}
}

// initialisiert mit Id angegebenes Layer 
function fnDHTML_GetLayer(id){
	switch(navigator.family) {
		case 'nn4':
			var layer = document[id];
		break;
		case 'ie4':
			if (typeof(document.all[id]) == "object") {
				var layer = document.all[id];
				}
			else
				var layer=void(0);
		break;
		case 'opera':
			if (typeof(document.all[id]) == "object") {
				var layer = document.all[id];
				}
			else
				var layer=void(0);
		break;
		case 'gecko':
			if (typeof(document.getElementById(id)) == "object" && document.getElementById(id) != null) 
				var layer = document.getElementById(id);
			else
				var layer=void(0);
		break;
		case 'safari':
			if (typeof(document.getElementById(id)) == "object" && document.getElementById(id) != null) 
				var layer = document.getElementById(id);
			else
				var layer=void(0);
		break;
	}
	
	if(typeof(layer)=="undefined"){
		return void(0);
	}
	return fnDHTML_GetLayer_Direct(layer)
}
// initialisiert als Objekt uebergebenes Layer
function fnDHTML_GetLayer_Direct(layer) {
	switch(navigator.family) {
		case 'nn4':
			layer.doc = layer.document;
			layer.style = layer;
		break;
		case 'ie4':
			layer.doc = layer.style;
		break;
		case 'gecko':
			layer.doc = layer;
		break;
		case 'safari':
			layer.doc = layer;
		break;
	}

	switch(navigator.family) {
		case 'nn4':
			layer.posInitialTop = Math.floor(layer.pageY);
			layer.posInitialLeft = Math.floor(layer.pageX);
		break;
		case 'ie4':
			layer.posInitialTop = fnDHTMLLayer_offsetTop(layer);
			layer.posInitialLeft = fnDHTMLLayer_offsetLeft(layer);
		break;
		case 'opera':
			layer.posInitialTop = fnDHTMLLayer_offsetTop(layer);
			layer.posInitialLeft = fnDHTMLLayer_offsetLeft(layer);
		break;
		case 'gecko':
			layer.posInitialTop = fnDHTMLLayer_offsetTop(layer);
			layer.posInitialLeft = fnDHTMLLayer_offsetLeft(layer);
		break;
		case 'safari':
			layer.posInitialTop = fnDHTMLLayer_offsetTop(layer);
			layer.posInitialLeft = fnDHTMLLayer_offsetLeft(layer);
		break;
	}

	layer.getWidth = fnDHTMLLayer_getWidth;
	layer.getHeight = fnDHTMLLayer_getHeight;
	layer.getAbsoluteLeft = fnDHTMLLayer_getAbsoluteLeft;
	layer.getAbsoluteTop = fnDHTMLLayer_getAbsoluteTop;
	if (navigator.family=='gecko' || navigator.family=='safari' || IE) {
		layer.moveTo = fnDHTMLLayer_moveTo;
		layer.moveBy = fnDHTMLLayer_moveBy;
	}		
	return layer;
}

// gibt Abstand zum oberen Browserrand zurueck
function fnDHTMLLayer_offsetTop(el) {
	y = el.offsetTop;
	for (e = el.offsetParent; e; e = e.offsetParent)
		y += e.offsetTop - e.scrollTop;
	return Math.floor(y);
} 
// gibt Abstand zum linken Browserrand zurueck
function fnDHTMLLayer_offsetLeft(el) {
	x = el.offsetLeft;
	for (e = el.offsetParent; e; e = e.offsetParent)
		x += e.offsetLeft;
	return Math.floor(x);
} 

// verschiebt Layer an abolute Position
function fnDHTMLLayer_moveTo(x, y) { // changed for ff
	this.style.top  = Math.floor(y) + "px";
	this.style.left  = Math.floor(x) + "px";
}

// verschiebt Layer relativ
function fnDHTMLLayer_moveBy(x, y) {
	this.style.top  = (parseInt(this.style.top) + Math.floor(y)) + "px"; 
	this.style.left  = (parseInt(this.style.left) + Math.floor(x)) + "px";   
}

// gibt Breite zurueck
function fnDHTMLLayer_getWidth() {
	var w = (navigator.family == "nn4") ? this.doc.width : this.offsetWidth;
	return Math.floor(w);
}
// gibt Hoehe zurueck
function fnDHTMLLayer_getHeight() {
	var h = (navigator.family == "nn4") ? this.doc.height : this.offsetHeight;
	return Math.floor(h);
}

// gibt Abstand von oben zurueck
function fnDHTMLLayer_getAbsoluteTop() {
	var top = (navigator.family == "nn4") ? this.doc.pageY : this.doc.posTop;
	return Math.floor(top);
}
// gibt Abstand von links zurueck
function fnDHTMLLayer_getAbsoluteLeft() {
	var left = (navigator.family == "nn4") ? this.doc.pageX : this.doc.posLeft;
	return Math.floor(left);
}

// ========================

// setzt Abmessungen relativ zur Browserabmessungen
function fnDHTML_GetViewPort() {
	if(typeof(window.innerHeight) != 'undefined') {
		var height = window.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		var height = document.documentElement.clientHeight;
	}
	else if (document.body) { // other Explorers (quirks)
		// war document.body.offsetHeight
		var height = document.body.clientHeight;
	}
	if(typeof(window.innerWidth) != 'undefined') {
		var width = window.innerWidth;
	}
	else if (document.documentElement && document.documentElement.clientWidth) { // Explorer 6 Strict Mode
		var width = document.documentElement.clientWidth;
	}
	else if (document.body) { // other Explorers (quirks)
		// war document.body.offsetWidth
		var width = document.body.clientWidth;
	}
	return {
		"width": width,
		"height": height
	};
}

function fnWindowWidth() {
	if(typeof(window.innerWidth) != 'undefined') {
		return window.innerWidth;
	}
	else if (document.documentElement && document.documentElement.clientWidth) { // Explorer 6 Strict Mode
		return document.documentElement.clientWidth;
	}
	else if (document.body) { // other Explorers (quirks)
		return document.body.clientWidth;
	}
	else {
		return 0;
	}
} 			
function fnWindowHeight() {
	if(typeof(window.innerHeight) != 'undefined') {
		return window.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		return document.documentElement.clientHeight;
	}
	else if (document.body) { // other Explorers (quirks)
		return document.body.clientHeight;
	} else {
		return 0;
	}
}

// setzt Abmessungen relativ zur Browsergroesse
function fnLayerSetHeight(pmLayer, pmMarginY) {
	main = fnDHTML_GetLayer(pmLayer);
	if(!main)
		return;
	if(typeof(window.innerHeight) != 'undefined') {
		main.style.height = (window.innerHeight - pmMarginY - parseInt(main.style.paddingTop || 0) - parseInt(main.style.paddingBottom || 0)) + "px";
	}
	else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		main.style.height = (document.documentElement.clientHeight - pmMarginY - parseInt(main.style.paddingTop || 0) - parseInt(main.style.paddingBottom || 0)) + "px";
	}
	else if (document.body) { // other Explorers (quirks)
		// war document.body.offsetHeight
		main.style.height = (document.body.clientHeight - pmMarginY - 4) + "px";
	}
	//console.log("fnLayerSetHeight('" + pmLayer + "', " + pmMarginY + ") = " + main.style.height);
}

function fnLayerSetWidth(pmLayer, pmMarginX) {
	main = fnDHTML_GetLayer(pmLayer);
	if(!main)
		return;
	if(typeof(window.innerWidth) != 'undefined') {
		main.style.width = (window.innerWidth - pmMarginX - parseInt(main.style.paddingLeft || 0) - parseInt(main.style.paddingRight || 0)) + "px";
	}
	else if (document.documentElement && document.documentElement.clientWidth) { // Explorer 6 Strict Mode
		//console.log(document.documentElement.clientWidth + "x" + main.style.paddingLeft + "x" + main.style.paddingRight);
		main.style.width = (document.documentElement.clientWidth - pmMarginX - parseInt(main.style.paddingLeft || 0) - parseInt(main.style.paddingRight || 0)) + "px";
	}
	else if (document.body) { // other Explorers (quirks)
		// war document.body.offsetWidth
		main.style.width = (document.body.clientWidth - pmMarginX - 4) + "px";
	}
	//console.log("fnLayerSetWidth('" + pmLayer + "', " + pmMarginX + ") = " + main.style.width);
}


