/* DHTML-Bibliothek */

var DHTML = 0, DOM = 0, MS = 0, NS = 0, OP = 0;

function DHTML_init() {

 if (window.opera) {
     OP = 1;
 }
 if(document.getElementById) {
   DHTML = 1;
   DOM = 1;
 }
 if(document.all && !OP) {
   DHTML = 1;
   MS = 1;
 }
if (window.netscape && window.screen && !DOM && !OP) {
   DHTML = 1;
   NS = 1;
 }
}

function getElem(p1,p2,p3) {
 var Elem;
 if(DOM) {
   if(p1.toLowerCase()=="id") {
     if (typeof document.getElementById(p2) == "object")
     Elem = document.getElementById(p2);
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="name") {
     if (typeof document.getElementsByName(p2) == "object")
     Elem = document.getElementsByName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="tagname") {
     if (typeof document.getElementsByTagName(p2) == "object" || (OP && typeof document.getElementsByTagName(p2) == "function"))
     Elem = document.getElementsByTagName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(MS) {
   if(p1.toLowerCase()=="id") {
     if (typeof document.all[p2] == "object")
     Elem = document.all[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="tagname") {
     if (typeof document.all.tags(p2) == "object")
     Elem = document.all.tags(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="name") {
     if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(NS) {
   if(p1.toLowerCase()=="id" || p1.toLowerCase()=="name") {
   if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="index") {
    if (typeof document.layers[p2] == "object")
     Elem = document.layers[p2];
    else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
}

function getCont(p1,p2,p3) {
   var Cont;
   if(DOM && getElem(p1,p2,p3) && getElem(p1,p2,p3).firstChild) {
     if(getElem(p1,p2,p3).firstChild.nodeType == 3)
       Cont = getElem(p1,p2,p3).firstChild.nodeValue;
     else
       Cont = "";
     return(Cont);
   }
   else if(MS && getElem(p1,p2,p3)) {
     Cont = getElem(p1,p2,p3).innerText;
     return(Cont);
   }
   else return void(0);
}

function getAttr(p1,p2,p3,p4) {
	var Attr;
	if((DOM || MS) && getElem(p1,p2,p3)) {
		Attr = getElem(p1,p2,p3).getAttribute(p4);
		return(Attr);
	}
	else if (NS && getElem(p1,p2)) {
		if (typeof getElem(p1,p2)[p3] == "object")
			Attr=getElem(p1,p2)[p3][p4]
		else
			Attr=getElem(p1,p2)[p4]
		return Attr;
	}
	else return void(0);
}

function setCont(p1,p2,p3,p4) {
	var elem = getElem(p1,p2,p3);
	if (elem) {
		if(DOM && elem.firstChild) {
			elem.firstChild.nodeValue = p4;
		}
		else if(MS) {
			elem.innerText = p4;
		}
		else if(NS) {
			elem.document.open();
			elem.document.write(p4);
			elem.document.close();
		}
	}
}

function setContByElem(elem, value) {
	if (elem) {
		if(DOM && elem.firstChild) {
			elem.firstChild.nodeValue = value;
		}
		else if(MS) {
			elem.innerText = value;
		}
		else if(NS) {
			elem.document.open();
			elem.document.write(value);
			elem.document.close();
		}
	}
}

function TextRezult (textB, textA, textS, pos) {
	this.textBefore=textB;
	this.textAfter=textA;
	this.textSearch=textS;
	this.textPos = pos; 
}
	
function TextAttribute( textA, textV ) {
	this.textName = textA;
	this.textValue = textV; 
}
	
function splitText(p4,searchStr) {
	var rez = new TextRezult;
	rez.textPos=p4.indexOf(searchStr);
	if ( rez.textPos == -1 ) {
		rez.textBefore = "";
		rez.textAfter = p4;
	}
	else {
		rez.textBefore = p4.substr(0,rez.textPos);
		rez.textAfter = p4.substr(rez.textPos+searchStr.length,p4.length-(rez.textPos+searchStr.length));
	}
	rez.textSearch = searchStr;
	//alert("splitText:= "+rez.textPos+" , '"+rez.textBefore+"' , '"+rez.textSearch+"' , '"+rez.textAfter+"'");
	return rez; 
};

function makeAttribute( text ) {
	var rez = new TextAttribute("","");
	var splitrez = new TextRezult("","","",-1);
   	splitrez = splitText(text,"=");
	if ( splitrez.textPos!=-1 ) {
	   	rez.textName = splitrez.textBefore;
		rez.textValue = splitrez.textAfter.substr(1,splitrez.textAfter.length-2);
	}
	else {
		rez.textName = splitrez.textAfter;
		rez.textValue = "tag";
	}
	return rez; 
}

////////////////////////////////////////////////////////////////////
// function createDOMfromHTML(p4) ver. 1.0
// Copyright (c) 2002 by Andre Mueller.
// This JavaScript-function is open source. You can redistribute it and/or modify
// it under the terms of the Universal General Public License (UGPL). 
// http://home.t-online.de/home/aam_int/de/impressum/ugpl.html

function createDOMfromHTML(p4) {
	var rez = document.createElement("span");
	var i=0, tagflag=0;
	var myElements = new Array ();
	var myValues = new Array ();
	var myAttributes = new Array ();
	var myTextRezult = new TextRezult("","","",-1);
	var myAttribRezult = new TextRezult("","","",-1);
	var myAttribute = new TextAttribute("","");
	var Attr = new TextAttribute("","");
	myTextRezult.textAfter = p4;
	while(1==1) {
		if ( tagflag==0 ) {
			// ### suche den ersten HTML-Tag
			myTextRezult = splitText(myTextRezult.textAfter,"<");
			//alert("Tag / Rezult== "+tagflag+","+myTextRezult.textPos+" , '"+myTextRezult.textBefore+"' , '"+myTextRezult.textSearch+"' , '"+myTextRezult.textAfter+"'");
			if ( myTextRezult.textPos ==-1 ) {
				//alert("span-Element created := "+"span");
				myElements.push(document.createElement("span"));
				//alert("TextNode created:='"+myTextRezult.textAfter+"'");
				myValues.push(document.createTextNode(myTextRezult.textAfter));
				break; 
			}
			else {
				tagflag=1;
				//alert("span-Element created := "+"span");
				myElements.push(document.createElement("span"));
				//alert("TextNode created:='"+myTextRezult.textBefore+"'");
				myValues.push(document.createTextNode(myTextRezult.textBefore)); 
			}
		}
		else {
			// ### jetzt das Tag-Ende suchen
			myTextRezult = splitText(myTextRezult.textAfter,">");
			//alert("Tag / Rezult== "+tagflag+","+myTextRezult.textPos+" , '"+myTextRezult.textBefore+"' , '"+myTextRezult.textSearch+"' , '"+myTextRezult.textAfter+"'");
			if ( myTextRezult.textPos==-1 ) {
				//alert("span-Element created := "+"span");
				myElements.push(document.createElement("span"));
				myValues.push(document.createTextNode("Fehler : Tagname nicht zu ende!"));
				break; 
			}
			else {
				// erst mal das Array mit den attributen löschen
				while(myAttributes.length > 0) myAttributes.pop();
				// jetzt müssen noch die Attribute aus dem gesamten Tag extrahiert werden !
				myAttribRezult.textAfter = myTextRezult.textBefore;
				myAttribRezult = splitText(myAttribRezult.textAfter," ");
				while (1==1) {
					if ( myAttribRezult.textPos!=-1 ) {
						myAttributes.push(makeAttribute(myAttribRezult.textBefore));
						myAttribRezult = splitText(myAttribRezult.textAfter," ");
					}
					else {
						myAttributes.push(makeAttribute(myAttribRezult.textAfter));
						break;
					}  
				}
				tagflag=0;
				// setzt voraus, dass der Tag an Anfang steht und die Attribute erst danach kommen
				//alert("Element created:='"+myAttributes[0].textName+"'");
				myElements.push(document.createElement(myAttributes[0].textName));
				for(i=1; i<myAttributes.length; i++) {
					//alert("Attribut created:='"+myAttributes[i].textName+"'");
	 				myElements[myElements.length-1].setAttribute(myAttributes[i].textName, myAttributes[i].textValue);
				}
				myTextRezult = splitText(myTextRezult.textAfter,"</"+myAttributes[0].textName+">",null);
				//alert("Tag / Rezult== "+tagflag+","+myTextRezult.textPos+" , '"+myTextRezult.textBefore+"' , '"+myTextRezult.textSearch+"' , '"+myTextRezult.textAfter+"'");
				if ( myTextRezult.textPos==-1 ) {
					myValues.push(document.createTextNode("Fehler : Tag nicht geschlossen!"));
					break; 
				}
				else {
					// ### alt, ohne rekursion ###
					//alert("TextNode created:='"+myTextRezult.textBefore+"'");
					// myValues.push(document.createTextNode(myTextRezult.textBefore));
					// ### NEU, mit rekursion ###
					myValues.push(createDOMfromHTML(myTextRezult.textBefore));
				}
			}
		}
	}
	// fill in the DOM-tree
	for( i=0; i<myElements.length; i++ ) {
		myElements[i].appendChild(myValues[i]);
		rez.appendChild(myElements[i]);
	}
	return rez;
}

// End of UGPL-Object
////////////////////////////////////////////////////////////////////////

function setHtml(p1,p2,p3,p4) {
	if(DOM && getElem(p1,p2,p3) && getElem(p1,p2,p3).firstChild) {
		//alert("DOM-action");
		while( getElem(p1,p2,p3).hasChildNodes()==true ) {
			var myNode = getElem(p1,p2,p3).firstChild
			getElem(p1,p2,p3).removeChild(myNode);
		};
		// ### write new content from the tree
		getElem(p1,p2,p3).appendChild(createDOMfromHTML(p4));
		// !!! alt !!! getElem(p1,p2,p3).firstChild.nodeValue = p4;
	}
	else if(MS && getElem(p1,p2,p3)) {
		//alert("MS-Document.all-Action");
		getElem(p1,p2,p3).innerHTML = p4;
	}
	else if(NS && getElem(p1,p2,p3)) {
		//alert("NS-Layer-Action");
		getElem(p1,p2,p3).document.open();
		getElem(p1,p2,p3).document.write(p4);
		getElem(p1,p2,p3).document.close();
	}
}

function getElemById(name) {
	return getElem("id", name, null);
}


DHTML_init();