/* static-global Variablen für fade() */
var BgCl 	= "rgb(7,128,180)";	//FIXME: get this from CSS
var BoCl 	= "rgb(7,128,180)";	//FIXME: get this from CSS
var hlBgCl 	= "rgb(51,119,170)";	//FIXME: get this from CSS
var hlBoCl 	= "rgb(17,68,119)";	//FIXME: get this from CSS
var init_done 	= 0 ;
var enableFading = false ;
var hexColor 	= false ;
var active	= 100;

/* vorberitung der document-Attribute + Variablen */
function init(){
  /* fading nur bei MSIE und Gecko */
	if ( navigator.userAgent.indexOf("MSIE")>0 )
		enableFading=true;
	if ( navigator.userAgent.indexOf("Gecko")>0 ) 
		enableFading=true;
	//Konqueror says it is 'like Gecko'
	if ( navigator.userAgent.indexOf("Konqueror")>0 )
		enableFading=false;
	//opera, too ?
	if ( navigator.userAgent.indexOf("Opera")>0 )
		enableFading=false;

	if (enableFading)
		// Can You see the Problem ?
		try{
			document.getElementsByTagName("body")[0].onmouseover=new Function("active=50;");
		}
		catch(stupidError){;}
		
	// Schleife über alle Tabellenzellen
	for(var i=0; document.getElementsByTagName("td")[i+1]; i++ ) {
		var MyItem = document.getElementsByTagName("td")[i]
		// id für Tabellenzellen mit inhalt nach inhalt zuweisen
		if ( MyItem.firstChild &&
			MyItem.firstChild.firstChild &&
			MyItem.firstChild.firstChild.nodeValue ) {
			id = escape(MyItem.firstChild.firstChild.nodeValue) ;
			MyItem.id = id ;
			if ( MyItem.className == "menu" ||
			   	 MyItem.className == "submenu" ){
				// Setzen der onMouseOver + onMouseOut Eventhandler
				MyItem.onmouseover=new Function("menumausda(\""+id+"\")");
				MyItem.onmouseout=new Function("menumausweg(\""+id+"\")");
 				// explizites setzten der Properties, damit man diese wieder auslesen kann
				MyItem.style.backgroundColor = BgCl ;
				MyItem.style.borderColor = BoCl ;
				 // eigenes Attribut "BgTargetColor" + "BoTargetColor" zu Tabellenzellennodes hinzufügen
				 // und auf aktuellen wert der originaleigenschaften setzten
				 MyItem.setAttribute("BgTargetColor",MyItem.style.backgroundColor);
				 MyItem.setAttribute("BoTargetColor",MyItem.style.borderColor);
				 MyItem.setAttribute("RunningFading","0");
				} // if class==menu
			} // if firstChild.firstChild.nodeValue
		} // for
	init_done = 1 ;
	}

function fade(){
	// solange init() aufrufen, bis diese einmal erfolgreich ausgeführt wurde
	if ( init_done == 0 ) init() ;
	if ( enableFading != true ) return ;
	// if ( FadeItem == 0 ) return ;
	if ( active-- < 1 ) return ;
	
	// Schleife über alle Tabellenzellen
	for(var i=0; document.getElementsByTagName("td")[i+1]; i++ ){
			var MyItem = document.getElementsByTagName("td")[i]
			if ( MyItem.id &&
			   	 ( MyItem.getAttribute("RunningFading") == "1" ) &&
			   	 (MyItem.className == "menu" ||
			   	 MyItem.className == "submenu" )){
				 
	
	/* Farben auslesen */	
	var FarbeJetztBg= new CSSRGB( MyItem.style.backgroundColor ) ;
	var FarbeJetztBo= new CSSRGB( MyItem.style.borderColor ) ;
	var FarbeNeuBg	= new CSSRGB( MyItem.getAttribute("BgTargetColor"));
	var FarbeNeuBo	= new CSSRGB( MyItem.getAttribute("BoTargetColor"));
	/* Unterschied zwischen Soll und ist */
	DiffRotBg 	= FarbeJetztBg.Rot 	- FarbeNeuBg.Rot ;
	DiffRotBo 	= FarbeJetztBo.Rot 	- FarbeNeuBo.Rot ;
	DiffGruenBg 	= FarbeJetztBg.Gruen 	- FarbeNeuBg.Gruen ;
	DiffGruenBo 	= FarbeJetztBo.Gruen 	- FarbeNeuBo.Gruen ;
	DiffBlauBg 	= FarbeJetztBg.Blau	- FarbeNeuBg.Blau ;
	DiffBlauBo 	= FarbeJetztBo.Blau	- FarbeNeuBo.Blau ;

	// ist Fading schon abgeschlossen ?
	if ( (Math.abs(DiffRotBg) + Math.abs(DiffGruenBg) + Math.abs(DiffBlauBg) + 
	   	  Math.abs(DiffRotBo) + Math.abs(DiffGruenBo) + Math.abs(DiffBlauBo) ) < 1  ){
		  MyItem.setAttribute("RunningFading", "0");
		  break;
		}
	
	/* berechnung und setzten der neuen Attrbute */
	if (Math.abs(DiffRotBo) > 0) 
		FarbeJetztBo.Rot = FarbeJetztBo.Rot - delta(DiffRotBo);
	if (Math.abs(DiffGruenBo) > 0)
		FarbeJetztBo.Gruen= FarbeJetztBo.Gruen - delta(DiffGruenBo);
	if (Math.abs(DiffBlauBo) > 0)
		FarbeJetztBo.Blau = FarbeJetztBo.Blau - delta(DiffBlauBo) ;
	setBo(MyItem, FarbeJetztBo.Rot, FarbeJetztBo.Gruen, FarbeJetztBo.Blau);
	
	if (Math.abs(DiffRotBg) > 0) 
		FarbeJetztBg.Rot	= FarbeJetztBg.Rot - delta(DiffRotBg);
	if (Math.abs(DiffGruenBg) > 0)
		FarbeJetztBg.Gruen= FarbeJetztBg.Gruen - delta(DiffGruenBg);
	if (Math.abs(DiffBlauBg) > 0)
		FarbeJetztBg.Blau = FarbeJetztBg.Blau - delta(DiffBlauBg) ;
	setBG(MyItem, FarbeJetztBg.Rot, FarbeJetztBg.Gruen, FarbeJetztBg.Blau);
	
	} // if id && class=menu 
	} // for jede <td>
	}
/* setzt die Hintergrundfarbe von FadeItem */
function setBG(MyItem, Rot, Gruen, Blau){
	/*if ( hexColor )
		aktuelleCSSColor = "#" + Rot + Gruen + Blau ;
	else */
	aktuelleCSSColor = "rgb("+ Rot +","+ Gruen +","+ Blau +")"; 
	MyItem.style.backgroundColor = aktuelleCSSColor ;
	}
/* setzt die BorderColor von FadeItem */
function setBo(MyItem, Rot, Gruen, Blau){
	/*if ( hexColor )
		aktuelleCSSColor = "#" + Rot + Gruen + Blau ;
	else*/
	aktuelleCSSColor = "rgb("+ Rot +","+ Gruen +","+ Blau +")"; 
	MyItem.style.borderColor = aktuelleCSSColor ;
	}
/* Berechnet die Änderung in einem Fadingschritt */
function delta(Diff){
	if (Diff > 0)
		if (Diff > 10)
			return 2;
		else
			return 1 ;
	else 
		if (Diff < -10)
			return -2;
		else
			return -1 ;
	}
/* Objekt mit Attributen für Farbanteile */
function CSSRGB(CSSColor){
	MaskeDez = /rgb\( *(\d+), *(\d+), *(\d+)\)/;
	if ( MaskeDez.test(CSSColor) ){
		MaskeDez.exec(CSSColor);
		this.Rot 	= RegExp.$1;
		this.Gruen 	= RegExp.$2;
		this.Blau 	= RegExp.$3;
		return;
		}
	MaskeHex = /#.*(\w\w)(\w\w)(\w\w).*/;
	if ( MaskeHex.test(CSSColor) ){
		MaskeHex.exec(CSSColor);
		this.Rot 	= hex2dez(RegExp.$1);
		this.Gruen 	= hex2dez(RegExp.$2);
		this.Blau 	= hex2dez(RegExp.$3);
		hexColor 	= true ;
		return;
		}
	}
function hex2dez( hexvalue ){
	if ( hexvalue.length < 2 ) return ziffer(hexvalue.charAt(0)) ;
	else return ziffer(hexvalue.charAt(0))+(16*hex2dez(hexvalue.substring(1,hexvalue.length)));
	}
function ziffer( hexziffer){
	if ( hexziffer < 10 )
		return hexziffer;
	switch( hexziffer.toUpperCase() ){
		case 'A': return 10 ;
		case 'B': return 11 ;
		case 'C': return 12 ;
		case 'D': return 13 ;
		case 'E': return 14 ;
		case 'F': return 15 ;
		}
	}
		
/* onMouseOut */
function menumausweg(ItemID) {
	var myItem =  document.getElementById(ItemID);
	if (enableFading) {
		myItem.setAttribute("BgTargetColor",BgCl);
		myItem.setAttribute("BoTargetColor",BoCl);
		myItem.setAttribute("RunningFading", "1");
		}
	else{
		myItem.style.backgroundColor= BgCl ;
		myItem.style.borderColor= BoCl ;
		}
	}

/* onMouseOver */
function menumausda(ItemID) {
	var myItem =  document.getElementById(ItemID);
	if (enableFading) {
		myItem.setAttribute("BgTargetColor",hlBgCl);
		myItem.setAttribute("BoTargetColor",hlBoCl);
		myItem.setAttribute("RunningFading", "1");
		}
	else{
		myItem.style.backgroundColor= hlBgCl ;
		myItem.style.borderColor= hlBoCl ;
		}
	}

/* fokosiert den Link, dessen Ziel im Frame ,mitte' offen ist */
var lastFocus ; // Url der letzten fokusierten Links
function focusAcitveLink() {
	try {								// may be overkill
		if (  parent.mitte.location &&				// may be overkill
			(String(parent.mitte.location) != lastFocus)) {	// If new Page in mitte
			for(var i=0; i < document.links.length; i++ ) {
				if (document.links[i].focus &&	// may be overkill
					String(document.links[i]) == String(parent.mitte.location)){
					document.links[i].focus();
					lastFocus = String(parent.mitte.location);
		                        } // if
				} // for
			} // If new Page in mitte
		} // try
	catch(myError) {}
	}
	
/* startet Aktionen in regelmäßigen Abständen */
var fALcounter 	= 0 ; // focusActiveLink() counter
var fBgcounter 	= 0 ; // fade() counter
function timer(){

	// zeitpunkt des wiederaufrufs in ms
	window.setTimeout("timer()", 50);

	// focusActiveLink() timer
	if ( fALcounter >= 100 ){
		focusAcitveLink();
		fALcounter = 0 ;
		}
	fALcounter++;

	// fadeBg() timer
	if ( fBgcounter >= 1 ){
		fBgcounter = 0;
		fade();
		}
	fBgcounter++;
	}


// starte timer() in 1 sekunde
window.setTimeout("timer()", 1000);

