// JavaScript Document

// Scroller Kategorien
ScrollBase = new Array();

//scrollcount: Nummer des Sliders, damit auch mehrere Slider parallel funktionieren
//scrollsteps: Elemente rücken mit einem Step
//scrollelemwidth: Größe eines einzelnen Elementes im Slider (inkl. Border & Margin)
//viewinblock: wie viele Blöcke sind im Slider gleichzeitig sichtbar
//scrollspeed: mit Welcher Geschwindigkeit läuft der Scroller (z.B. 0.1 bis 2.5)
//scrollelemtags: Welchen HTML-Tag haben die Elemnte im Slider
//autoscroll: ist autoscroll an/aus
//atoscrollsteps: wie viele elemente werden bei autoscroll auf einmal gescrollt
//autoscrollspedd: mit Welcher Geschwindigkeit läuft der Autoscroller (z.B. 0.1 bis 2.5)
//autoscrolltime: zeit in millisekunden für das autoscrolling

function ScrollInit(scrollcount,scrollsteps,scrollelemwidth,viewinscrollblock,scrollspeed,scrollelemtags,autoscroll,autoscrollsteps,autoscrollspeed,autoscrolltime){
	
	if(document.getElementById("slider_all_"+scrollcount) && document.getElementById("slider_cont_"+scrollcount)){ // existiert der Slider?
		
		// ScrollParameter setzen
		ScrollBase[scrollcount] = new Array();
		ScrollBase[scrollcount]["scrollrest"] = 0; // wieviel Elemente sind noch zu scrollen?
		ScrollBase[scrollcount]["scrollweg"] = 0; // wieviel Elemente sind schon weggescrollt?
		ScrollBase[scrollcount]["scrollelemanzahl"] = 0; // weiviel Elemente in Slider sind es insgesamt
		ScrollBase[scrollcount]["scrollpos"] = 0; // An welcher Scrollposition (in Steps) ist der Slider aktuell
		ScrollBase[scrollcount]["scrollstepact"] = 0;
		ScrollBase[scrollcount]["scrollsteps"] = scrollsteps; 
		ScrollBase[scrollcount]["scrollelemwidth"] = scrollelemwidth; 
		ScrollBase[scrollcount]["scrollspeed"] = scrollspeed; 
		ScrollBase[scrollcount]["viewinscrollblock"] = viewinscrollblock;
		ScrollBase[scrollcount]["autoscroll"] = autoscroll;
		ScrollBase[scrollcount]["autoscrollsteps"] = autoscrollsteps;
		ScrollBase[scrollcount]["autoscrollspeed"] = autoscrollspeed;
		ScrollBase[scrollcount]["autoscrolltime"] = autoscrolltime;
		ScrollBase[scrollcount]["autoscrollactive"] = "";
		
		//Diverse Elemente im Slider
		ScrollBase[scrollcount]["butleft"] = document.getElementById("slider_but_left_"+scrollcount);
		ScrollBase[scrollcount]["butleftoff"] = document.getElementById("slider_but_left_off_"+scrollcount);
		ScrollBase[scrollcount]["butright"] = document.getElementById("slider_but_right_"+scrollcount);
		ScrollBase[scrollcount]["butrightoff"] = document.getElementById("slider_but_right_off_"+scrollcount);
		
		//Elemente im Slider zählen
		var z=0;
		var elem=document.getElementsByTagName(scrollelemtags);
		for(var i=0;i<elem.length;i++){
			if(elem[i].className.indexOf("sliderelem_"+scrollcount)!=-1){
				z++;
				if(ScrollBase[scrollcount]["autoscroll"] == 1){ // Wenn Autoscroll dann Aktionen für stoppen und weiterlaufen auf Elemente setzen
					elem[i].onmouseover = function(){
						window.clearInterval(ScrollBase[scrollcount]["autoscrollactive"]);
					}
					elem[i].onmouseout = function(){
						ScrollBase[scrollcount]["autoscrollactive"] = window.setInterval("SliderAutoScroll("+scrollcount+")", ScrollBase[scrollcount]["autoscrolltime"]);
					}
				}
			}
		}
		ScrollBase[scrollcount]["scrollelemanzahl"] = z;
		//alert(ScrollBase[scrollcount]["scrollelemanzahl"]);
		
		//Funktionen auf Buttons setzen
		ScrollBase[scrollcount]["butleft"].onclick = function(){
			SliderScrollNow(scrollcount,"left");
		}
		ScrollBase[scrollcount]["butright"].onclick = function(){
			SliderScrollNow(scrollcount,"right");
		}
		
		if(ScrollBase[scrollcount]["autoscroll"] == 1){ // Wenn Autoscroll dann Aktionen für stoppen und weiterlaufen auf Pfeile setzen
			ScrollBase[scrollcount]["butleft"].onmouseover = function(){
				window.clearInterval(ScrollBase[scrollcount]["autoscrollactive"]);
			}
			ScrollBase[scrollcount]["butright"].onmouseover = function(){
				window.clearInterval(ScrollBase[scrollcount]["autoscrollactive"]);
			}
			ScrollBase[scrollcount]["butleft"].onmouseout = function(){
				ScrollBase[scrollcount]["autoscrollactive"] = window.setInterval("SliderAutoScroll("+scrollcount+")", ScrollBase[scrollcount]["autoscrolltime"]);
			}
			ScrollBase[scrollcount]["butright"].onmouseout = function(){
				ScrollBase[scrollcount]["autoscrollactive"] = window.setInterval("SliderAutoScroll("+scrollcount+")", ScrollBase[scrollcount]["autoscrolltime"]);
			}
		}
		
		//Anfangsstatus checken
		if(ScrollBase[scrollcount]["scrollelemanzahl"] <= ScrollBase[scrollcount]["viewinscrollblock"]){ // Alle Pfeile aus wenn kein scrolling
			ScrollBase[scrollcount]["butleft"].style.display = "none"; //linker Button aus
			ScrollBase[scrollcount]["butleftoff"].style.display = "block"; //linker inaktiver Button an
			ScrollBase[scrollcount]["butright"].style.display = "none"; //rechter Buttons aus
			ScrollBase[scrollcount]["butrightoff"].style.display = "block"; //rechter inaktiver Button an
		}else{
			ScrollBase[scrollcount]["butleft"].style.display = "block"; //linker Button aus
			ScrollBase[scrollcount]["butleftoff"].style.display = "none"; //linker inaktiver Button an
			ScrollBase[scrollcount]["butright"].style.display = "block"; //rechter Buttons an
			ScrollBase[scrollcount]["butrightoff"].style.display = "none"; //rechter inaktiver Button aus
		}
		
		
		//automatiches Scrollen setzen
		if(ScrollBase[scrollcount]["autoscroll"] == 1){
			ScrollBase[scrollcount]["autoscrollactive"] = window.setInterval("SliderAutoScroll("+scrollcount+")", ScrollBase[scrollcount]["autoscrolltime"]);
			//alert('autoscroll:yes');
		}
		
	}
}
function SliderScrollNow(scrollcount,scrolldirection){
	
	//alert(ScrollBase[0]["scrollwidth"]);
	
	if(scrolldirection == 'right'){
		
		// Den noch zu scrollenden Rest ermitteln	
		ScrollBase[scrollcount]["scrollrest"] = ScrollBase[scrollcount]["scrollelemanzahl"] - ( ScrollBase[scrollcount]["viewinscrollblock"] + ScrollBase[scrollcount]["scrollweg"] );
		
		// Muss überhaupt noch gescrollt werden?
		if(ScrollBase[scrollcount]["scrollrest"] > 0){
			
			// Scrollposition errechnen
			if(ScrollBase[scrollcount]["scrollrest"] >= ScrollBase[scrollcount]["scrollsteps"]){ // Wenn die noch zu scrollenden Elemente genausiviele oder mehr als  im Scroller sichtbare Elemente sind
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] - (ScrollBase[scrollcount]["scrollsteps"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'+',ScrollBase[scrollcount]["scrollsteps"]);
			}else{ // Wenn die noch zu scrollenden Elemente weniger als im Scroller sichtbare Elemente sind
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] - (ScrollBase[scrollcount]["scrollrest"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'+',ScrollBase[scrollcount]["scrollrest"]);
			}
			
			new Effect.Morph('slider_cont_'+scrollcount, {
			  style: 'left:'+ScrollBase[scrollcount]["scrollpos"]+'px', // CSS Properties
			  duration: ScrollBase[scrollcount]["scrollspeed"] // Core Effect properties
			});
		}
	}
	
	if(scrolldirection == 'left'){
		
		if(ScrollBase[scrollcount]["scrollweg"] > 0){
			
			if(ScrollBase[scrollcount]["scrollweg"] >= ScrollBase[scrollcount]["scrollsteps"]){
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] + (ScrollBase[scrollcount]["scrollsteps"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'-',ScrollBase[scrollcount]["scrollsteps"]);
			}else{
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] + (ScrollBase[scrollcount]["scrollweg"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'-',ScrollBase[scrollcount]["scrollweg"]);
			}
			
			new Effect.Morph('slider_cont_'+scrollcount, {
			  style: 'left:'+ScrollBase[scrollcount]["scrollpos"]+'px', // CSS Properties
			  duration: ScrollBase[scrollcount]["scrollspeed"] // Core Effect properties
			});
		}
		
	}
	
	//Buttons setzen
	SetArrows(scrollcount);

}

function SetScrollWeg(scrollcount,operation,anzahl){
	if (operation == "+") ScrollBase[scrollcount]["scrollweg"] = ScrollBase[scrollcount]["scrollweg"] + anzahl;
	if (operation == "-") ScrollBase[scrollcount]["scrollweg"] = ScrollBase[scrollcount]["scrollweg"] - anzahl;
}

function SetArrows(scrollcount){
	// Button setzen links
	
	CheckScrollEnd = ScrollBase[scrollcount]["scrollelemanzahl"] - ( ScrollBase[scrollcount]["viewinscrollblock"] + ScrollBase[scrollcount]["scrollweg"] )// Kann noch nach rechts gescrollt werden?
	
	if(CheckScrollEnd > 0){
		ScrollBase[scrollcount]["butright"].style.display = "block"; 
		ScrollBase[scrollcount]["butrightoff"].style.display = "none"; 
	}else{
		ScrollBase[scrollcount]["butright"].style.display = "none"; 
		ScrollBase[scrollcount]["butrightoff"].style.display = "block";
	}
	
	CheckScrollBegin = ScrollBase[scrollcount]["scrollweg"];
	
	if(CheckScrollBegin > 0){
		ScrollBase[scrollcount]["butleft"].style.display = "block"; 
		ScrollBase[scrollcount]["butleftoff"].style.display = "none"; 
	}else{
		ScrollBase[scrollcount]["butleft"].style.display = "none"; 
		ScrollBase[scrollcount]["butleftoff"].style.display = "block";
	}
	
}

function SliderAutoScroll(scrollcount){
	
	//alert('autoscroll:yes');
	
	CheckScrollEnd = ScrollBase[scrollcount]["scrollelemanzahl"] - ( ScrollBase[scrollcount]["viewinscrollblock"] + ScrollBase[scrollcount]["scrollweg"] )// Kann noch nach rechts gescrollt werden?
	
	if(CheckScrollEnd == 0){ // Wenn Slider am Ende wieder an Anfang setzen
		
		// Scroller zurücksetzen
		ScrollBase[scrollcount]["scrollstepact"] = 0; 
		ScrollBase[scrollcount]["scrollrest"] = 0;
		ScrollBase[scrollcount]["scrollpos"] = 0;
		ScrollBase[scrollcount]["scrollweg"] = 0;
		
		new Effect.Morph('slider_cont_'+scrollcount, {
			  style: 'left:0px', // CSS Properties
			  duration: ScrollBase[scrollcount]["autoscrollspeed"] // Core Effect properties
		});
		
	}else{ // wenn Slider noch nicht am Ende
	
		ScrollBase[scrollcount]["scrollrest"] = ScrollBase[scrollcount]["scrollelemanzahl"] - ( ScrollBase[scrollcount]["viewinscrollblock"] + ScrollBase[scrollcount]["scrollweg"] );
		
		if(ScrollBase[scrollcount]["scrollrest"] > 0){
			
			// Scrollposition errechnen
			if(ScrollBase[scrollcount]["scrollrest"] >= ScrollBase[scrollcount]["autoscrollsteps"]){ // Wenn die noch zu scrollenden Elemente genausiviele oder mehr als  im Scroller sichtbare Elemente sind
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] - (ScrollBase[scrollcount]["autoscrollsteps"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'+',ScrollBase[scrollcount]["autoscrollsteps"]);
			}else{ // Wenn die noch zu scrollenden Elemente weniger als im Scroller sichtbare Elemente sind
				ScrollBase[scrollcount]["scrollpos"] = ScrollBase[scrollcount]["scrollpos"] - (ScrollBase[scrollcount]["scrollrest"] * ScrollBase[scrollcount]["scrollelemwidth"]);
				SetScrollWeg(scrollcount,'+',ScrollBase[scrollcount]["scrollrest"]);
			}
			
			new Effect.Morph('slider_cont_'+scrollcount, {
			  style: 'left:'+ScrollBase[scrollcount]["scrollpos"]+'px', // CSS Properties
			  duration: ScrollBase[scrollcount]["autoscrollspeed"] // Core Effect properties
			});
		}
		
	}
	
	//Buttons setzen
	SetArrows(scrollcount);
	
}

