// JavaScript Document

// Slideer Kategorien
SlideBase = new Array();
/* Den Buttons können weitere Klassen hinzugefügt werden, die jetzigen müssen aber erhalten bleiben */
var ButElemLeft = '<a href="javascript:;" class="sliderbut_left"><span>&nbsp;</span></a>';
var ButElemLeftOff = '<span class="sliderbut_leftoff"><span>&nbsp;</span></span>';
var ButElemRight = '<a href="javascript:;" class="sliderbut_right"><span>&nbsp;</span></a>';
var ButElemRightOff = '<span class="sliderbut_rightoff"><span>&nbsp;</span></span>';
         
//slideid: ID des Sliders, damit auch mehrere Slider parallel funktionieren
//slidesteps: Elemente rücken mit einem Step
//slideelemwidth: Größe eines einzelnen Elementes im Slider (inkl. Border & Margin)
//viewinblock: wie viele Blöcke sind im Slider gleichzeitig sichtbar
//slidespeed: mit Welcher Geschwindigkeit läuft der Slideer (z.B. 0.1 bis 2.5)
//slideelemtags: Welchen HTML-Tag haben die Elemnte im Slider
//autoslide: ist autoslide an/aus
//atoslidesteps: wie viele elemente werden bei autoslide auf einmal geslidet
//autoslidespedd: mit Welcher Geschwindigkeit läuft der Autoslideer (z.B. 0.1 bis 2.5)
//autoslidetime: zeit in millisekunden für das autoslideing
//showarrowsoff: sollen inaktive Pfeile angezeigt werden? Ansonsten wird kein Pfeil angezeigt wenn Slide-Richtung nicht vorhanden ist (0=off, 1=on)

function SlideInit(slideid,slidesteps,slideelemwidth,viewinslideblock,slidespeed,slideelemtags,autoslide,autoslidesteps,autoslidespeed,autoslidetime,showarrowsoff){
	
	
	if($(slideid)){ // existiert der Slider?
		
			
		// SlideParameter setzen
		SlideBase[slideid] = new Array();
		SlideBase[slideid]["sliderest"] = 0; // wieviel Elemente sind noch zu slideen?
		SlideBase[slideid]["slideweg"] = 0; // wieviel Elemente sind schon weggeslidet?
		SlideBase[slideid]["slideelemanzahl"] = 0; // weiviel Elemente in Slider sind es insgesamt
		SlideBase[slideid]["slidepos"] = 0; // An welcher Slideposition (in Steps) ist der Slider aktuell
		SlideBase[slideid]["slidestepact"] = 0;
		SlideBase[slideid]["slidesteps"] = slidesteps; 
		SlideBase[slideid]["slideelemwidth"] = slideelemwidth; 
		SlideBase[slideid]["slidespeed"] = slidespeed; 
		SlideBase[slideid]["viewinslideblock"] = viewinslideblock;
		SlideBase[slideid]["autoslide"] = autoslide;
		SlideBase[slideid]["autoslidesteps"] = autoslidesteps;
		SlideBase[slideid]["autoslidespeed"] = autoslidespeed;
		SlideBase[slideid]["autoslidetime"] = autoslidetime;
		SlideBase[slideid]["autoslideactive"] = "";
		SlideBase[slideid]["showarrowsoff"] = showarrowsoff;
		SlideBase[slideid]["butleft"] = ""; // Button links
		SlideBase[slideid]["butleftoff"] = ""; // Button link inaktiv
		SlideBase[slideid]["butright"] = ""; // Button rechts
		SlideBase[slideid]["butrightoff"] = ""; // Button rechts inaktiv
		SlideBase[slideid]["slidercont"] = ""; // der zu slidende Container mit den Elemente
		SlideBase[slideid]["classname1"] = "slider_container"; // Name der CSS Klasse, Slider Container
		SlideBase[slideid]["classname2"] = "slider_data2"; // Name der CSS Klasse, der zu slidende Container
		SlideBase[slideid]["classname3"] = "sliderbut_left"; // Name der CSS Klasse, Buttons
		SlideBase[slideid]["classname4"] = "sliderbut_right"; // Name der CSS Klasse, Buttons
		SlideBase[slideid]["classname5"] = "sliderbut_leftoff"; // Name der CSS Klasse, Buttons
		SlideBase[slideid]["classname6"] = "sliderbut_rightoff"; // Name der CSS Klasse, Buttons
		SlideBase[slideid]["classname7"] = "sliderblock"; // Name der CSS Klasse, Contaibner Elemente im Slider
		
		//Diverse allgemeine Elemente im Slider
		ButElemsDIV = $(slideid).getElementsByTagName('div');
		ButElemsA = $(slideid).getElementsByTagName('a');
		ButElemsSPAN = $(slideid).getElementsByTagName('span');
		ButElemsLI = $(slideid).getElementsByTagName('li');
		
		// Pfeile wenn schon vorhanden löschen (wenn durch Reloads der Slider aktualsiert werden muss)
		DeleteArrows(slideid);
		
		// DIV Elemente manipulieren
		for(var i=0;i<ButElemsDIV.length;i++){ 
			//DatenContainer suchen, ID verpassen und Buttons setzen
			if(ButElemsDIV[i].className.indexOf(SlideBase[slideid]["classname1"])!=-1){ 
				ButElemsDIV[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsDIV[i].className, ' ', '_');
				var neu_input = document.createElement("div");
				neu_input.id = slideid + "_ultimateslider_sliderbuttons";
				neu_input.className = slideid + "_ultimateslider_sliderbuttons";
				neu_input.setAttribute('style','position: absolute; width: 100%; height:1px; overflow:visible; top:0px; left:0px; background-color:transparent; z-index:15000;')
				neu_input.innerHTML = ButElemLeft + "\n" + ButElemRight + "\n" +ButElemLeftOff + "\n" + ButElemRightOff + "\n";
				ButElemsDIV[i].insertBefore(neu_input, ButElemsDIV[i].firstChild);
			}
			// Dem zu slidenden Container eine ID verpassen
			if(ButElemsDIV[i].className.indexOf(SlideBase[slideid]["classname2"])!=-1){ 
				ButElemsDIV[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsDIV[i].className, ' ', '_');
				SlideBase[slideid]["slidercont"] = $(ButElemsDIV[i].id);
				//alert(ButElemsDIV[i].id);
			}
		}
		
		//A, SPAN Elemente im Slider aktualiseren
		ButElemsA = $(slideid).getElementsByTagName('a');
		ButElemsSPAN = $(slideid).getElementsByTagName('span');
		
		//Buttons aktive mit spezieller Slider-ID versehen
		for(var i=0;i<ButElemsA.length;i++){ 
			if(ButElemsA[i].className.indexOf(SlideBase[slideid]["classname3"])!=-1){ 
				ButElemsA[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsA[i].className, ' ', '_');
				SlideBase[slideid]["butleft"] = $(ButElemsA[i].id);
				//alert(ButElemsA[i].id);
				//Funktion auf Buttons setzen
				SlideBase[slideid]["butleft"].onclick = function(){
					SliderSlideNow(slideid,"left");
				}
			}
			if(ButElemsA[i].className.indexOf(SlideBase[slideid]["classname4"])!=-1){ 
				ButElemsA[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsA[i].className, ' ', '_');
				SlideBase[slideid]["butright"] = $(ButElemsA[i].id);
				//alert(ButElemsA[i].id);
				//Funktion auf Buttons setzen
				SlideBase[slideid]["butright"].onclick = function(){
					SliderSlideNow(slideid,"right");
				}
			}
		}
		
		//Buttons inaktive mit spezieller Slider-ID versehen
		for(var i=0;i<ButElemsSPAN.length;i++){ 
			if(ButElemsSPAN[i].className.indexOf(SlideBase[slideid]["classname5"])!=-1){ 
				ButElemsSPAN[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsSPAN[i].className, ' ', '_');
				SlideBase[slideid]["butleftoff"] = $(ButElemsSPAN[i].id);
				//alert(ButElemsSPAN[i].id);
			}
			if(ButElemsSPAN[i].className.indexOf(SlideBase[slideid]["classname6"])!=-1){ 
				ButElemsSPAN[i].id = slideid + "_" + SuchenUndErsetzen(ButElemsSPAN[i].className, ' ', '_');
				SlideBase[slideid]["butrightoff"] = $(ButElemsSPAN[i].id);
				//alert(ButElemsSPAN[i].id);
			}
		}
						
		//Elemente im Slider zählen
		var z=0;
		var elem=$(slideid).getElementsByTagName(slideelemtags);
		for(var i=0;i<elem.length;i++){
			if(elem[i].className.indexOf(SlideBase[slideid]["classname7"])!=-1){
				z++;
				if(SlideBase[slideid]["autoslide"] == 1){ // Wenn Autoslide dann Aktionen für stoppen und weiterlaufen auf Slider Elemente setzen
					
					elem[i].onmouseover = function(){
						window.clearInterval(SlideBase[slideid]["autoslideactive"]);
					}
					elem[i].onmouseout = function(){
						SlideBase[slideid]["autoslideactive"] = window.setInterval(function callFunc() { SliderAutoSlide(slideid); }, SlideBase[slideid]["autoslidetime"]);
					}
				}
			}
		}
		SlideBase[slideid]["slideelemanzahl"] = z; // Anzahl aller zu slidenden Elemente 
		
		// Wenn Autoslide aktiv dann Aktionen für "stoppen" und "weiterlaufen" auf Pfeile setzen
		if(SlideBase[slideid]["autoslide"] == 1){ 
			
			SlideBase[slideid]["butleft"].onmouseover = function(){
				window.clearInterval(SlideBase[slideid]["autoslideactive"]);
			}
			SlideBase[slideid]["butright"].onmouseover = function(){
				window.clearInterval(SlideBase[slideid]["autoslideactive"]);
			}
			SlideBase[slideid]["butleft"].onmouseout = function(){
				SlideBase[slideid]["autoslideactive"] = window.setInterval(function callFunc() { SliderAutoSlide(slideid); }, SlideBase[slideid]["autoslidetime"]);
			}
			SlideBase[slideid]["butright"].onmouseout = function(){
				SlideBase[slideid]["autoslideactive"] = window.setInterval(function callFunc() { SliderAutoSlide(slideid); }, SlideBase[slideid]["autoslidetime"]);
			}
		}
		
		//Anfangsstatus checken		
		if(SlideBase[slideid]["slideelemanzahl"] <= SlideBase[slideid]["viewinslideblock"]){ // Alle Pfeile aus wenn kein Sliding
			SlideBase[slideid]["butleft"].style.display = "none"; //linker Button aus
			SlideBase[slideid]["butright"].style.display = "none"; //rechter Buttons aus
			if(SlideBase[slideid]["showarrowsoff"] == 1){ /* Nur anzeigen wenn eingestellt */
				SlideBase[slideid]["butleftoff"].style.display = "block"; //linker inaktiver Button an	
				SlideBase[slideid]["butrightoff"].style.display = "block"; //rechter inaktiver Button an
			}else{
				SlideBase[slideid]["butleftoff"].style.display = "none"; //linker inaktiver Button aus	
				SlideBase[slideid]["butrightoff"].style.display = "none"; //rechter inaktiver Button aus
			}
		}else{
			SlideBase[slideid]["butleft"].style.display = "none"; //linker Button aus
			SlideBase[slideid]["butright"].style.display = "block"; //rechter Buttons an
			SlideBase[slideid]["butrightoff"].style.display = "none"; //rechter inaktiver Button aus
			if(SlideBase[slideid]["showarrowsoff"] == 1){ /* Nur anzeigen wenn eingestellt */
				SlideBase[slideid]["butleftoff"].style.display = "block"; //linker inaktiver Button an
			}else{
				SlideBase[slideid]["butleftoff"].style.display = "none"; //linker inaktiver Button aus
			}
		}
		
		//automatiches Slideen setzen
		if(SlideBase[slideid]["autoslide"] == 1){
			//alert(slideid);
			SlideBase[slideid]["autoslideactive"] = window.setInterval(function callFunc() { SliderAutoSlide(slideid); }, SlideBase[slideid]["autoslidetime"]);
			
		}
		
	}
}
function SliderSlideNow(slideid,slidedirection){
	
	//alert(SlideBase[0]["slidewidth"]);
	
	if(slidedirection == 'right'){
		
		// Den noch zu slideenden Rest ermitteln	
		SlideBase[slideid]["sliderest"] = SlideBase[slideid]["slideelemanzahl"] - ( SlideBase[slideid]["viewinslideblock"] + SlideBase[slideid]["slideweg"] );
		
		// Muss überhaupt noch geslidet werden?
		if(SlideBase[slideid]["sliderest"] > 0){
			
			// Slideposition errechnen
			if(SlideBase[slideid]["sliderest"] >= SlideBase[slideid]["slidesteps"]){ // Wenn die noch zu slideenden Elemente genausiviele oder mehr als  im Slideer sichtbare Elemente sind
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] - (SlideBase[slideid]["slidesteps"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'+',SlideBase[slideid]["slidesteps"]);
			}else{ // Wenn die noch zu slideenden Elemente weniger als im Slideer sichtbare Elemente sind
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] - (SlideBase[slideid]["sliderest"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'+',SlideBase[slideid]["sliderest"]);
			}
			
			new Effect.Morph(SlideBase[slideid]["slidercont"], {
			  style: 'left:'+SlideBase[slideid]["slidepos"]+'px', // CSS Properties
			  duration: SlideBase[slideid]["slidespeed"] // Core Effect properties
			});
		}
	}
	
	if(slidedirection == 'left'){
		
		if(SlideBase[slideid]["slideweg"] > 0){
			
			if(SlideBase[slideid]["slideweg"] >= SlideBase[slideid]["slidesteps"]){
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] + (SlideBase[slideid]["slidesteps"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'-',SlideBase[slideid]["slidesteps"]);
			}else{
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] + (SlideBase[slideid]["slideweg"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'-',SlideBase[slideid]["slideweg"]);
			}
			
			new Effect.Morph(SlideBase[slideid]["slidercont"], {
			  style: 'left:'+SlideBase[slideid]["slidepos"]+'px', // CSS Properties
			  duration: SlideBase[slideid]["slidespeed"] // Core Effect properties
			});
		}
		
	}
	
	//Buttons setzen
	SetArrows(slideid);

}

function SetSlideWeg(slideid,operation,anzahl){
	if (operation == "+") SlideBase[slideid]["slideweg"] = SlideBase[slideid]["slideweg"] + anzahl;
	if (operation == "-") SlideBase[slideid]["slideweg"] = SlideBase[slideid]["slideweg"] - anzahl;
}

function SetArrows(slideid){
		
	CheckSlideEnd = SlideBase[slideid]["slideelemanzahl"] - ( SlideBase[slideid]["viewinslideblock"] + SlideBase[slideid]["slideweg"] )// Kann noch nach rechts geslidet werden?
	
	if(CheckSlideEnd > 0){
		SlideBase[slideid]["butright"].style.display = "block"; 
		SlideBase[slideid]["butrightoff"].style.display = "none"; 
	}else{
		SlideBase[slideid]["butright"].style.display = "none"; 
		if(SlideBase[slideid]["showarrowsoff"] == 1){ /* Nur anzeigen wenn eingestellt */
			SlideBase[slideid]["butrightoff"].style.display = "block";
		}else{
			SlideBase[slideid]["butrightoff"].style.display = "none";
		}
	}
	
	CheckSlideBegin = SlideBase[slideid]["slideweg"];
	
	if(CheckSlideBegin > 0){
		SlideBase[slideid]["butleft"].style.display = "block"; 
		SlideBase[slideid]["butleftoff"].style.display = "none"; 
	}else{
		SlideBase[slideid]["butleft"].style.display = "none"; 
		if(SlideBase[slideid]["showarrowsoff"] == 1){ /* Nur anzeigen wenn eingestellt */
			SlideBase[slideid]["butleftoff"].style.display = "block";
		}else{
			SlideBase[slideid]["butleftoff"].style.display = "none";
		}
	}	
}

function DeleteArrows(slideid){
	
	if($(slideid + "_ultimateslider_sliderbuttons")){ // Pfeile wenn schon vorhanden löschen
		function removeAChild()
		{
			var containerelem = $(slideid + "_ultimateslider_sliderbuttons");
			if( containerelem !== null )
				containerelem.parentNode.removeChild( containerelem );
		}
		removeAChild();
	}
}

function SliderAutoSlide(slideid){
	//alert(slideid);
	CheckSlideEnd = SlideBase[slideid]["slideelemanzahl"] - ( SlideBase[slideid]["viewinslideblock"] + SlideBase[slideid]["slideweg"] )// Kann noch nach rechts geslidet werden?
	
	if(CheckSlideEnd == 0){ // Wenn Slider am Ende wieder an Anfang setzen
		
		// Slideer zurücksetzen
		SlideBase[slideid]["slidestepact"] = 0; 
		SlideBase[slideid]["sliderest"] = 0;
		SlideBase[slideid]["slidepos"] = 0;
		SlideBase[slideid]["slideweg"] = 0;
		
		new Effect.Morph(SlideBase[slideid]["slidercont"], {
			  style: 'left:0px', // CSS Properties
			  duration: SlideBase[slideid]["autoslidespeed"] // Core Effect properties
		});
		
	}else{ // wenn Slider noch nicht am Ende
	
		SlideBase[slideid]["sliderest"] = SlideBase[slideid]["slideelemanzahl"] - ( SlideBase[slideid]["viewinslideblock"] + SlideBase[slideid]["slideweg"] );
		
		if(SlideBase[slideid]["sliderest"] > 0){
			
			// Slideposition errechnen
			if(SlideBase[slideid]["sliderest"] >= SlideBase[slideid]["autoslidesteps"]){ // Wenn die noch zu slideenden Elemente genausiviele oder mehr als  im Slideer sichtbare Elemente sind
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] - (SlideBase[slideid]["autoslidesteps"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'+',SlideBase[slideid]["autoslidesteps"]);
			}else{ // Wenn die noch zu slideenden Elemente weniger als im Slideer sichtbare Elemente sind
				SlideBase[slideid]["slidepos"] = SlideBase[slideid]["slidepos"] - (SlideBase[slideid]["sliderest"] * SlideBase[slideid]["slideelemwidth"]);
				SetSlideWeg(slideid,'+',SlideBase[slideid]["sliderest"]);
			}
			
			new Effect.Morph(SlideBase[slideid]["slidercont"], {
			  style: 'left:'+SlideBase[slideid]["slidepos"]+'px', // CSS Properties
			  duration: SlideBase[slideid]["autoslidespeed"] // Core Effect properties
			});
		}
		
	}
	
	//Buttons setzen
	SetArrows(slideid);
	
}

function SuchenUndErsetzen(QuellText, SuchText, ErsatzText)
        {   // Erstellt von Ralf Pfeifer
            // Fehlerpruefung
            if ((QuellText == null) || (SuchText == null))           { return null; }
            if ((QuellText.length == 0) || (SuchText.length == 0))   { return QuellText; }

            // Kein ErsatzText ?
            if ((ErsatzText == null) || (ErsatzText.length == 0))    { ErsatzText = ""; }

            var LaengeSuchText = SuchText.length;
            var LaengeErsatzText = ErsatzText.length;
            var Pos = QuellText.indexOf(SuchText, 0);

            while (Pos >= 0)
            {
                QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
                Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
            }
            return QuellText;
        } // -->


