	// ******* SCROLLING

	// berechne erst, wie viele inkremente benoetigt sind.
	// Geschwindigkeit = 100 pixel pro sekunde.
	
	// berechne dann die einzelnen Positionen. berechne dann die 

	// position = inkrement[t] * gesamtstrecke
	
	window.offscreenBuffering = true;
	// screen.updateInterval = 50; 
	
	// ******** GLOBALE VARIABLE ***********
	
	
	gSPEED = 600; 
	gStrecke = 0;
	gT = 0;									// das ist die Nummer des akiven Frames
	gInkremente = 0;
	goPosition = new Array(); goPosition.x = 0; goPosition.y = 0;
	goPositionen = new Array();				// hier stehen dann alle vorberechneten Werte drin
	gAktiv = false;
	
	
	
	function startAnim(x)
	{
		
			
		window.clearInterval(gAktiv);
		
		// alert(document.body);
		
		if (document.body)
		{
		 	goPosition.x = document.body.scrollLeft;
		}
		else
		{
			goPosition.x = 0; 
		}
		
		// (document.body && document.body.scrollTop) y=document.body.scrollTop;
		
		
		ziel = new Array();
		ziel.x = x;
		
		// alert(ziel.x);

		oRichtung = new Array(); // das ist der Richtungsvektor.
		oRichtung.x = ziel.x - goPosition.x;

		
	
		// alert("oRichtung.x: " + oRichtung.x);

		/*if (oRichtung.x < 0) 
		{
		oRichtung.x -= 100;
		}
		else
		{
		oRichtung.x += 100;		
		};*/ 
		
		gStrecke = Math.sqrt((oRichtung.x) * (oRichtung.x));
				
		oRichtung.x = oRichtung.x / gStrecke;
		
		gInkremente = (gStrecke / gSPEED) * 12; // 300 pixel pro sekunde, 25 frames pro sekunde
		gInkremente = Math.round(gInkremente);
		
		// alert(gInkremente);
		
		if (gInkremente > 0)
		{
			goPositionen = berechnePositionen(oRichtung, gInkremente);
			gAktiv  = window.setInterval("bewege()",12);		
		}
	}
	
	

	function berechnePositionen(oRichtung, inkremente)
	{
	 oPositionen = new Array();
	 // oRichtung ist ein 2D Vektor-Array.
		for (i=0; i < inkremente; i++)
		{
			t = Math.sin((i/inkremente) * (Math.PI/2));
			
			oPositionen[i] = new Array();
			oPositionen[i].x = oRichtung.x * t;
			// oPositionen[i].y = oRichtung.y * t;
		}

	 return oPositionen;
	}
	
	
	function bewege()
	{
		if (gT < goPositionen.length )
		{
			nx = goPosition.x + goPositionen[gT].x * gStrecke;
			y = document.body.scrollTop;
			x = document.body.scrollLeft;
			// dx = nx - x;
			window.scrollTo(nx,y);

			gT++;
		}
		else
		{
		 gT = 0;
		 window.clearInterval(gAktiv);
		}
	}
	


// ******* NAVIGATION

 var oNavigation;

 oNavigation = new Array("");
 // Hier ist gespeichert, welche Elemente sichtbar angezeigt werden, und in welcher Reihenfolge.


function isInArray(oArray, needle)
{
	for (i=0; i< oArray.length; i++)
	{
		if (needle == oArray[i]) return true;
	}
	return false;
}


function posInArray(oArray, needle)
{
	for (i=0; i< oArray.length; i++)
	{
		if (needle == oArray[i]) return i;
	}
	return false;
}


function sichtbar(element, sichtbar, links)
{
	 // alert(element);
	 var objekt = document.getElementById('ebene.' + element);
	 if (sichtbar == true) {
	 	sichtbar = 'visible';
	 	objekt2 = document.getElementById('titlediv');
	 	objekt2.style.width= (links + screen.availWidth *1 - 200) * 1 + 'px';
	 	} else {sichtbar = 'hidden'; links = -500} 
	 objekt.style.visibility = sichtbar;

/*	 if (sichtbar == true) 
	 { // blinker fuer safari.
	 objekt.style.visibility="hidden";
	 objekt.style.visibility="visible";} 
*/
	 // Element aus dem Sichtfeld schieben.

	 

	 objekt.style.left = links + "px";
	 objekt.style.top = 10 + "px";

	 if (sichtbar == 'hidden') { objekt.parentNode.removeChild(objekt);} 

}



// ****************************** HAUPTFUNKTION ******************************

function main()
{
	objekt2 = document.getElementById('titlediv');
	objekt2.style.width = (screen.availWidth) * 1 + 'px';
	objekt2.style.visibility = 'visible'; 

	controller('','0','');

}


function controller(absender, ziel, absenderNr)
{
 	
 	var oFortschritt;
 	
 	if (!oNavigation) {oNavigation = new Array('')};
 	
	if(isInArray(oNavigation, ziel))
	{
	 // Falls Element schon sichtbar ist, dann braucht man nur noch hinfahren.
	 
	 position = posInArray(oNavigation, ziel)	 
	 startAnim(0 + (position-1) * 350);
	 // return;
	} else
	{
	  if (posInArray(oNavigation,absender) != oNavigation.length-1)
	  {

		// Einiges muss noch geloescht werden, weil die gewuenschte
		// Position schon von einem anderen Element belegt ist.
		
	    // alert('hier muss also einiges geloescht werden.');
	   
	    var anfang = posInArray(oNavigation,absender);
	  	var laenge = oNavigation.length;
	  
	  	for(var i = laenge; i > anfang+1; i--)
	  	{
	  		sichtbar(oNavigation[i-1],false);
	  		oNavigation.pop();
	  	}
	   
	  }
	  
	  // Wenn das Element nicht schon geladen und unsichtbar vorhanden ist:
	  // Versuchen, das Element aus der xml-Datei zu laden
	  
	  if (!document.getElementById('ebene.' + ziel))
	  { 
	  	// Falls es das Element nicht schon gibt, also
	  	// Falls es nicht schon einmal geladen und dann unsichtbar 
	  	// gemacht worden ist, das Element neu erstellen und 
	  	// aus der XML-Datei laden.
		
	  		
	  	LadeInhalt(ziel,absenderNr,absender);
	  	
	  } else { showAndScroll(ziel);	}
	}
}

function showAndScroll(ziel)
{
	  // Element finden & anfuegen
	  
	  // alert(ziel);
	  if (document.getElementById('ebene.' + ziel))
	  {
	  		// Elementposition bestimmen = oNavigation.length
	  	var position = oNavigation.length-1;
	  		
	  		// Element sichtbar machen
		sichtbar(ziel,true, 200 + position * 350);
	  	
	  		// zur richtigen Stelle hinfahren.	  	

	  		// ***** Hier die Funktion, die zu der richtigen Stelle hinfaehrt!

	  	startAnim(0 + (position) * 350);

	  	oNavigation.push(ziel);
	  } else
	  {
	  	alert("Verweis nicht gefunden");
	  }
}


function LadeInhalt(idEbene,absenderNr, absender)
{
	// *** 1. div mit gewuenschter id erstellen und im Hauptdokument einhaengen


	// attibut mit id erzeugen, damit die neue Ebene separat mit Namen angesprochen werden kann. 
	var attr_id = document.createAttribute("id");
	attr_id.nodeValue = "ebene." + idEbene;

	// var attr_class = document.createAttribute("class");
	// attr_class.nodeValue = "ebene";

	var attr_style = document.createAttribute("style");
	attr_style.nodeValue = "visibility:hidden;";

 
 	var newDiv = document.createElement("div");
	newDiv.setAttributeNode(attr_id);
	// newDiv.setAttributeNode(attr_class);
	
	newDiv.className = "ebene";
	
	// newDiv.setAttributeNode(attr_style);
	

	// Eltern-Element herholen
	var objekt = document.getElementById('id_body');

	// Ebene mit Attribut und damit mit eigener ID im Elternelement einhaengen
	objekt.appendChild(newDiv);
	
	
	// *** 2. php aufrufen mit der ID des neu zu erstellenden divs
	
    // alert('lade inhalt. idEbene=' + idEbene);
	
	HO_ApplyOverlay("overlay.php" + "?id=" + idEbene + "&absenderNr=" + absenderNr, absender, idEbene);
	
	// sichtbar machen - hinscrollen.
	
	if (absenderNr == "") document.getElementById('startdiv').style.visibility = "hidden";
	
}

var oFortschrittImage = new Image(32,32); 
oFortschrittImage.src="img/walking.gif"; 

