/*****************************************************************
	(C) IBM Deutschland Informationssysteme GmbH, 1999
	Creator: Christoph Michel (chmichel@de.ibm.com)
	Created: 07.12.1999
*****************************************************************/

//  if (this.location.hostname.indexOf('ukv.de') != 0) this.location.hostname = 'ukv.de';

/*****************************************************************
    Setzen globaler Konstanten
*****************************************************************/
// var SERVER_NAME = "10.26.151.69";
// var SERVER_NAME = "test.urv.de:8080";
var SERVER_NAME = location.host;
var NAVIGATION_ROOT = location.protocol + "//"+SERVER_NAME+"/urvcommon/navigation";
//var NAV_SERVLET_URL = location.protocol + "//"+SERVER_NAME+"/servlet/XMLNavigator?";
var NAV_SERVLET_URL = location.protocol + "//"+SERVER_NAME+"/urvcommon/navigation/htmljsp_fuer-urv.html?"; //cwr, forWinSome
//var NAV_SERVLET_URL = location.protocol + "//"+SERVER_NAME+"/urvcommon/navigation/htmljsp.html?"; //cwr, forWinSome
var DEFAULT_AID = "45";
//var DEFAULT_AID = "0000000";
var DEFAULT_MIDX = "VERSICHERUNGEN.KRANKEN";
var MENU_NOCHANGE = "NOCHANGE";
var OEV_CSS = "//red4.oev.de/servlet/ContentServer?pagename=Util/StyleSheetServer&cssID=";
// var OEV_CSS = "http://red4.oev.de/servlet/ContentServer?zeigestyle=1&pagename=Util/StyleSheet&cssID="; // alt
//var DEFAULT_CSS = "http://red4.oev.de/servlet/ContentServer?pagename=Util/StyleSheetServer&cssID=1067607911073";
var DEFAULT_CSS = "/urvcommon/styles/stylesCMS.css";

var DEBUG = false;
var DBGOUT = true;
var DBGFKT = false;
var PROD = false;
var MENU_TIMEOUT = 5000;
var MENU2_FRAME = 1;
var MENU3_FRAME = 2;

var reiterbg = "#0088FF"; // Normale Farbe
var reiterbgdark = "#0434B0"; //Highlight
var balkencolor = "#FFFFFF";
var balkencoloraktiv = "#DAE0EF"; //reiterbg;
var pulldowncolor = reiterbgdark;
/*****************************************************************
    Deklariation globaler Variablen
*****************************************************************/
var menuPos;

var DHTML = 0, DOM = 0, MS = 0, NS = 0, OP = 0, IE = 0, IE4 = 0, IE5 = 0, IE6 = 0, NS6 = 0, NS4 = 0;

if (window.opera) {
	OP = 1;
}
if(document.all && !OP) {
	DHTML = 1;
	MS = 1;
	IE = true;
	if(typeof document.getElementById!="undefined") {
		IE5 = 1;
		var agt=navigator.userAgent.toLowerCase();
		if(agt.indexOf("msie 6") != -1)
			IE6 = 1;
	} else
		IE4 = 1;
}
if(document.getElementById && !MS) {
	DHTML = 1;
	DOM = 1;
	NS6 = true;
}
if(window.netscape && window.screen && !DOM && !OP) {
	DHTML = 1;
	NS = 1;
}
if (document.layers && !MS) {
	NS4= true;
}

/*
	Init Mouse Ivents for NS and OP
*/
 if(NS6) {
  document.captureEvents(Event.MOUSEMOVE | Event.CLICK);
//  document.onmousemove=handleMove;
//  document.onclick=handleClick;
//  window.onscroll=handleScroll;
 }

window.onscroll=handleScroll;
document.onclick=handleClick;
document.onmousemove=handleMove;

function handleMove(ev) {
// dbg("handleMove("+ev+") " + window.name);
 if(!MS) {
// 	dbgd("ev", ev, 1);
	self.clientX = ev.pageX; //clientX geht zumindest in Mozilla auch
	self.clientY = ev.pageY;
// 	Event = ev;
// 	parent.clientY = Event.pageY;
//	parent.clientX = Event.pageX;
 } else {
// 	dbgd("event", event, 1);
	self.clientX = event.clientX; // event ist Systemvariable (von window)
	self.clientY = event.clientY;
//	parent.clientX = event.clientX;
//	parent.clientY = event.clientY;
 }
//dbgd("window.clientX", window.clientX);
//dbgd("window.clientY", window.clientY);
}

function handleClick(ev) {
	dbg("handleClick("+ev+") " + window.name);
	hideHTMLMenuLayer3(parent.lastMenuLayer3Id);
	if (MS)
		showElem("SELECT",2);
	//alert(self.clientX + ", " +self.clientY);
}

function handleScroll(ev) {
//	dbg("handleScroll("+ev+")");
	
	if (MS) {
		var elem = getElem(parent.lastMenuLayer3Id+"_Layer3",MENU3_FRAME)
		if (elem != null)  {
			if (parent.lastPosX==null)
				parent.lastPosX = 0;
		// BUG in IE6 with defined doctype
			if ( (parent.frames.VKB_RIGHT.document.documentElement) && 
				((parent.frames.VKB_RIGHT.document.documentElement.scrollTop) || 
				(parent.frames.VKB_RIGHT.document.documentElement.scrollLeft)) ) {
				elem.style.top = parent.frames.VKB_RIGHT.document.documentElement.scrollTop;
				elem.style.left = parseInt(parent.frames.VKB_RIGHT.document.documentElement.scrollLeft)+parent.lastPosX+"px";
			} else {
				diff_y = parseInt(parent.frames.VKB_RIGHT.document.body.scrollTop)-parseInt(elem.style.top);
				elem.style.top = parent.frames.VKB_RIGHT.document.body.scrollTop;
				elem.style.left = parseInt(parent.frames.VKB_RIGHT.document.body.scrollLeft)+parent.lastPosX+"px";
			}
		}
	}
}
if (PROD)
{
	window.onerror = handleError;
}

function handleError (err, url, line) {
   return true; // error is handled
}

//function isMSIE() {
//	return (navigator.appName.indexOf("Microsoft") != -1);
//}

//function isNavigator() {
//	return (navigator.appName.indexOf("Microsoft") == -1);
//}
function delay(){
//	setTimeout("handleError(1,1,1)", 1000);
	for(var i=0; i<50000; ++i) ;
}

function dbgout(){
	if (!DEBUG) return;
	if (self.name.substring(0,3)=="VKB" && !window.dbgWin) // Frameset vorhanden
		window.dbgWin = parent.dbgWin;
	if (!window.dbgWin || !window.dbgWin.document) {
		window.dbgWin = open("","Debug","height=120,toolbar=no,statusbar=no,scrollbars,resizable");
		window.dbgWin.msg = "debug startet from " + window.name + "<br/>";
		window.dbgWin.uhr = new Date();
	}
	window.dbgWin.document.writeln("<font size=1>"+ this.dbgWin.msg + "</font>"); 
	window.dbgWin.msg = "";
}

function dbg(msg, color) {
	if (!DEBUG) return;
	if (!color) color = "#0000FF"; // blau
	if (!window.dbgWin) dbgout();
//	window.dbgWin.msg += "[" + location + "]:<br/>"; 
	window.dbgWin.msg += "<font color=\""+color+"\">"+ (new Date().getTime()-window.dbgWin.uhr.getTime()) + " - " + msg + "</font><br/>"; 
	if (DBGOUT) dbgout();  
	
}

function dbgd_INTERN(obj_name, obj, max, l) {
	var result = "";
	if (typeof obj == "object"){
		for (var i=0; i<l; ++i) result += "&nbsp;";
		result += obj_name + " is an object<br/>";
//		result += obj_name + " = " + obj + "<br/>";
		if (l<max && obj_name.indexOf("history")==-1) {
			var cobj = null;
			var cname = null;
			for (var i in obj) {
				cobj = obj[i];
				cname = obj_name+"."+i;
				result+=dbgd_INTERN(cname, cobj, max, l+1);
			}
		}
	}
	else if (typeof obj == "function" && DBGFKT) {
		for (var i=0; i<l; ++i) result += "&nbsp;";
		result += obj_name + " is a function<br/>";
//		result += obj_name + " = " + obj + "<br/>";
	}
	else if (typeof obj != "object" && typeof obj != "function") {
		for (var i=0; i<l; ++i) result += "&nbsp;";
		result += obj_name + " = " + obj + "<br/>";
	}
	return result;
}

function dbgd(obj_name, obj, max) {
	if (!DEBUG) return;
	var result = dbgd_INTERN(obj_name, obj, max, 0);
	if (result.length>0)
		result=result.substring(0, result.length-5);
	dbg(result, "#FF00FF"); // lila
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") { return inputString; }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
   }
   return retValue; // Return the trimmed string back to the user
} // Ends the "trim" function

function isVKBFrameset(wnd){
	return wnd.name.substring(0,3)=="VKB";
}


/*****************************************************************
    Funktion getQueryArgs: Auswerten des Querystrings
	Param:	location-object
	Return:	dictionary (mit dictionary.parameter = wert)
*****************************************************************/
function getQueryArgs(query) {

	var args  = new Object();
	var str = query.search.substring(1);
	var pairs = str.split("&");
	
	for (var i=0; i < pairs.length; i++) {

		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;

		var argname  = pairs[i].substring(0,pos);
		var argvalue = unescape(pairs[i].substring(pos+1));

		args[argname] = argvalue;
//		dbg(argname + "=" + argvalue);
	}
	return args;
}


/*****************************************************************
    Funktion convertToAbsoluteURL: wandeln einer relativen URL in eine
	absolute URL anhand einer Referenz URL

	Parameter_1: url (String)
	Parameter_2: location (Location)
	return:      absoluteURL (String)
*****************************************************************/
//function convertToAbsoluteURL(url, refLocation) {
//	dbg("convertToAbsoluteURL("+url+", "+refLocation+")"); 
//
//	var protocolIndex = url.indexOf(':');
//
//	var refPathNameStrings = refLocation.pathname.split('/');
//
//	for (var i = 1; i < refPathNameStrings.length -1 ; i++) {
//		refPathName += "/" + refPathNameStrings[i];
//	}
//	
//	// ermitteln ob der url-Pfad ausgehend vom DocumentRoot angegeben wurde		
//	if (url.indexOf(".") == 0) {
//		// entferne "./" aus url
//		if (url.indexOf("..") == -1) url = url.substring(2); 
//		url = refPathName + "/" + url;
//	}
//	// fuege Protokol und host ein
//	if (protocolIndex == -1) {
//		url = refLocation.protocol +  "//" + refLocation.host + url;
//	}
//	
//	dbg("->convertToAbsoluteURL("+url+", "+refLocation+"): " + url); 
//	return url;
//
//}


/*****************************************************************
    Funktion convertURLToLocation: wandeln einer URL (String) in eine
	Location-Object

	Parameter_1: url (String)
	return:      location (Object) mit protocol, host, pathname, search und href
*****************************************************************/
function convertURLToLocation(url) {
	dbg("convertURLToLocation("+url+")");
        
	var MAX_PROTOCOL_LENGTH = 5;
	var loc = new Object();
	var protocolIndex = (MAX_PROTOCOL_LENGTH >= url.indexOf(":")) ? url.indexOf(":") : -1;
	var hostStartIndex = (-1 != url.indexOf("//")) ? url.indexOf("//")+2 : -1;
	var hostEndIndex = (hostStartIndex != -1) ? url.substring(hostStartIndex).indexOf("/")+hostStartIndex : -1;
	var pathIndex = (hostEndIndex > protocolIndex) ? hostEndIndex : protocolIndex + 1;

	if (protocolIndex != -1) {
		loc.protocol = url.substring(0,protocolIndex +1);
		if (hostStartIndex != -1) 
			loc.host = url.substring(hostStartIndex, hostEndIndex);
		else
			loc.host = location.host;
	} else {
		loc.protocol = location.protocol;
		loc.host = location.host;
	}
	var urlSubStrings = url.substring(pathIndex).split('?');
	loc.pathname = urlSubStrings[0];
	if (urlSubStrings.length > 1 && urlSubStrings[1].length > 0) loc.search = urlSubStrings[1];
	else loc.search = null;
	loc.href = loc.protocol + "//" + loc.host + loc.pathname + "?";
	if (loc.search != null) loc.href += loc.search;
	dbg("->convertURLToLocation("+url+"): " + loc);
	return loc;
}


/*****************************************************************
    Funktion getCookie: Auswerten des document.cookie
	Param:	doc (document)
	Return:	dictionary (mit dictionary.parameter = wert)
*****************************************************************/
function getCookie(doc) {
	dbg("getCookie("+doc+")");

	var cookie = new Object();
	var pairs = doc.cookie.split(';');
	
	for (var i=0; i < pairs.length; i++) {

		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;

		var argname  = pairs[i].substring(0,pos);
		var argvalue = pairs[i].substring(pos+1);

		cookie[argname] = argvalue;
		dbg("->getCookie: " + argname + "="+argvalue);
	}
	
	return cookie;
}

/*****************************************************************
    Funktion setSid():
        liesst Cookie sesessionid und ruft sid.htm in VKB_CERT auf
        um den cookie domaenenuebergreifend zu setzen
        Param:  void
        Return: void
*****************************************************************/
function setSid() {
	dbg("setSid()");
        if (parent.sessionid) {
                var sid = getCookie(document).sesessionid;
                if ((sid != parent.sessionid) && (sid != null)) {
                        var navRoot = convertURLToLocation(NAVIGATION_ROOT);
                        dgb("setSid: "+navRoot.protocol + "//" + SERVER_NAME + navRoot.pathname + "/sid.htm?sid=" + sid);
                        parent.frames.VKB_CERT.location.replace(navRoot.protocol + "//" + SERVER_NAME + navRoot.pathname + "/sid.htm?sid=" + sid);
                }
                parent.sessionid = sid;
        }
}

/*****************************************************************
    Funktion checkProtocol(): Konvertiert den Parameter link in ein 
	Link-Objekt. Falls das Protokoll der aktuell geladenen Seite
	von dem der zu ladenden Seite abweicht, wird der gesamte 
	Frameset mit dem neuen Content in neuen Protokoll geladen
	Param_1: link (Object)
	Return:	Boolean
*****************************************************************/
function checkProtocol(link) {
	dbg("checkProtocol("+link+")");

	if (link==null) return false;
	var theHost = SERVER_NAME;
	
	// pruefen, ob String oder Link-Objekt uebergeben wurde
	if (link.href == null) link = convertURLToLocation(link);
	else link = convertURLToLocation(link.href);
	
//	dbgd("link", link, 2);
	if (link.protocol.substring(0,4).toLowerCase() == "http") {
		
//		var args = getQueryArgs(parent.frames.VKB_RIGHT.location);
//		if ((link.search == null || link.search.indexOf("cssID") == -1) &&  args.cssID)
//			link.href += "cssID="+args.cssID;
//		dbg("->checkProtocol("+link.href+")");
		
		// bei Protokollwechsel Frameset neu aufbauen
		if (link.protocol != location.protocol) {
  		var args = getQueryArgs(parent.frames.VKB_RIGHT.location);
			var navRoot = convertURLToLocation(NAVIGATION_ROOT);
			var host = args.host;
			if (host & host!="")
				theHost = host;
			var url = link.protocol + "//" + theHost + navRoot.pathname;
			if (parent.aid==DEFAULT_AID)
				url += "/fsmain.htm?";
			else
				url += "/ldmain.htm?";
  	  url += "&aid=" + parent.aid 
	    if (parent.cssID)
				url += "&cssID=" + parent.cssID ;
			if (args.midx) 
	  		url += "&midx=" + args.midx;
			url += "&init=menu";
			url += "&content=" + escape(link.href) ;
//				dbg("init=menu: " + url);
			parent.location.replace(url);
			return false;
		} 
		else {
			//openMenu(link.href);
			if (parent.frames.VKB_RIGHT) {
				dbg("parent: " + link.href);
				parent.frames.VKB_RIGHT.location.replace(link.href);
//				self.setTimeout("parent.frames.VKB_RIGHT.location.replace(\"xxx\")", 100);
//				parent.location.href=link.href;
				return false;
			} 
			else {
				dbg("this: " + link.href);
				this.location.replace(link.href);
			}
		}
		return false;
	} 
	return true;
}

/*****************************************************************
    Funktion createHTMLLayer(): Erzeugt im angegebenen Frame mittels
	DHTML ein DIV-Objekt und befüllt es mit dem übergebenen HTML-
	Code.
	Funktioniert in IE (ab 4), NS4 und >=NS6
	Param_1: name (String): ID des erzeugten DIV-Elements
	Param_2: frame (Int): Nummer des Target-Frames
	Param_3: html (String): HTML-Code der in Target-Frame geschrieben wird
	Return:	 style-Object: Style-Attribut des erzeugten DIV-Elements
*****************************************************************/
function createHTMLLayer(name,frame,html) {
//	dbg("createHTMLLayer("+name+", "+frame+", "+html+")");
	dbg("createHTMLLayer("+name+", "+frame+")");
	
	var nL;
	if ((html == null) || (html == ""))
		html = "&nbsp;";
	
	var elem = getElem(name,frame);
	dbg("createHTMLLayer html.size=" + html.length + " elem=" + elem);
	if (elem!=null) {
		elem.innerHTML=html;
		return elem;
	} 
	else if ((IE) && (!IE6))
	{
		var divhtml = '<div id=' + name + '>' + html + '</div>';
		if (parent.frames[frame]) {
			parent.frames[frame].document.body.innerHTML += divhtml;
//			nL = parent.frames[frame].document.all[name].style;
		} else {
			this.document.body.innerHTML += divhtml;
//			nL = document.all[name].style
		}
	}
	else if (NS4) {
		nL=new Layer(width);
		nL.name = name;
		nL.document.open();
		nL.document.write(html);
		nL.document.close();
	}
	else if ((NS6) || (IE6))	{
		var mybody;
		if (parent.frames[frame]) { 
			nL = parent.frames[frame].document.createElement("DIV");
			mybody = parent.frames[frame].document.body;
		} else {
			nL = this.document.createElement("DIV");
			mybody = this.document.body;
		}
		nL.id = name;
		nL.innerHTML = html;
		mybody.appendChild(nL);
	}
	dbg("ende von createhtmllayer");
	return nL;
}

/*****************************************************************
    Funktion createLayer(): Erzeugt im angegebenen Frame mittels
	DHTML ein Layer und befüllt es mit dem übergebenen HTML-
	Code. Position und Grösse des Layer können spezifiziert
	werden.
	Funktioniert in IE (ab 4), NS4 und >=NS6
	Param_1: name (String):   ID des erzeugten DIV-Elements
	Param_2: left (String):   Linke (absolute) Position des Layer
	Param_3: top (String):    Top- (absolut) Position des Layer
	Param_4: width (String):  Breite des Layer
	Param_5: height (String): Höhe des Layer
	Param_6: frame (Int):     Nummer des Target-Frames
	Param_7: html (String):   HTML-Code innnerhalb des Layers
	Return:	 style-Object: Style-Attribut des erzeugten Layers
*****************************************************************/
function createLayer(name,left,top,width,height,frame,html)
{
	dbg("createLayer("+name+", "+left+", "+top+", "+width+", "+height+", "+frame+", "+html+")");
	var elem = getElem(name,frame);
	if (elem!=null) {
		elem.innerHTML="";
	}
	var nL;
	
	if (IE)
	{
		var divhtml = '<div id=' + name + ' style="visibility:hidden;left:' + left + 
			';top:' + top + ';width:' + width + 
			';height:' + height + ';position:absolute">' + 
			html + '</div>';
		if (parent.frames[frame]) {
			parent.frames[frame].document.body.innerHTML += divhtml;
			nL = parent.frames[frame].document.all[name].style;
		} else {
			this.document.body.innerHTML += divhtml;
			nL = this.document.all[name].style;
		}
	}
	else if (NS4)
	{
		nL=new Layer(width);
		nL.name = name;
		nL.left=left;
		nL.top=top;
		nL.clip.width=width;
		nL.clip.height=height;
		nL.document.open();
		nL.document.write(html);
		nL.document.close();
	}
	else if (NS6)
	{
		var mybody;
		if (parent.frames[frame]) {
			nL = parent.frames[frame].document.createElement("DIV");
			mybody = parent.frames[frame].document.body;
		} else {
			nL = this.document.createElement("DIV");
			mybody = this.document.body;
		}
		nL.innerHTML = html;
		mybody.appendChild(nL);
		nL.style.position = "absolute";
		nL.style.visibility = "hidden";
		nL.style.left = left;
		nL.style.top = top;
		nL.style.width = width;
		nL.style.height = height;
		nL.id = name;
		nL = nL.style;
	}
	return nL;
}
/*****************************************************************
    Funktion createHTMLMenu(): Sucht den Menu-Eintrag (key) im Menu-Objekt
	des TOP-Frames und ruft Funktion createHTMLLinks() zur Generierung 
	des HTML-Codes für die einzelnen Menüebenen.
	HTML-Code der Ebenen 1 und 2 wird in Variable top.menuLinks und 
	Code der Ebene 3 in Variable top.menuLayer3	gehalten.
	Baut im Anschluss die Seite htmlmnu.htm im Topframe mit dem 
	fertigen Menü auf.
	Param_1: key (String)
	Return:	void
*****************************************************************/
function createHTMLMenu(key) 
{
	dbg("createHTMLMenu("+key+")");
	// create first Menu-Level
	parent.menuLinks = createHTMLLinks(parent.menu,0,"ROOT");
	// create second Menu-Layer
	for(var i = 1; i < parent.menu.length; i++) {
		var mnu2 =parent.menu[i].menu;
		parent.menuLinks += createHTMLLinks(mnu2, 1, parent.menu[i].id);
		// create thrid Menu-Layer
		for (var ii = 1; ii < mnu2.length; ii++) {
			if (mnu2[ii].menu[1] != null) {
				var mnu3 = mnu2[ii].menu;
				if (parent.menuLayer3 == null)
					parent.menuLayer3 = "";
				parent.menuLayer3 += createHTMLLinks(mnu3, 2, mnu2[ii].id);
				parent.newMenuLayer3 = 1;
			}
		}
	}
	parent.frames.VKB_NAV.location.replace(NAVIGATION_ROOT + "/htmlmnu.htm?midx="+key);
	
};

/*****************************************************************
	Funktion zum verzögerten Laden des Menu in Ebene 1. onMouseover sendet eine 1, während
	onMouseout die Wahl mit 0 widerruft. Wenn nach "Timeout" kein Widerruf kam, wird selektiert.
	Param_1: key (String) Menükey der Ebene 1
	Param_2: flag (0,1,2)
	Return:	void
*****************************************************************/
function loadHTMLMenuLayer2Later(key, flag) {
	dbg("loadHTMLMenuLayer2Later("+key+","+flag+")");
	if (parent.fixedMenuKeyLayer1==key)
		return;
	if (flag==0)
		parent.prepareLoading = null;
	else if (flag==1)
	{
		parent.prepareLoading = key;
		parent.setTimeout("loadHTMLMenuLayer2Later('"+key+"', 2);", 300);
	}
	else if (flag==2 && key==parent.prepareLoading)
	{
		for (var i=1; i<parent.menu.length; ++i)
			if (parent.menu[i].id == key)
				break;
		if ((parent.memory+=i)=="12345" && (IE||OP) && getElem("plane",2)!=null)
		{
//			parent.frames.VKB_RIGHT.plane(-1,-1);
		}
		else if (parent.memory=="13524")
		{
//			parent.frames.VKB_RIGHT.location.replace("/ukvhome/kundenservice/crossword.shtml");
		}
		else if (parent.memory=="24135")
		{
//			parent.frames.VKB_RIGHT.location.replace("/ukvhome/kundenservice/schieben.shtml");
		}
		loadHTMLMenuLayer2(key);
	}
}	
/*****************************************************************
    Funktion loadHTMLMenuLayer2(): Zeigt im Top-Frame das Menü Ebene 2
	zum angegebenen Ebene-1-Key (key) an.
	Durchläuft alle Ebene-2-Menüs und blendet alle nicht benötigten
	Ebene-2-Menüs aus und das durch key angegebene ein. Dabei wird 
	das MouseOver-Highlighting der Ebene 1 ausgeführt, sowie alle 
	evtl. im angezeigten Ebene-2-Menü gehighlighteten Einträge zu-
	rückgesetzt.
	Param_1: key (String) Menükey der Ebene 1
	Return:	void
*****************************************************************/
function loadHTMLMenuLayer2(key) {
	dbg("loadHTMLMenuLayer2("+key+") with fixed " + parent.fixedMenuKeyLayer1);
	if ((key==null) || (key=="") ) //|| (key == DEFAULT_MIDX) ) //HST 19.2.2004
//	if ((key==null) || (key=="") || (key == DEFAULT_MIDX) || (key==parent.fixedMenuKeyLayer1) ) // HST 28.1.2004
		return;

	if (parent.menuTimeout) {
		clearTimeout(parent.menuTimeout);
		parent.menuTimeout = null;
	}

	unloadHTMLMenuLayer2();
	hideHTMLMenuLayer3(parent.lastMenuLayer3Id);
	
	if (MS)
		showElem("SELECT",2);

	parent.fixedMenuKeyLayer1=key; // HST,28.1.2004
	
	for(var i = 1; i < parent.menu.length; i++) {
		if (parent.menu[i].id == key) {
			if(DOM || MS) {
				getElem(parent.menu[i].id+"_Layer2",MENU2_FRAME).style.visibility = "visible";
			}
			else if(NS) {
				getElem(parent.menu[i].id+"_Layer2",MENU2_FRAME).visibility = "show";
			}
			getElem(parent.menu[i].id+"_ElementLayer1",MENU2_FRAME).style.backgroundColor = reiterbgdark;
			var mnu = parent.menu[i].menu;
			for (var ii = 1; ii < mnu.length; ii++)
				getElem(mnu[ii].id+"_ElementLayer2",MENU2_FRAME).style.color = balkencolor;
		} else {
			if (parent.menu[i].id !=parent.fixedMenuKeyLayer1) 
				getElem(parent.menu[i].id+"_ElementLayer1",MENU2_FRAME).style.backgroundColor = reiterbg;
		}
	}

};

/*****************************************************************
    Funktion unloadHTMLMenuLayer2(): Blendet im Top-Frame alle 
	Ebene-2-Menüs aus. Wird aus loadHTMLMenuLayer2() gerufen.
	Return:	void
*****************************************************************/
function unloadHTMLMenuLayer2() {
	dbg("unloadHTMLMenuLayer2()");
	
	for(var i = 1; i < parent.menu.length; i++) {
		var elem = getElem(parent.menu[i].id+"_Layer2",MENU2_FRAME);
		if ( (parent.menu[i].menu != null) && (elem != null) ) {
			if(DOM || MS)
				elem.style.visibility = "hidden";
			if(NS)
				elem.visibility = "hide";
		}
	}
};

/*****************************************************************
    Funktion resetHTMLMenuLayer2(): Setzt im Top-Frame das Ebene-2-
	Menü auf den durch Mausklick selektierten Eintrag (Variablen
	top.fixedMenuKeyLayer1 und top.fixedMenuKeyLayer2) zurück.
	Falls vorhanden wird ein Ebene-2-Eintrag gehighlightet.
	Es wird zurückgesetzt falls die Mouse oberhalb des Ebene-1-
	Menüs ist. Für NS wird mit Verzögerung eine analoge Funktion
	gerufen.
	Return:	void
*****************************************************************/
function resetHTMLMenuLayer2() {
	dbg("resetHTMLMenuLayer2()");
	
	if(MS) {
		if(window.event.clientY < 79) {
			loadHTMLMenuLayer2(parent.fixedMenuKeyLayer1);
			highlightMenuLayer2(parent.fixedMenuKeyLayer2);
		}
	} else {
		setTimeout('resetLayer2ForNS();',50);
	}
};

/*****************************************************************
    Funktion resetLayer2ForNS(): Ananlog zu resetHTMLMenuLayer2().
	Wird für NS verwendet und liest die Mausposition aus einer
	top-Variable, die von der Event-Funktion handleMove geschrieben
	wird.
	Return:	void
*****************************************************************/
function resetLayer2ForNS() {
	dbg("resetLayer2ForNS()");

	if (window.clientY < 78) {
		loadHTMLMenuLayer2(parent.fixedMenuKeyLayer1);
		highlightMenuLayer2(parent.fixedMenuKeyLayer2);
	}
};

/*****************************************************************
    Funktion handleMouseoutHTMLMenuLayer3(): Wird beim Mouseout-
	Event der Ebene-3-Menüs (Layer im Content) gerufen. Aufgrund 
	der Table-Struktur dieser Menüs können auch Mouseout-Events
	auftreten wenn ein Zellenelement verlassen wird. Deshalb prüft 
	die Methode anhand der x- und y-Mauskoordinate ob das Gesammt-
	menü verlassen wurde. In diesem Fall wird das angezeigte Ebene-
	3-Menü ausgeblendet und eine mögliche Selektion in Ebenen 1 und 
	2 angezeigt.
	Für Netscape wird eine analoge Funktion resetLayer3ForNS() mit
	Verzögerung gerufen.
	Param_1: key (String) Menükey der Ebene 2 dessen Ebene-3-Menü
	angezeigt wird.
	Return:	void
*****************************************************************/
function handleMouseoutHTMLMenuLayer3(key) {
	dbg("handleMouseoutHTMLMenuLayer3("+key+")");
	
	if (DOM) {
		setTimeout("resetLayer3ForNS(\""+key+"\");",200);
	} else if (MS) {
		setTimeout("resetLayer3ForIE(\""+key+"\");",200);
	}
};

/*****************************************************************
    Funktion resetLayer3ForNS(): Ananlog zu 
	handleMouseoutHTMLMenuLayer3().
	Wird für NS verwendet und liest die Mausposition aus einer
	top-Variable, die von der Event-Funktion handleMove() 
	geschrieben	wird.
	Param_1: key (String) Menükey der Ebene 2 dessen Ebene-3-Menü
	angezeigt wird.
	Return:	void
*****************************************************************/
function resetLayer3ForNS(key) {
	dbg("resetLayer3ForNS("+key+")");
	
	var elem = getElem(key+"_Layer3",MENU3_FRAME);
	if (!elem)
	{
		return;
	}
	var x = window.clientX;
	var y = window.clientY;
	if (((x-1) <= elem.offsetLeft) || ((x+1) >= elem.offsetLeft+elem.offsetWidth) || ((y-1) <= elem.offsetTop) || ((y+1) >= (elem.offsetTop + elem.offsetHeight))) {	
		loadHTMLMenuLayer2(parent.fixedMenuKeyLayer1);
		highlightMenuLayer2(parent.fixedMenuKeyLayer2);
		hideHTMLMenuLayer3(key);
	} else {
		if (parent.menuCloseTimeout) {
			clearTimeout(parent.menuCloseTimeout);
		}
		parent.menuCloseTimeout = setTimeout("handleMouseoutHTMLMenuLayer3(\""+key+"\");",MENU_TIMEOUT);
	}
};

function resetLayer3ForIE(key) {
	dbg("resetLayer3ForIE("+key+")");
	
	var elem = getElem(key+"_Layer3",MENU3_FRAME);
	if (!elem)
	{
		dbg("elem im resetLayer3ForIE ist null", "#FF0000");
		return;
	}
		x = window.clientX;
		y = window.clientY;
		// BUG in IE6 with defined doctype
		if ( (parent.frames.VKB_RIGHT.document.documentElement) && 
			((parent.frames.VKB_RIGHT.document.documentElement.scrollTop) || (parent.frames.VKB_RIGHT.document.documentElement.scrollLeft)) ) {
			y += parent.frames.VKB_RIGHT.document.documentElement.scrollTop;
			x += parent.frames.VKB_RIGHT.document.documentElement.scrollLeft;
		} else {
			y += parent.frames.VKB_RIGHT.document.body.scrollTop;
			x += parent.frames.VKB_RIGHT.document.body.scrollLeft;
		}
//		dbg("resetLayer3ForIE " + x + ", " + y);
//		dbg("l " + elem.offsetLeft + " w " + elem.offsetWidth + " t " + elem.offsetTop + " h " + elem.offsetHeight);
		if (elem.offsetLeft && ((x-1) <= elem.offsetLeft) || ((x+1) >= elem.offsetLeft+elem.offsetWidth) || ((y-1) <= elem.offsetTop) || ((y+1) >= (elem.offsetTop + elem.offsetHeight))) {	
			loadHTMLMenuLayer2(parent.fixedMenuKeyLayer1);
			highlightMenuLayer2(parent.fixedMenuKeyLayer2);
			hideHTMLMenuLayer3(key);
			if (MS)
				showElem("SELECT",2);
		} else {
			if (parent.menuCloseTimeout) {
				clearTimeout(parent.menuCloseTimeout);
			}
			parent.menuCloseTimeout = setTimeout("handleMouseoutHTMLMenuLayer3(\""+key+"\");",MENU_TIMEOUT);
		}
}

/*****************************************************************
    Funktion highlightMenuLayer2(): Highlightet das durch key über-
	gebene Ebene-2-Menü-Element (mouseover) und setzt alle anderen
	wieder auf Standardfarbe zurück.
	Param_1: key (String) Menükey des Ebene-2-Elements
	Return:	void
*****************************************************************/
function highlightMenuLayer2(key) {
	dbg("highlightMenuLayer2("+key+")");

	if ((key==null) || (key=="")) // || (key==DEFAULT_MIDX)) // HST 19.2.2004
		return;

//	top.window.focus();
	var firstmnu = getMenu(parent.menu, key, 0);
	if (firstmnu == null)
		return;
	var mnu = firstmnu.menu;
	for (var i = 1; i < mnu.length; i++) {
		var elem = getElem(mnu[i].id+"_ElementLayer2",MENU2_FRAME);
		if (mnu[i].id == key) { 
			elem.style.color = balkencoloraktiv;
			elem.blur();
		} else {
			elem.style.color = balkencolor;
			elem.blur();
		}
	}
};

/*****************************************************************
    Funktion loadHTMLMenuLayer3(): Findet zum übergebenen Ebene-2-
	Menü-Eintrag (key) das Layer3-Menü im Content und zeigt es an.
	Zu diesem Ebene-2-Menü-Eintrag wird die x-Koorinate ermittelt
	und der Methode showHTMLMenuLayer3() zur Anzeige des Layer3-
	Menüs übergeben. Wie in der Methode highlightMenuLayer2() wird
	der aktive Ebene-2-Menü-Eintrag gehighlightet und alle anderen
	zurückgesetzt. Auch werden alle anderen Layer3-Menüs ausgeblen-
	det.
	Param_1: key (String) Menükey des Ebene-2-Elements
	Return:	void
*****************************************************************/
function loadHTMLMenuLayer3(key) {
	dbg("loadHTMLMenuLayer3("+key+")");
	var mnu;
	var posX = 0;
	if ((key==null) || (key=="")) // || (key==DEFAULT_MIDX)) // HST 19.2.2004
		return;
	
	if (parent.menuTimeout) {
		clearTimeout(parent.menuTimeout);
		parent.menuTimeout = null;
	}

	if (parent.menuCloseTimeout) {
		clearTimeout(parent.menuCloseTimeout);
		parent.menuCloseTimeout = null;
	}
	
	if ((getElem("LOADED",MENU3_FRAME) == null) || (parent.newMenuLayer3==1))
	{
		writeHTMLMenuLayer3();
		parent.menuTimeout = setTimeout('loadHTMLMenuLayer3("'+key+'");',200);
		return;
	}
	var firstmnu = getMenu(parent.menu, key, 0);
	if (firstmnu == null)
		return;
	mnu = firstmnu.menu;
	for (var i = 1; i < mnu.length; i++) {
		var elem = getElem(mnu[i].id+"_ElementLayer2",MENU2_FRAME);
		if (mnu[i].id == key) { 
			elem.style.color = balkencoloraktiv;
			elem.blur();
			posX = elem.offsetParent.offsetLeft + elem.offsetLeft;;
			showHTMLMenuLayer3(mnu[i].id,posX);
			parent.lastMenuLayer3Id = mnu[i].id;
			parent.lastPosX = posX;
			parent.menuCloseTimeout = setTimeout("handleMouseoutHTMLMenuLayer3(\""+mnu[i].id+"\");",MENU_TIMEOUT);
		} else {
			elem.style.color = balkencolor;
			elem.blur();
			hideHTMLMenuLayer3(mnu[i].id);
		}
	}
};

/*****************************************************************
    Funktion showHTMLMenuLayer3(): Zeigt das durch key spezifizierte
	Layer-3-Menü an der X-Koordinate (pos) an. Wird das Menü zu ersten
	Mal angezeigt, so wird seine Breite neu berechnet. Dabei wird 
	der breiteste Menüeintrag gesucht und als Bold angezeigt. Diese
	Breite (plus 4px pro Seitenrand) wird als neue Menübreite gesetzt.
	Anschließend wird das Menü sichtbar gemacht.
	Param_1: key (String) Menükey des Layer3-Menüs
	Param_2: pos (Int) X-Koordinate an der das Menü angezeigt wird
	Return:	void
*****************************************************************/
function showHTMLMenuLayer3(key,pos) {
	dbg("showHTMLMenuLayer3("+key+", "+pos+")");
	
	var elem = getElem(key+"_Layer3",MENU3_FRAME)
	if (elem != null)  {
		
		if(DOM || MS) {
			elem.style.display = "block";
			if (MS) {
				// BUG in IE6 with defined doctype
				if ( (parent.frames.VKB_RIGHT.document.documentElement) && 
					((parent.frames.VKB_RIGHT.document.documentElement.scrollTop) || (parent.frames.VKB_RIGHT.document.documentElement.scrollLeft)) ) {
					elem.style.top = parseInt(parent.frames.VKB_RIGHT.document.documentElement.scrollTop)+'px';
					elem.style.left = parseInt(parent.frames.VKB_RIGHT.document.documentElement.scrollLeft)+pos+"px";
				} else {
					elem.style.top =  parseInt(parent.frames.VKB_RIGHT.document.body.scrollTop)+'px';
					elem.style.left = parseInt(parent.frames.VKB_RIGHT.document.body.scrollLeft)+pos+"px";
				}
			} else {
				elem.style.top = parseInt(parent.frames.VKB_RIGHT.window.pageYOffset)+'px';
				elem.style.left = parseInt(parent.frames.VKB_RIGHT.window.pageXOffset)+pos+"px";
			}
		}
		else if(NS) {
			elem.left = pos;
			elem.top = parent.frames.VKB_RIGHT.window.pageYOffset;
		}
		
		var table = elem.firstChild;
		if (table.style.width == "") {
			var nodesTR = elem.firstChild.firstChild.childNodes;
			var elementlength = 0
			var textlength = 0;
			for (var i = 0; i < nodesTR.length; i++) {
				nodesTR[i].firstChild.firstChild.firstChild.style.fontWeight = "bold";
				if (elementlength < nodesTR[i].firstChild.firstChild.firstChild.offsetWidth) {
					elementlength = nodesTR[i].firstChild.firstChild.firstChild.offsetWidth;
				}
				nodesTR[i].firstChild.firstChild.firstChild.style.fontWeight = "";
			}
			elementlength+=10;
			table.style.width = elementlength+"px";
			elem.childNodes[1].style.width = elementlength+"px";
		}

		if(DOM || MS ) {
			if (MS)
				hideElem("SELECT",2);
			elem.style.visibility = "visible";
		}
		else if(NS) {
			elem.visibility = "show";
		}
	}
};

/*****************************************************************
    Funktion hideHTMLMenuLayer3(): Blendet das durch key angegebene
	Layer-3-Menü aus.
	Param_1: key (String) Menükey des Layer3-Menüs
	Return:	void
*****************************************************************/
function hideHTMLMenuLayer3(key) {
	dbg("hideHTMLMenuLayer3("+key+")");
	
	var elem = getElem(key+"_Layer3",MENU3_FRAME)
	if (elem != null)  {
		if(DOM || MS) {
			elem.style.visibility = "hidden";
			elem.style.display = "none";
		}
		else if(NS) {
			elem.visibility = "hide";
		}
	}
};

/*****************************************************************
    Funktion writeHTMLMenuLayer3(): Schreibt mittels Methode
	"createHTMLLayer() alle Layer-3-Menüs (top.menuLayer3)" ins
	Content-Frame.
	Return:	void
*****************************************************************/
function writeHTMLMenuLayer3() {
	dbg("writeHTMLMenuLayer3()");
	
	if (isVKBFrameset(self) && parent.menuLayer3 != null) {
		createHTMLLayer("LOADED",MENU3_FRAME,parent.menuLayer3);
		parent.newMenuLayer3=0;
	}
	//else
	//	createHTMLLayer("LOADED",2,"");
};

/*****************************************************************
    Funktion createHTMLLinks: Generiert alle HTML-Menüs
	Param_1: Menu-Object
	Param_2: level (Integer)
	Param_3: key Übergeordnete Menüebene
	Return:	String
*****************************************************************/
function createHTMLLinks(mnu, level, key) {
	dbg("createHTMLLinks("+mnu+", "+level+", "+key+")");
	
	var html = "";
	html += "<DIV ID=\""+key+"_Layer"+(level+1)+"\" CLASS=\"LAYER"+(level+1)+"\" >";
	if (level>2)
		alert("Level ist "+level);
	if (level==0)
	{
		html += '<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"';
//		html += ' onMouseout="resetHTMLMenuLayer2();"'; //HST, 28.1.2004
		html += '>';
		html += '<TR>';
	}
	else if (level ==1)
	{
		html += '<TABLE class="balkenLAYER" BORDER="0" CELLSPACING="0" CELLPADDING="0">';
		html += '<TR><td class="balkenDOM">&nbsp;&nbsp;&nbsp;</td>';
	}
	else if (level==2)
	{
		html += '<TABLE class="dropdown" BORDER="0" CELLSPACING="0" CELLPADDING="0"';
		html += " onMouseout=\"handleMouseoutHTMLMenuLayer3('"+key+"');\" >";
	}

	for(var i = 1; i < mnu.length; i++) {
		// unterdruecken der Separatoren
		if ("LEERZEILE" != mnu[i].id) {
			if (level==0) {
				html += '<TD nowrap align="center" class="reiterbg">';
//HST28.1.2004				html += "<DIV id=\""+mnu[i].id+"_ElementLayer1\" onMouseover=\"loadHTMLMenuLayer2Later('"+mnu[i].id+"');\" onClick=\"parent.fixedMenuKeyLayer1='"+mnu[i].id+"'; loadHTMLMenuLayer2('"+mnu[i].id+"');\" >";
				html += "<DIV id=\""+mnu[i].id+"_ElementLayer1\" onMouseover=\"loadHTMLMenuLayer2Later('"+mnu[i].id+"', 1);\" onMouseout=\"loadHTMLMenuLayer2Later('"+mnu[i].id+"', 0);\" onClick=\"loadHTMLMenuLayer2('"+mnu[i].id+"');\" >";
				html += "<TABLE BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" height=\"24\"><TR>";
				html += "<TD valign=\"top\" width=\"3\"><IMG src=\"/urvcommon/images/stat/el_reiterecke_links.gif\" height=\"3\" width=\"3\"></td>";
				html += "<td valign=\"top\" width=\"9\"><img src=\"/urvcommon/images/stat/el_leer.gif\" width=\"9\" height=\"3\"></td>";
				html += "<TD nowrap align=\"center\">";
				html += '<A id="'+mnu[i].id+'_ElementLayer2\" class="reiter">';
				html += mnu[i].source;
				html += "</a></TD>";
				html += "<td valign=\"top\" width=\"10\"><img src=\"/urvcommon/images/stat/el_leer.gif\" width=\"10\" height=\"3\"></td>";
				html += "<TD valign=\"top\" width=\"3\"><IMG src=\"/urvcommon/images/stat/el_reiterecke_rechts.gif\" height=\"3\" width=\"3\">";
				html += "</TD></TR></TABLE>";
				html += "</DIV></td>";
			} else if (level==1) {
				html += "<TD nowrap>";
				html += "<DIV onMouseover=\"loadHTMLMenuLayer3('"+mnu[i].id+"');\">";
				html += "<A class=\"balken\" id=\""+mnu[i].id+"_ElementLayer2\" TARGET=\"VKB_DUMMY\" HREF=\"" + NAVIGATION_ROOT + "/loader.htm?url=" + mnu[i].uri + "\">";
				html += mnu[i].source;
				html += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A></DIV></td>";
			} else if (level==2) {
				html += "<TR>";
/*				if ((mnu.length - i) == 1)
				{
					html += "<TD class=\"LASTROW3\">";
					html += "<DIV class=\"LEVELLAST3\">";
				}
				else
				{
					html += "<TD class=\"LEVEL3\">";
					html += "<DIV class=\"LEVEL3\">";
				}
*/
				html += "<td class=\"menuebg\" style=\"border-bottom: 1px solid "+pulldowncolor+";\"><div class=\"LEVEL3\">";				
				// LEVEL3
//				html += "<A id=\""+mnu[i].id+"_ElementLayer3\" class=\"menue\" TARGET=\"VKB_DUMMY\" HREF=\"" + NAVIGATION_ROOT + "/loader.htm?url=" + mnu[i].uri + "\">";
				html += "<A class=\"menue\" HREF=\"" + NAVIGATION_ROOT + "/loader.htm?url=" + mnu[i].uri + "\">";
				html += mnu[i].source;
				html += "</A></DIV></td></tr>";
			}
		} 
		else if (level == 2) // Leerzeile
			html += "<TR><TD>&nbsp;</TD></TR>";
	}
	if (level < 2)
		html += "</TR></table></div>";
	else if (level==2)
	{
		html += "</TABLE>";
		html +="<Table BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\">";
//		html += "<TABLE class=\"links\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" onMouseout=\"handleMouseoutHTMLMenuLayer3('"+key+"');\">";
//		html += "<TR><TD class=\"LEVEL3ECKE\" width=4><img src=\"/urvcommon/images/stat/navlinksunten.gif\" alt=\"\"></TD>";
//		html += "<TD class=\"LEVEL3UNTEN\" height=2><img src=\"/urvcommon/images/stat/el_leer.gif\" alt=\"\"></TD>";
//		html += "<TD class=\"LEVEL3ECKE\" width=4><img src=\"/urvcommon/images/stat/navrechtsunten.gif\" alt=\"\"></TD></TR>";
		html += "</TABLE></DIV>";
	}
	return html;
}

/*****************************************************************
    Funktion getMenuNameFromLink: Durchsucht rekursiv das Menu-Object
	ab der Ebene Level nach dem angegebenen Menue-Eintrag (url).
	Als Suchergebnis wird die MenuID oder null geliefert.
	Param_1: Menu-Object
	Param_2: url (String)
	Param_3: level (Integer)
	Return:	key (String) oder null
*****************************************************************/
function getMenuNameFromLink(mnu, url) {
	dbg("getMenuNameFromLink("+mnu+", "+url+")");

	var key;
	if (mnu == null) return null;
	for(var i = 1; i < mnu.length ; i++) {
		dbg(mnu[i].uri);
		if (url.indexOf(mnu[i].uri) != -1) key = mnu[i].id;
		else if (mnu[i].menu.length > 0) key = getMenuNameFromLink(mnu[i].menu, url);
		if (key != null) return key;
	}
	return null;
}


/*****************************************************************
    Funktion openMenu: Sucht den Menu-Eintrag (url) im Menu-Objekt
	des TOP-Frames und oeffnet, falls gefunden, das zugehörige
	Menu.
	Param_1: link (String oder Link object)
	Return:	void
*****************************************************************/
function openMenu(link) {
	dbg("openMenu("+link+")");
	var url;
	var key;

	if (link.href == null) url = link;
	else url = link.href;
	key = getMenuNameFromLink(parent.menu, url);
	setMenu(key,"");
}

/*****************************************************************
    Funktion setMenu: Öffnet das Menü auf den Übergebenen Menü-Index
	(key). Wird init = 1 übergeben, wird das Menü neu aufgebaut. Das
	selektierte Menü wird in den Top-Variablen top.fixedMenuKeyLayer1
	und top.fixedMenuKeyLayer2 gespeichert.
	param_1: key  : Menue-Index (String)
	param_2: init : Neuaufbau des Menüs
	return:	void
*****************************************************************/
function setMenu(key,init) {
	dbg("setMenu("+key+", "+init+")");
	var layer1Key = "";
	var layer2Key = "";
	parent.menuReload = 1; // menu-status = init
	if (key == null)	// Test auf undefined
		key = DEFAULT_MIDX;		// Setzen auf null --> für NS4 nötig
	if (parent.mnuWriting != true) {
		parent.mnuWriting = true;
		if (parent.frames.VKB_NAV) {
			layer1Key = getMenuIndex(key,0);
			layer2Key = getMenuIndex(key,1);
			parent.fixedMenuKeyLayer1=layer1Key;
			parent.fixedMenuKeyLayer2=layer2Key;
			if (init == "menu") { 
				createHTMLMenu(key);
				if (key!=MENU_NOCHANGE)
					parent.lastMenuSet = key; // HST, 29.1.2004
				parent.memory="";
			} 
			else { // if (key != DEFAULT_MIDX) { // HST 19.2.2004
				if (getElem(layer1Key+"_ElementLayer1",MENU2_FRAME) != null) {
					loadHTMLMenuLayer2(layer1Key);
					highlightMenuLayer2(layer2Key);
					if(key != MENU_NOCHANGE)
						parent.lastMenuSet = key; // HST, 29.1.2004
				}
			}
		}
		parent.mnuWriting = false;
	}
	parent.menuReload = 2; // ready
}


/*****************************************************************
    Funktion initMenu: Initialisiert das Menü nachdem es neu geladen
	wurde
	param_1: void
	return:    void
*****************************************************************/
function initMenu() {
	dbg("initMenu()");
	var args = getQueryArgs(location);
	args.init = "menu";
	parent.lastMenuLayer3Id = "";
//	dbgd("parent.menu", parent.menu, 99);
//	if (args.midx != null) // HST 19.2.2004 wenn args.midx null wird DEFAULT in setMenu gesetzt
		setMenu(args.midx,args.init);
//	else setMenu(DEFAULT_MIDX,args.init);
}


/*****************************************************************
    Funktion checkFrames: Onload-Handler fuer Content-Seiten
	Parameter: label : Anker in der Seite, auf den beim evtl.
	Neuaufbau verwiesen werden soll.
	return:    void
*****************************************************************/
function checkFrames(label) {
//	var names="";
//	for(var i=0;i<parent.frames.length;++i) names+=parent.frames[i].name+"\n";
//	alert(names);
	dbg("checkFrames("+label+") " + VKB_MenuIndex);
//alert(self.location.href);
	var frameset = isVKBFrameset(self);

	if (label != null) location.hash = label;

	var args = getQueryArgs(location);
//	if (VKB_content) args.content = VKB_content;
//	else 
	args.content = location.href;

	if (VKB_aid)
		args.aid = VKB_aid;

	if (!frameset) { // da geht kein Weg dran vorbei
//		if (!args.midx) // Menü antäuschen
			args.midx = VKB_MenuIndex;
		args.init = "all";
		if (!args.aid) args.aid = DEFAULT_AID;
	}
	else {
		if (args.midx) {
			parent.lastMenuSet = args.midx;
//			alert(args.init + " , " + args.midx);
	}
		args.midx = VKB_MenuIndex;
		// falls der Content keine AgenturID (Parameter 'aid') liefert, wird diese aus
		// dem aktuellen Wert aid im _top ermittelt. Falls auch dort keine AgenturID vor-
		// handen ist, setze aid=DEFAULT_AID.
		if (!args.aid) {
			if (parent.aid) {
			  args.aid = parent.aid;
//  			dbg("args.aid="+parent.aid+", da kein arg");
			}
			else {
			  args.aid = DEFAULT_AID;
//  			dbg("args.aid="+DEFAULT_AID+", da weder arg noch parent");
			}
		}
		if (VKB_INIT)	{ 
			args.init = VKB_INIT;
			dbg("args.init="+VKB_INIT);
		}
		else if (parent.aid && parent.aid != args.aid) {
			args.init = "menu"; // bei einem Wechsel der AgenturID wird das Menu neu geladen
			dbg("args.init=menu, da arg.aid != parent.aid");
		}
		if (args.cssID)	{
  		dbg("parent.cssID from " + parent.cssID + " to " + args.cssID);
			parent.cssID = args.cssID;
		}
		else if (parent.cssID)
			args.cssID = parent.cssID;
		if (args.debug)
			DEBUG=true;
	}
	
	var queryArgs = "";
	queryArgs += "&aid=" + args.aid;
	if (args.cssID)
		queryArgs += "&cssID=" + args.cssID;
	if (args.midx) 
	  queryArgs += "&midx=" + args.midx;
	queryArgs += "&type=html";
	if (args.content.indexOf('?') == -1) args.content += "?";
//	if (args.content.indexOf("&init=noinit") == -1) args.content += "&init=noinit";
	queryArgs += "&content=" + escape(args.content);
//	queryArgs = queryArgs.substring(0, queryArgs.length -1);

	// Frameset ist der VKB-Frameset und
	// kein Neuaufbau des Framesets erforderlich
	if (args.init != "all") { //&& (parent.frames.VKB_RIGHT))	
		
  	dbg("parent.aid from " + parent.aid + " to " + args.aid);
		parent.aid = args.aid;
    
		if (VKB_MenuIndex == MENU_NOCHANGE)	{
			VKB_MenuIndex = parent.lastMenuSet;
			dbg("MenuIndex set to " + parent.lastMenuSet);
		}
    // VKB_NAV laden
		if (args.init == "menu") { // menu-status = ready
			parent.menuReload = 0; // menu-status = loading
			if (parent.frames.VKB_NAV) {
				dbg("VKB_INIT=menu: "+NAV_SERVLET_URL + queryArgs);
				parent.frames.VKB_NAV.location.replace(NAV_SERVLET_URL + queryArgs); 
			}
		} 
		else if (parent.menuReload == 2) {
			setMenu(VKB_MenuIndex,args.init);
		}

		// VKB_TOP laden
		var theHost = getQueryArgs(parent.frames.VKB_RIGHT.location).host;	
		queryArgs += "&host=" + theHost;
		
		// kopiert sessionid-cookie in einen domaenen-übergreifenden cookie
		setSid();

	// Frameset ist falsch bzw.
	// Neuinitialisierung des gesamten Frameset nur beim ersten
	// Aufruf des Onload-Handlers (beim 2. Aufruf kennt der
	// Content den Init-Status bereits)
	} 
	else 	{
		var navRoot = convertURLToLocation(NAVIGATION_ROOT);
//		var theHost = SERVER_NAME;
//		if (parent.frames.VKB_RIGHT) theHost = getQueryArgs(parent.frames.VKB_RIGHT.location).host;	
		var mainhtm="/fsmain.htm?";
		if (args.aid!=DEFAULT_AID)
			mainhtm="/ldmain.htm?"; 
		dbg("VKB_INIT=all: "+location.protocol + "//" + navRoot.host + navRoot.pathname + mainhtm + queryArgs);
		if (frameset)
			parent.location.replace(location.protocol + "//" + navRoot.host + navRoot.pathname +  mainhtm + queryArgs);
		else
			self.location.replace(location.protocol + "//" + navRoot.host + navRoot.pathname +  mainhtm + queryArgs);
//		parent.aid = args.aid;
	}
}

/*****************************************************************
    Funktion getMenuIndex: Liefert den Teil-Menü-Index (key) zurück, 
	der durch level angegeben wird.
	param_1: key   : MenüIndex
	param_2: level : Navigationsebene (Zählung beginnt bei 0)
	return: Teil-Menü-Index
*****************************************************************/
function getMenuIndex(key,level) {
	dbg("&nbsp;getMenuIndex("+key+", "+level+")");

	var thisKey;
	var index = -1;
	level+=1;
	
	for (var i = 0; i < level; i++ ) {
		index = key.indexOf(".", index+1);
	}
	if (index != -1)
		thisKey = key.slice(0,index);
	else
		thisKey = key;
		
	dbg("&nbsp;->getMenuIndex("+key+", "+(level-1)+"): "+thisKey);
	return thisKey;
};

/*****************************************************************
    Funktion getMenu: Liefert durch Rekursion ein Untermenü von mnu
	zurück. key ist der Menü-Index der das Untermenu beschreibt. Vom
	key wird aber nur der durch level beschriebene Teil verwendet.
	param_1: mnu   : Menü (Zählung beginnt mit 1)
	param_2: key   : MenüIndex
	param_3: level : Navigationsebene (Zählung beginnt bei 0)
	return: Teil-Menü
*****************************************************************/
function getMenu_INTERN(mnu, key, level, it) {
	dbg("&nbsp;getMenu_INTERN("+mnu+", "+key+", "+level+", "+it+")");
	
	var thisKey = getMenuIndex(key,it);
	for(var i = 1; i < mnu.length; i++) {
		dbg("getMenu_INTERN vergleicht " + mnu[i].id + " und " + thisKey);
		if (mnu[i].id == thisKey) {
			if (level == 0)
				return mnu[i];
			else
				return getMenu_INTERN(mnu[i].menu, key, level -1,it+1);
		}
	}
	dbg("&nbsp;getMenu_INTERN findet "+thisKey+" nicht auf Navigationsebene "+it, "#FF0000");
	return null;
};


function getMenu(mnu,key,level) {
	// gemeint ist hier das top.menu, welches die Einträge mit menu[1], usw. beginnt.
	dbg("&nbsp;getMenu("+mnu+", "+key+", "+level+")");
	var result = getMenu_INTERN(mnu, key, level, 0);
	dbg("&nbsp;->getMenu("+mnu+", "+key+", "+level+"): " + result);
	return result;
};

/*****************************************************************
    Funktion getMenu: Liefert ein Untermenü von top.menu ab der 
	3. Ebene zurück. key ist der Menü-Index der das Untermenü 
	beschreibt. Vom key wird aber nur der Level 0 und 1 ausgewertet.
	param_1: key   : MenüIndex
	return: Teil-Menü ab 3. Ebene
*****************************************************************/
function getMenuLayer34(key) {
	dbg("&nbsp;getMenuLayer34("+key+")");

	if (parent.menu)
		return getMenu(parent.menu, key, 1);
	dbg("&nbsp;getMenuLayer34 findet "+key+" nicht", "#FF0000");
	return null;
		
};


/* CR - Container */

function createCRContainer1() {
	dbg("createCRContainer1()");
	var pmenu = getMenuLayer34("SERVICE.PREMIUMSERVICE");
	html  = '<FORM ACTION="javascript:checkProtocol(document.getElementsByName(\'AuswahlCR1\')[0].options[document.getElementsByName(\'AuswahlCR1\')[0].options.selectedIndex].value)">\n';
	html += '<table width=162 border=0 cellpadding=0 cellspacing=0>\n';
	html += '<TR>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crhllinksoben.gif"></TD>\n';
    html += '<TD CLASS="crhltop">PREMIUM-SERVICE</TD>\n';
    html += '<TD width=8><img src="/urvcommon/images/stat/crhlrechtsoben.gif"></TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
	html += '<TD class="crleft" width=8 background="/urvcommon/images/stat/crlinks.gif"><img src="/urvcommon/images/stat/el_leer.gif"></TD>\n';
	html += '<TD CLASS="crhlbottom" HEIGHT=4><img src="/urvcommon/images/stat/el_leer.gif" height=4></TD>\n';
	html += '<TD class="crright" width=8 background="/urvcommon/images/stat/crrechts.gif"><img src="/urvcommon/images/stat/el_leer.gif"></TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
	html += '<TD class="crleft" width=8 background="/urvcommon/images/stat/crlinks.gif">&nbsp;</TD>\n';
	html += '<TD CLASS="crcopy">Hier können Sie schnell und einfach Ihre Versicherungsverträge verwalten.</TD>\n';
	html += '<TD class="crright" width=8 background="/urvcommon/images/stat/crrechts.gif">&nbsp;</TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
    html += '<TD class="crleft" width=8 background="/urvcommon/images/stat/crlinks.gif">&nbsp;</TD>\n';
	html += '<TD CLASS="crcopy">\n';
	if (pmenu!= null){
		html += '<SELECT NAME="AuswahlCR1" CLASS="crcopy">\n';
		for (var i=1; i<pmenu.menu.length; i++ ) 
			html += '<OPTION value="'+pmenu.menu[i].uri+'">'+trim(pmenu.menu[i].source)+'</OPTION>\n';
		
		html +='</SELECT>\n';
		html +='<span class="input-image"><input type="image" src="/urvcommon/images/stat/doppelpfeil_grau.gif" border=0></span>\n';
	}
	html += '</TD>\n';
	html += '<TD class="crright" width=8 background="/urvcommon/images/stat/crrechts.gif">&nbsp;</TD>\n';
	html += '</TR>\n';
	html += '<TR>\n<TD>\n<IMG SRC="/urvcommon/images/stat/crlinks.gif" HEIGHT=10 WIDTH=8></TD>\n';
	html += '<TD><img src="/urvcommon/images/stat/shim.gif" HEIGHT=1 WIDTH=1></TD>\n';
	html += '<TD><IMG SRC="/urvcommon/images/stat/crrechts.gif" HEIGHT=10 WIDTH=8></TD>\n</TR>\n';
	html += '<TR>\n<TD width=8><img src="/urvcommon/images/stat/crlinksunten.gif"></TD>\n';
	html += '<TD CLASS="crunten"><img src="/urvcommon/images/stat/shim.gif" HEIGHT=1 WIDTH=1></TD>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crrechtsunten.gif"></TD>\n</TR>\n</table>\n</FORM>\n';
	
	parent.CRContainer1 = html;
};

function createCRContainer2() {
	dbg("createCRContainer2()");
	var pmenu = getMenuLayer34("SERVICE.AGENTUR");
	html  = '<FORM ACTION="javascript:checkProtocol(document.getElementsByName(\'AuswahlCR2\')[0].options[document.getElementsByName(\'AuswahlCR2\')[0].options.selectedIndex].value)">\n';
	html += '<table width=162 border=0 cellpadding=0 cellspacing=0 BGCOLOR="#CED3E7">\n';
	html += '<TR>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crhllinksobenblau.gif"></TD>\n';
    html += '<TD CLASS="crhltop"><FONT SIZE=1>&nbsp;</font></TD>\n';
    html += '<TD CLASS="crhltopvlleft"><FONT SIZE=1>&nbsp;</font></TD>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crhlrechtsobenblau.gif"></TD>';
	html += '</TR>\n';
	html += '<TR>\n';
	html += '<TD class="crleft" width=8 background="/urvcommon/images/stat/crlinksblau.gif">&nbsp;</TD>\n';
    html += '<TD CLASS="crcopy" valign=top><B>'+parent.agenturName+'</b></TD>\n';
    html += '<TD CLASS="crvlleft" valign=top>&nbsp;<img src="'+parent.agenturBild+'" width="45" height="45" alt=""/>\n';
	html += '<TD class="crright" width=8 background="/urvcommon/images/stat/crrechtsblau.gif">&nbsp;</TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
    html += '<TD class="crleft" width=8 background="/urvcommon/images/stat/crlinks.gif">&nbsp;</TD>\n';
    html += '<TD CLASS="crcopy" colspan=2 BGCOLOR="#FFFFFF">\n';
	if (pmenu!= null) {
		html += '<SELECT SIZE=1 NAME="AuswahlCR2" CLASS="crcopy">\n';
		for (var i=1; i<pmenu.menu.length; i++ ) 
			html += '<OPTION value="'+pmenu.menu[i].uri+'">'+pmenu.menu[i].source+'</OPTION>\n';
		html += '</SELECT>\n';
        html += '<span class="input-image"><input type="image" src="/urvcommon/images/stat/doppelpfeil_grau.gif" border=0></span>\n';
	}
    html += '</TD>\n';
    html += '<TD class="crright" width=8 background="/urvcommon/images/stat/crrechts.gif">&nbsp;</TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
	html += '<TD><IMG SRC="/urvcommon/images/stat/crlinksblau.gif" HEIGHT=10 WIDTH=8></TD>\n';
	html += '<TD colspan=2></TD>\n';
	html += '<TD><IMG SRC="/urvcommon/images/stat/crrechtsblau.gif" HEIGHT=10 WIDTH=8></TD>\n';
	html += '</TR>\n';
	html += '<TR>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crlinksunten.gif"></TD>\n';
	html += '<TD CLASS="crunten" colspan=2>&nbsp;</TD>\n';
	html += '<TD width=8><img src="/urvcommon/images/stat/crrechtsunten.gif"></TD>\n';
	html += '</TR>\n';
	html += '</table>\n';
	html += '</FORM>\n';

	parent.CRContainer2 = html;
};

function writeCRContainer1() {
	dbg("writeCRContainer1()");
	return;
//	alert(parent.logonStatus);
	if (parent.logonStatus == "0") {
		if (parent.CRContainer1 == null)
			createCRContainer1();

		elem= getElem("CRContainer1",2);
		if (elem!=null)	
			elem.innerHTML = parent.CRContainer1;
	}
}

function writeCRContainer2() {
	dbg("writeCRContainer2()");
	return; // HST	
	if( (parent.aid) && (parent.aid != DEFAULT_AID) ) {
		if (parent.CRContainer2 == null)
			createCRContainer2();

		elem = getElem("CRContainer2",2);
		if (elem!=null)
			elem.innerHTML = parent.CRContainer2;
	}
}

function writeCRContainer() {
	dbg("writeCRContainer()");
	if (!isVKBFrameset(self)) return;
	if (VKB_Container!=null && VKB_Container==0)
	{
		removeContainer();
		return;
	}
	try {
		if (VKB_INIT!="menu") {
			writeCRContainer1();
			writeCRContainer2();
		}
	}
	catch (e) {
		writeCRContainer1();
		writeCRContainer2();
	}
};

function removeContainer()
{
		elem = getElem("rechtsspacer",2);
		if (elem!=null) {
			elem.innerHTML=""; // Leeren
			elem.style.position="absolute"; // Resize
			if (!MS)
				elem.width=0;
		}
		elem = getElem("rechtsmw",2);

		if (elem!=null) {
			elem.innerHTML=""; // Leeren
			elem.style.position="absolute"; // Resize
			if (!MS)
				elem.width=0;
		}
}

/* DHTML-Bibliothek */


function getElem(element,frame) {
//	dbg("&nbsp;getElem("+element+", "+frame+")");

	var Elem = null; //void(0); // ist null das gleiche? HST
	var noFrame = true;
	try {
		if (parent.frames[frame].document)
			noFrame = false;
	}
	catch (e){
	}
	 
	if (noFrame) {
		// frame dose not exist, use local frame instead
		if ((DOM) && (!MS)) {
			if (typeof document.getElementById(element) == "object")
				Elem = document.getElementById(element);
		} else if(MS) {
			if (typeof document.all[element] == "object")
				Elem = document.all[element];
		} else if(NS) {
			if (typeof document[element] == "object")
				Elem = document[element];
		}
	} else {
		if ((DOM) && (!MS)) {
			if (typeof parent.frames[frame].document.getElementById(element) == "object")
				Elem = parent.frames[frame].document.getElementById(element);
		} else if(MS) {
			if (typeof parent.frames[frame].document.all[element] == "object")
				Elem = parent.frames[frame].document.all[element];
		} else if(NS) {
			if (typeof parent.frames[frame].document[element] == "object")
				Elem = parent.frames[frame].document[element];
		}
	}
//	dbg("&nbsp;->getElem("+element+", "+frame+"): "+Elem);
  return Elem;
}


function setElemVis(elmTag,frame,vis) {
	if (parent.lock && parent.lock==1) {
		dbg("setElemVis() locked", "#FF0000");
		return false;
	}
	parent.lock = 1;
	var noFrame = true;
	try {
		if (parent.frames[frame].document)
			noFrame = false;
	}
	catch (e){
	}
	if (noFrame) {
		for (i=0; i < document.all.tags(elmTag).length; i++) {
			obj = document.all.tags(elmTag)[i];
				if (!obj || !obj.offsetParent) 
					continue;
				obj.style.visibility = vis;
		}
	} else {
		for (i=0; i < parent.frames[frame].document.all.tags(elmTag).length; i++) {
			obj = parent.frames[frame].document.all.tags(elmTag)[i];
				if (!obj || !obj.offsetParent) 
					continue;
				obj.style.visibility = vis;
		}
	}
	return true;
}

function hideElem(elmTag,frame) {
	dbg("hideElem("+elmTag+", "+frame+")");
	var success = false;
	do {
	success = setElemVis(elmTag,frame,"hidden");
	} while(!success);
	parent.lock = 0;
}

function showElem(elmTag,frame) {
	dbg("showElem("+elmTag+", "+frame+")");
	var success = false;
	do {
	success = setElemVis(elmTag,frame,"visible");
	} while(!success);
	parent.lock = 0;
}

/********************************************************************
                           WINSOME Funktionen
********************************************************************/

function getMenuLevel() {
  dbg("getMenuLevel()");
  var key = VKB_MenuIndex;
  var index = -1;
  var level = 1;
  while (1) {
    index = key.indexOf(".", index+1);
    if (index < 1 )
      break;
    level ++;
  }
  dbg("->getMenuLevel(): "+level);
  return level;
};

function create_optional_navigation( ) {
  dbg("create_optional_navigation()");
	
  var menu_obj = getMenuLayer34(VKB_MenuIndex);

  if (menu_obj == null)
    return '';
//class="seitennavigation"
  var html = '<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>';
	html += '<td class="navigation2bg" width="1" height="3"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
	html += '<td class="spacer" width="4" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="4" height="1"/></td>';
	html += '<td width="99%"></td>';
	html += '<td class="spacer" width="1" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
	html += '<td class="navigation2bg" width=1 height="3"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
	html += '</tr>';
	
  var level = getMenuLevel();
  var m_1 = menu_obj.menu;

  var key = getMenuIndex(VKB_MenuIndex, 2);

  for (var i_1 = 1; i_1 < m_1.length; i_1 ++) {
    var link = m_1[i_1].source;
    var uri = m_1[i_1].uri;
    var id = m_1[i_1].id;

    var pos = id.indexOf(key + '.');
    var aktiv = "";
    if (((pos > -1) || (key == id)) && level > 2) {
      aktiv = "aktiv";
    }
		html += '<tr>';
		html += '<td class="navigation2bg" width="1" height="18"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
		html += '<td class="spacer" width="1" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
    html += '<td class="navigation3bg" valign="center"><a class="navigation3'+aktiv+'" href="'+ NAVIGATION_ROOT + '/loader.htm?url='+uri+'">' + link + '</a></td>';
    html += '<td class="spacer" width="1" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
		html += '<td class="navigation2bg" width=1 height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
		html += '</tr>';
		
    if (((pos > -1) || (key == id )) && (level > 2)) {
      var m_2 = m_1[i_1].menu;

      var key_2 =  getMenuIndex(VKB_MenuIndex, 3);

      for (var i_2 = 1; i_2 < m_2.length;i_2 ++) {
        var link_2 = m_2[i_2].source  ;
        var uri_2 = m_2[i_2].uri;
        var id_2 = m_2[i_2].id;

        var pos_2 = id_2.indexOf(key_2 + '.');
        aktiv = "";
        if (((pos_2 > -1) || (id_2 == key_2)) && (level > 3)) {
          aktiv = "aktiv";
        }

				html += '<tr>';
				html += '<td class="navigation2bg" width="1" height="18"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
				html += '<td class="spacer" width="1" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
       	html += '<td class="navigation4bg"><table cellspacing=0 cellpadding=0><tr><td>&nbsp;&nbsp;</td><td><a class="navigation4'+aktiv+'" href="' + NAVIGATION_ROOT + '/loader.htm?url=' + uri_2 + '">' + link_2 + '</a></td></tr></table></td>';
				html += '<td class="spacer" width="1" height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
				html += '<td class="navigation2bg" width=1 height="1"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
        html += '</tr>';
      }
    }

 		// Punktierte Trennlinie im Menu Ebene 3
		if (i_1 < m_1.length-1)
 	  {
	    html +=	'<tr>';
			html +=	'<td class="navigation2bg"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
			html += '<td colspan="3"><img src="/urvcommon/images/stat/el_punktlinie_navi.gif" width="157" height="1"/></td>';
			html +=	'<td class="navigation2bg"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="1"/></td>';
			html +=	'</tr>';
		}
  }
  html += '</table><table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>';
	html += '<td class="navigation2bg" rowspan="2"><img src="/urvcommon/images/stat/el_ecke_links14px.gif" width="14" height="3"/></td>';
	html += '<td colspan="3" width="99%"><img src="/urvcommon/images/stat/el_leer.gif" width="1" height="2"/></td>';
	html += '<td class="navigation2bg" rowspan="2" align="right"><img src="/urvcommon/images/stat/el_ecke_rechts14px.gif" width="14" height="3"/></td>';
	html += '</tr><tr class="navigation2bg">';
  html +=	'<td colspan="3" width="99%"><img src="/urvcommon/images/stat/el_leer.gif" height="1"/></td></tr>';
	
	for(i=0; i<15; ++i)	{
   html += '<tr>';
	 html += '<td height="0"><img src="/urvcommon/images/stat/el_leer.gif"/></td>';
	 html += '<td height="0" colspan="3"></td>';
	 html += '<td height="0"><img src="/urvcommon/images/stat/el_leer.gif"/></td>';
	 html += '</tr>';
  }

	html += '</table>';
//	delay();
  return html;
}

// Das ist das Menu Ebene 3 und 4 links im Content
function write_optional_navigation() {
  dbg("write_optional_navigation()");
  if (!isVKBFrameset(self)) return;
  var elem = getElem("li_navi");
  if (elem != null)
    elem.innerHTML = create_optional_navigation();
}


function create_navigation_pfad( ) {
  dbg("create_navigation_pfad()");
  
  var menu_array = parent.menu;
  return create_navigation_pfad_intern(menu_array ,  1, 0);
}

function create_navigation_pfad_intern(menu_array ,  show_level, level ) {
  dbg("create_navigation_pfad_intern()");
  if (menu_array == null)
    return '';

  var html = '';
  var actlevel = getMenuLevel();

  if (level >= actlevel)
    return '';

  var key = getMenuIndex(VKB_MenuIndex, level);

  for (var i = 1; i < menu_array.length; i ++) {
    var id = menu_array[i].id;

    var pos = id.indexOf(key + '.');

    if ((pos > -1) || (id == key)) {
      var link = menu_array[i].source;
      var uri  = menu_array[i].uri;
      var menu = menu_array[i].menu;

      var next_html = create_navigation_pfad_intern(menu,  show_level, level + 1 );

      if ( level >= show_level ) {
        if ( next_html == '') {
         // letzte Stufe
           html += '<a class="pfadaktiv" href="' + NAVIGATION_ROOT + '/loader.htm?url=' + uri + '">' + link + '</a>';
       } else {
           html += '<a class="pfad" href="' + NAVIGATION_ROOT + '/loader.htm?url=' + uri + '">' + link + '</a><img src="/urvcommon/images/stat/el_pfeil_pfad.gif"/>';
        }
      }
      html += next_html;
    }
  }
  return html;
}

function write_navi_pfad() {
  dbg("write_navi_pfad()");
  if (!isVKBFrameset(self)) return;
  var elem = getElem("navi_pfad");
  if (elem != null)
    elem.innerHTML = create_navigation_pfad();
}

// Das ist der Navigationspfad Kranken > Ärzte > Leistungen
function write_navi_pfad_addon() {
  dbg("write_navi_pfad_addon()");
  var elem = getElem("navi_pfad");
  if (elem != null) {
	oldHTML = elem.innerHTML;
    elem.innerHTML = create_navigation_pfad() + oldHTML;
  }
}

function create_navigation_level_2 () {
  dbg("create_navigation_level_2()");
  var menu_array = parent.menu;
  if (menu_array == null)
    return '';
  var html = '';

  var key   = getMenuIndex(VKB_MenuIndex, 0);
  var key_2 = getMenuIndex(VKB_MenuIndex, 1);

  for (var i = 1; i < menu_array.length; i ++) {
    var id = menu_array[i].id;

    var pos = id.indexOf(key + '.');
    var link = menu_array[i].source;

    if ((pos > -1) || (id == key)) {
      var menu_array_2 = menu_array[i].menu;

      for (var i_2 = 1; i_2 < menu_array_2.length; i_2 ++) {
        var id_2   = menu_array_2[i_2].id;
        var pos_2  = id_2.indexOf(key_2 + '.');
        if ((pos_2 > -1) || (key_2 == id_2)) {
          var link_2 = menu_array_2[i_2].source;
          var uri_2  = menu_array_2[i_2].uri;
          html       += '<a class="navigation2" href="' + NAVIGATION_ROOT + '/loader.htm?url=' + uri_2 + '">' + link_2 + '</A>';
        }
      }
    }
  }
  return html;
}

// Das ist der Navi2-Eintrag links unten im breiten Balken in ContentFrame
function write_navi_level_2() {
  dbg("write_navi_level_2()");
  if (!isVKBFrameset(self)) return;
  var elem = getElem("navi_level_2");
  if (elem != null)
    elem.innerHTML = create_navigation_level_2();
}

// Das ist die Navigation, die zurück zu... und weiter zu ... anzeigt
function writeTunnelNavigation() {
	dbg("writeTunnelNavigation()");
	if (parent.menu == null) return;

	var zurueckLink = null, weiterLink = null, i, zurueckName, weiterName;
	var links = document.getElementsByTagName('A');

	for (i = 0; i < links.length; i++) {
		if (links[i].className && links[i].className == "navigation5") {
			if (i != 0 && links[i-1].className && links[i-1].className == "navigation5active") {
				zurueckLink = links[i-1].href;
                                zurueckName = links[i-1].innerHTML;
			} else zurueckLink = null;
			if (i != (links.length-1) && links[i+1].className && links[i+1].className == "navigation5active") {
				weiterLink = links[i+1].href;
                                weiterName = links[i+1].innerHTML;
			} else weiterLink = null;
			break;
		}
	}
	if ( (zurueckLink == null) || (weiterLink == null) ) {
		var menu34 = getMenu(parent.menu,VKB_MenuIndex,2);
		if (!menu34) return; // HST, da sonst der Wechsel des Menu im Kundenclub einen Fehler bringt.
		for (i = 1; i < menu34.menu.length; i++) {
			if (menu34.menu[i].id == VKB_MenuIndex) {
				if (zurueckLink == null && i != 1) {
                                    var j = i - 1;
                                    if (j != 0) {
                                        zurueckLink = menu34.menu[j].uri;
                                        zurueckName = menu34.menu[j].source;
                                    }
                                }
				if (weiterLink == null && i != menu34.menu.length-1) {
                                    var j = i + 1;
                                    if (j != menu34.menu.length) {
                                        weiterLink = menu34.menu[j].uri;
                                        weiterName = menu34.menu[j].source;
                                    }
                                }
				break;
			}
		}
	}
	if (zurueckLink != null) {
		var div_zurueck = getElem("navi_zurueck", null);
		if (div_zurueck != null)
			div_zurueck.innerHTML = "<A href=\"" + NAVIGATION_ROOT + "/loader.htm?url=" + zurueckLink + "\" class=\"servicelink\">&laquo;&nbsp;zur&uuml;ck&nbsp;zu " + zurueckName + "</A>";
	}
	if (weiterLink != null) {
		var div_weiter = getElem("navi_weiter", null);
		if (div_weiter != null)
			div_weiter.innerHTML = "<A href=\"" + NAVIGATION_ROOT + "/loader.htm?url=" + weiterLink + "\" class=\"servicelink\">weiter&nbsp;zu " + weiterName + "&nbsp;&raquo;&nbsp;&nbsp;</A>";
	}
}

// EOF

function plane(x,y)
{
	var i=0;
	elem = getElem("plane",2);
	if (x==-1 && y==-1) //(i=document.all.plane.style.left) == "")
	{
//		self.document.all.plane.innerHTML='<img src="/urvcommon/images/plane.gif"/>'; // x=144
//		self.document.all.plane.style.position="absolute";
		elem.innerHTML='<img src="/urvcommon/images/plane.gif"/>'; // x=144
		elem.style.position="absolute";
//		document.all.plane.style.top=149;
//		document.all.plane.style.left=window.screen.width-170; // 194
		x=window.screen.width-170;//document.all.plane.style.left;
		y=108;//149;//document.all.plane.style.top;
	}
//	if (i.indexOf("px")!=-1)
//		i=i.substr(0, i.length-2); // 199px
	if (x>=(-145))
	{
//		self.document.all.plane.style.left = x;
		elem.style.left = x;
		var hor = 0;//new Date().getTime()%3-1;
//		self.document.all.plane.style.top = y;
		elem.style.top = y;
//		document.all.plane.style.clip="rect(auto "+c+" auto auto)";
		self.setTimeout("plane("+(x-1)+","+(y+hor)+")",1);
	}
}

