// --------------------
// Funktion zur Anzeige der BrowserInfos
//
// function whoAmI
//
// Die BrowserInfos (und das Betriebsystem) werden in das Dokument geschrieben
//

function whoAmI(){
	var browserInfo = "<ul>";
	for(var i in cD){
		browserInfo += "<li>client." + i + " = " + cD[i] + "</li>";
	}
	browserInfo += "</ul>";
	document.write(browserInfo);
}


// --------------------
// Funktion zur Anzeige einer Objektstruktur in einem alert
// nuetzlich zum debuggen :-)
//
// function showObjTree
// param obj : Objekt, dessen Struktur angezeigt werden soll
// param objName : Name des Objekts (beliebiger String - nicht unbedingt notwendig)
//

function showObjTree(obj, objName){
	var count = 0;
	var result = ""
	for(var i in obj){
		result += objName + "." + i + " = " + obj[i] + "\n";
		count++;
	}
	alert( result );
	return result
}


// --------------------
// Funktion zur Anzeige einer Objektstruktur im document
//
// function showObjTree
// param obj : Objekt, dessen Struktur angezeigt werden soll
// param objName : Name des Objekts (beliebiger String)
//

function showObjTreeInDoc(obj, objName){
	var count = 0;
	var result = ""
	for(var i in obj){
		result += objName + "." + i + " = " + obj[i] + "<br>";
		count++;
	}
	document.write(result);
}


// --------------------
// Funktion zur Erkennung des Browsers
// die informationen sind im objekt cD verfuegbar
//
// function clientDetection
//

function clientDetection(){
	var agt = navigator.userAgent.toLowerCase();
	
	this.platform = navigator.platform.toLowerCase();
	this.name = agt;
	
	this.major = parseInt(navigator.appVersion);
	this.minor = parseFloat(navigator.appVersion);
	
	this.nav  = ((agt.indexOf('mozilla')!=-1) && ((agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1)));
	this.nav2 = (this.nav && (this.major == 2));
	this.nav3 = (this.nav && (this.major == 3));
	this.nav4 = (this.nav && (this.major == 4));
	this.nav6 = (this.nav && (this.major == 5));
	
	this.ie   = (agt.indexOf("msie") != -1);
	this.ie3  = (this.ie && (this.major == 2));
	this.ie4  = (this.ie && (this.major == 4));
	
	this.opera = (agt.indexOf("opera") != -1);
	
	this.nav6up = this.nav && (this.major >= 5);
	this.ie4up  = this.ie  && (this.major >= 4);
}

var cD = new clientDetection();


// --------------------
// Funktion zum Finden eines Objekts/Layers
//
// function getElt
// param id : Id des gesuchten Objekts
// param doc : document-Objekt, in dem (bei Netscape 4.x) begonnen werden soll, nach dem objekt/layer zu suchen
//
// return : das Objekt mit der Id id
//

function getElt(id, doc){
	if(cD.nav4){
		var currentLayer;
		var currentDoc;
		if(!doc){
			currentDoc = document;
		}
		else{
			currentDoc = doc;
		}
		currentLayer = currentDoc.layers[id];
		for(var i=0;!currentLayer && i < currentDoc.layers.length;i++){
			currentLayer = getElt(id, currentDoc.layers[i].document);
		}
		return currentLayer;
	}
	else if(cD.ie4up) {
		var elt = eval('document.all.' + id);
		return(elt);
	}
	else if(cD.nav6up || cD.opera){
		var elt = document.getElementById(id);
		return(elt);
	}
}



// --------------------
// Funktion zur Festlegung der Sichtbarkeit eines Objekts/Layers
//
// function setEltVisibility
// param elt : Objekt, dessen Sichtbarkeit geändert wird
// param value : Sichtbarkeit des Objekts -> 'visible','hidden'
//

function setEltVisibility(elt, value){
	if(cD.nav4) elt.visibility = value;
	else if(cD.ie4up || cD.nav6up || cD.opera) elt.style.visibility = value;
}

// --------------------
// Funktion zur Abfrage der Sichtbarkeit eines Objekts/Layers
//
// function getEltVisibility
// param elt : Objekt, dessen Zustand abgefragt wird
//
// return : Zustand der Sichtbarkeit des Objekts/Layers -> 'visible','hidden'
//

function getEltVisibility(elt){
	if(cD.nav4){
		var value = elt.visibility;
		if(value == "show") return "visible";
		else if(value == "hide") return "hidden";
		else return value;
	}
	else if(cD.ie4up || cD.nav6up || cD.opera) return elt.style.visibility;
}

// --------------------
// Funktion zur Abfrage der ABSOLUTEN vertikalen Position eines Objekts/Layers
// bei getEltTop gab es Probleme im IE
//
// function getEltPosTop
// param elt : Objekt, dessen vertikale Position abgefragt wird
//
// return : vertikale ABSOLUTE Position des Objekts/Layers ab Dokumentoberkante
//
 
function getEltPosTop(elt){
    if(cD.nav4) 
    {
        return (elt.pageY);
    }
    else 
    {
        return (elt.offsetParent) ? elt.offsetTop+getEltPosTop(elt.offsetParent) : elt.offsetTop;
    }
}
 
// --------------------
// Funktion zur Abfrage der ABSOLUTEN horizontalen Position eines Objekts/Layers//
// bei getEltLeft gab es Probleme im IE
// function getEltPosLeft
// param elt : Objekt, dessen vertikale Position abgefragt wird
//
// return : horizontale ABSOLUTE Position des Objekts/Layers ab Dokumentoberkante
//
 
function getEltPosLeft(elt){
    if(cD.nav4)
    {
        return (elt.pageX);
    }
    else 
    {
        return (elt.offsetParent) ? elt.offsetLeft+getEltPosLeft(elt.offsetParent) : elt.offsetLeft;
    }
}

// --------------------
// Funktion zur Festlegung der vertikalen Position eines Objekts/Layers
//
// function setEltTop
// param elt : Objekt, dessen vertikale Position festgelegt wird
// param y : vertikale Position des Objekts/Layers ab Dokumentoberkante
//

function setEltTop(elt, y){
	if(cD.nav4) elt.top=y;
	else if(cD.ie4up) elt.style.pixelTop=y;
	else if(cD.nav6up) elt.style.top=y+"px";
	else if(cD.opera) elt.style.top=y;
}

// --------------------
// Funktion zur Abfrage der vertikalen Position eines Objekts/Layers
//
// function getEltTop
// param elt : Objekt, dessen vertikale Position abgefragt wird
//
// return : vertikale Position des Objekts/Layers ab Dokumentoberkante
//

function getEltTop(elt){
	if(cD.nav4) return (elt.top);
	else if(cD.ie4up) return (elt.style.pixelTop);
	else if(cD.nav6up || cD.opera) return (parseInt(elt.style.top));
}


// --------------------
// Funktion zur Festlegung der horizontalen Position eines Objekts/Layers
//
// function setEltLeft
// param elt : Objekt, dessen horizontale Position festgelegt wird
// param x : horizontale Position des Objekts/Layers ab Dokumentoberkante
//

function setEltLeft(elt, x){
	if(cD.nav4) elt.left=x;
	else if(cD.ie4up) elt.style.pixelLeft=x;
	else if(cD.nav6up) elt.style.left=x + "px";
	else if(cD.opera) elt.style.left=x;
}


// --------------------
// Funktion zur Abfrage der horizontalen Position eines Objekts/Layers
//
// function getEltLeft
// param elt : Objekt, dessen vertikale Position abgefragt wird
//
// return : horizontale Position des Objekts/Layers ab Dokumentoberkante
//

function getEltLeft(elt){
	if(cD.nav4) return (elt.left);
	else if(cD.ie4up) return (elt.style.pixelLeft);
	else if(cD.nav6up || cD.opera) return (parseInt(elt.style.left));
}


// --------------------
// Funktion zur Festlegung der absoluten Position eines Objekts/Layers
//
// function moveEltTo
// param elt : Objekt, dessen absolute Position festgelegt wird
// param x : horizontale Position des Objekts/Layers ab Dokumentoberkante
// param y : vertikale Position des Objekts/Layers ab Dokumentoberkante
//

function moveEltTo(elt, x, y){
	if(cD.nav4) elt.moveTo(x, y);
	else if(cD.ie4up){
		elt.style.pixelLeft = x;
		elt.style.pixelTop = y;
	}
	else if(cD.nav6up){
		elt.style.left = x + "px";
		elt.style.top = y + "px";
	}
	else if(cD.opera){
		elt.style.left = x;
		elt.style.top = y;
	}
}


// --------------------
// Funktion zur Festlegung der relativen Position eines Objekts/Layers
//
// function moveEltBy
// param elt : Objekt, dessen relative Position festgelegt wird
// param x : horizontale Bewegung des Objekts/Layers
// param y : vertikale Bewegung des Objekts/Layers
//

function moveEltBy(elt, x, y){
	if(cD.nav4) elt.moveBy(x, y);
	else if(cD.ie4up || cD.opera){
		elt.style.pixelLeft += x;
		elt.style.pixelTop  += y;
	}
	else if(cD.nav6up){
		moveEltTo(elt, parseInt(elt.style.left) + x, parseInt(elt.style.top) + y);
	}
}


// --------------------
// Funktion zur Abfrage der Breite eines Objekts/Layers
//
// function getEltWidth
// param elt : Objekt, dessen Breite abgefragt wird
//
// return : Breite des Objekts/Layers in Pixel
//

function getEltWidth(elt){
	if(cD.nav4) return(elt.width);
	else if(cD.ie4up || cD.opera) return(elt.style.pixelWidth);
	else if(cD.nav6up) return(elt.style.width);
}


// --------------------
// Funktion zur Abfrage der Höhe eines Objekts/Layers
//
// function getEltHeight
// param elt : Objekt, dessen Höhe abgefragt wird
//
// return : Höhe des Objekts/Layers in Pixel
//

function getEltHeight(elt){
	if(cD.nav4) return (elt.height);
	else if(cD.ie4up || cD.opera) return (elt.style.pixelHeight);
	else if(cD.nav6up) return (elt.style.height);
}


// --------------------
// Funktion zur Abfrage der Breite des Inhalts des Browserfensters
//
// function getClientWidth
//
// return : Breite des Browserfensters in Pixel
//

function getClientWidth(){
	if(cD.nav4) return(window.innerWidth);
	else if(cD.ie4up) return(document.body.clientWidth);
	else if(cD.nav6up || cD.opera) return(window.innerWidth);
}


// --------------------
// Funktion zur Abfrage der Höhe des Browserfensters
//
// function getClientHeight
//
// return : Breite des Browserfensters in Pixel
//

function getClientHeight(){
	if(cD.nav4) return(window.innerHeight);
	else if(cD.ie4up) return(document.body.clientHeight);
	else if(cD.nav6up || cD.opera) return(window.innerHeight);
}


// --------------------
// Funktion zum erzeugen eines Layers 
//
// function createLayer
// param name : id des Layers
// param html : der Inhalt des Layers
// param css  : die css-Klasse des Layers
//

function createLayer(name, html, css){
    with(document){
        write("<div id='"+name+"' class='"+css+"'>"+html+"</div>");
    }
} 

// --------------------
// Funktion zum neufuellen eines Layers 
//
// function writeIntoLayer
// param elt : Objekt, dessen Inhalt neu gefuellt wird
// param text : HTML-Text, der in den Layer geschrieben werden soll
//
// Netscape4 und Netscape6 sind darauf angewiesen, dass der Layer in den geschrieben wird
// absolut positioniert ist. Soll er dennoch an einer bestimmten Stelle des Dokumentes
// angezeigt werden, muss er in einen zweiten Layer eingebettet werden, der wiederum relativ
// positioniert ist. Fein!
// Beispiel:
// <style type="text/css">
// #hilf_mir {position:relative}
// #beschreib_mich {position:absolute}
// </style>
// <table><tr><td>
//     <div id="hilf_mir"><div id="beschreib_mich"></div></div>
// </td></tr></table>
//
// Opera 6.0 Pre interpretiert diese Funktion nicht! Der Opera-Spec ist nichts zu entnehmen, was Aufschluss
// darüber gibt ob das in Zukunft anders werden wird.

function writeIntoLayer(elt, text)
{
if(elt)
{
if(cD.nav4)
{
with(elt.document)
{
open();
write(text);
close();
}
}
if(cD.ie4up || cD.nav6up)
{
elt.innerHTML = text;
}
if (cD.opera){
return false;
}
}
}

// --------------------
// Funktion zur Festlegung des z-index eines Objekts/Layers
//
// function setEltZIndex
// param elt : Objekt, dessen z-index festgelegt wird
// param z : z-index
//

function setEltZIndex(elt, z){
	if(cD.nav4) elt.zIndex = z;
	else if(cD.ie4up) elt.style.zIndex = z;
	else if(cD.opera) elt.style.zIndex = z;
	else if(cD.nav6up) elt.style.zIndex = z;
}


// --------------------
// Funktion zur Abfrage des z-index eines Objekts/Layers
//
// function getEltZIndex
// param elt : Objekt, dessen z-index abgefragt wird
//
// return : der z-index des Objekts/Layers
//

function getEltZIndex(elt){
	if(cD.nav4) return(elt.zIndex);
	else if(cD.ie4up) return (elt.style.zIndex);
	else if(cD.nav6up) return (elt.style.zIndex);
	else if(cD.opera) return (elt.style.zIndex);
}


//Die folgenden Funktionen sind noch nicht Opera-Kompatibel

// --------------------
// Funktion zum Erzeugen eines EventListeners
//
// function addEltEventListener
// param elt : Element, das mit dem Handler belegt wird
// param event : Das Event (MOUSEUP | MOUSEDOWN | MOUSEMOVE)
// param func : Die Funktion, die aufgerufen werden soll
//

function addEltEventListener(myElt, myEvent, myFunc){
	if(cD.nav4 || cD.ie4up){
		var isThis = "";
		if(cD.nav4){
			isThis = "this.";
		}
		eval("myElt.on" + myEvent.toLowerCase() + "=" + isThis + myFunc);
	}
	else if(cD.nav6up){
		eval("myElt.addEventListener('" + myEvent.toLowerCase() + "', " + myFunc + ", false)");
	}
}


// --------------------
// Funktion zum Erzeugen eines EventListeners
//
// function addEltEventListener2
// param elt : Element, das mit dem Handler belegt wird
// param event : Das Event (MOUSEUP | MOUSEDOWN | MOUSEMOVE)
// param func : Die Funktion, die aufgerufen werden soll
//

function addEltEventListener2(myElt, myEvent, myFunc){
	if(cD.nav4 || cD.ie4up){
		if(cD.nav4){
			eval("myElt.captureEvents(Event." + myEvent + ")");
		}
		eval("myElt.on" + myEvent.toLowerCase() + "=" + myFunc);
	}
	else if(cD.nav6up){
		eval("myElt.addEventListener('" + myEvent.toLowerCase() + "', " + myFunc + ", false)");
	}
}

// --------------------
// Funktion zum Erzeugen eines EventListeners für das Fenster
//
// function addWinEventListener
// param event : Das Event (MOUSEUP | MOUSEDOWN | MOUSEMOVE)
// param func : Die Funktion, die aufgerufen werden soll
//

function addWinEventListener(myEvent, myFunc){
	if(cD.nav4 || cD.ie4up){
		if(cD.nav4){
			eval("captureEvents(Event." + myEvent + ")");
			eval("on" + myEvent.toLowerCase() + "=" + myFunc);
		}
		else{
			eval("document.on" + myEvent.toLowerCase() + "=" + myFunc);
		}
	}
	else if(cD.nav6up){
		eval("addEventListener('" + myEvent.toLowerCase() + "', " + myFunc + ", false)");
	}
}


// Funktion zum neuladen des Fensters, wenn die fenstergroesse geaendert wird
// dies ist sinnvoll, wenn die groesse des fensters bei netscape veraendert wird, weil dann js-code und css zerschossen wird
//
// function reloadOnResize
//

function reloadOnResize() {
	addWinEventListener('RESIZE', 'reloadLocation');
}

// --------------------
// Öffnet ein Popup-Fenster
//
// function openPopup
// param path : Pfad zur angezeigten Datei
// param popName : Name des Fensters
// param width : Breite des Fensters
// Param height : Höhe des Fensters
//
// return false bei erfolg um andernfalls den href des Links in neuem
//        normalem Browserfenster zu öffnen
//
function openPopup(path,popName,width,height,left,top,scrolling,resize)
{
    if (scrolling == "")
    {
        scrolling = "no";
    }
    if (top == "")
    {
        top = 10;
    }
    if (left == "")
    {
        left = 10;
    }
    if (resize == "")
    {
        resize = "yes";
    }
    resizable = ",resizeable=" + resize + "";
    settings = 'height=' + height + ', width=' + width + ', top=' + top + ',left=' + left + ',scrollbars=' + scrolling + ',resizable=' + resize;
    var newWin = window.open(path, popName, settings); 
    newWin.focus();
    return false;
}
function setCmdAndSubmit(formname, cmd, msg)
{
    if (msg != false)
    {
        if (confirm(msg))
        {
            formular = eval("document." + formname);
            formular.cmd.value = cmd;
            formular.submit();
        }
        else
        {
            return false;
        }
    }    
    else
    {
        formular = eval("document." + formname);
        formular.cmd.value = cmd;
        formular.submit();
    }
}

function openTopEvent()
{
    openPopup('/popups/opeltest.html','opeltestet',320,200,20,20,'no','no');
}
