/**
*	@author Tobias Strunz
*	@version 1.0
*	@date 25.01.2010
*
*	@short Content Slider auf Prototype Basis
*
*	Das Script ist dazu da, verschiedene Contentelemente per Klick zu sliden.
*	Dabei wird der nur ein Ausschnitt angezeigt. 
*	Es wird immer so geslided, dass das nächste Element oben bündig ist.
*	Es wird nur soweit geslided, dass das letzte Element ganz im Sichtbereich ist.	
*
**/

// Variablendeklarationen
var currentPosition 		= 0;			//aktuelle Position		
var	boxes 					= null;			//array aller Inhaltsboxen		
var	scrollBoxHeight 		= null;			//höhe der zu scrollenden Box
var	scrollBoxViewHeight		= null;			//höhe des sichbaren Ausschnittes
var	upBtn					= null;			//Button zum Hochscrollen
var	downBtn					= null;			//Button zum Runterscrollen
var scrollBox 				= null;			//Box die gescrollt wird
var maxScrollPosition		= 0;		 //bis zu dieser Position wird gescrollt
var offset 					= -1;			//Anzahl der Elemente die gescrollt werden (negativ für invertscroll)


document.observe("dom:loaded", function(){	

	// Variableninitialisierungen
	boxes 					= $("scrollContainer").childElements();
	scrollBoxHeight 		= $("scrollContainer").getHeight();
	scrollBoxViewHeight		= $("scrollContainerView").getHeight();
	upBtn					= $("scrollButtonTop");
	downBtn					= $("scrollButtonBottom");
	scrollBox 				= $("scrollContainer");	
	maxScrollRange			= scrollBoxHeight - scrollBoxViewHeight + 10;
	
	
	/*
	*
	*	Im folgenden wird die Maximale Scrollposition ermittelt, indem die
	*	Höhen der Inhaltselemente rückwärts addiert werden und mit der
	*	scrollBoxHeight abgeglichen wird.
	*
	*/
	var bottomOffset = 0;
	
	for(var i = boxes.length-1; i > 0; i--){
		bottomOffset += boxes[i].getHeight();
		if( bottomOffset < scrollBoxViewHeight ){
			maxScrollPosition = i;
		}
	}
	
	//Buttons werden scharf geschaltet
	upBtn.observe("click", function(){
		scroll(offset)
	});	
	downBtn.observe("click", function(){
		scroll(-offset)
	});	
});

/*
*
*	Diese Funktion ist für das Scrollen des Inhalts zuständig
*
*/
function scroll(direction){
	var toPosition 	= currentPosition + direction;
	
	//Grenze nach oben setzen
	if( toPosition < 0 )
			toPosition = 0;
	
	//Grenze nach unten setzen	
	if(toPosition >= maxScrollPosition + 1)
		    toPosition = maxScrollPosition + 1;
	
	var offset 	= boxes[toPosition].positionedOffset();
	new Effect.Move(scrollBox, {x:0, y: -offset['top'], mode: 'absolute'});
	
	currentPosition = toPosition;
}

