// (c) EIKONA AG, it.x informationssysteme gmbh, Alle Rechte vorbehalten.

// Historie -----------------------------------------------------------------------------------------------
// 22.12.06 hma Erstellung.																			
// 22.02.07 hma Umstellung auf JS-Objekt, damit mehrere Diashows auf einer Seite dargestellt werden können.																			
// Historie -----------------------------------------------------------------------------------------------


// Diashow auf Basis von Scriptaculous.

// intSystemId:		Eindeutige ID zur Identifizierung der entsprechenden DIV's
// intPicCount:		Anzahl der vorhandenen Elemente
// intSpeed:		Darstellungsdauer eines Elementes in Millisekunden
// intDuration:		Dauer einer Überblendung in Millisekunden
// bitLoop:			Soll die Diashow als Endlosschleife laufen?
// strRedirectURL:	Am ende der Diashow oder bei Klick wird hierher gesprungen
//
function diashow(intSystemId, intPicCount, intSpeed, intDuration, bitLoop, strRedirectURL)
	{
	this.intSystemId = intSystemId;
	this.intPicCount = intPicCount;
	this.floatSpeed = parseFloat(intSpeed + intDuration) / 1000.0;	// Speed in Sekunden umrechnen
	this.floatDuration = parseFloat(intDuration) / 1000.0;			// Duration in Sekunden umrechnen
	this.bitLoop = bitLoop;
	this.strRedirectURL = strRedirectURL;
	this.intPicShown = 1;											// Das aktuell dargestellte Bild
	this.intPicNext = 2;											// Das als nächstes darzustellende Bild
	
	// Zeigt das nächste Bild der Diashow an
	this.show_next_pic = function(objInterval)
		{
			// Bugfix FFx 2 Schritt 1:
			this.pe.stop();
			
			// Das aktuelle Bild ausblenden
			this.effect_fade = Effect.Fade('diashow_' + this.intSystemId + '_' + this.intPicShown, {duration: this.floatDuration});
			
			// Das nächste Bild einblenden
			this.effect_appear = Effect.Appear('diashow_' + this.intSystemId + '_' + this.intPicNext, {duration: this.floatDuration});
		
		// Die Werte für aktuelles und nächstes Bild neu setzen
		this.intPicShown = this.intPicNext;
		this.intPicNext = this.intPicNext + 1;
		
		// Falls wir am Ende sind, auf das erste Bild zurückspringen
		if(this.intPicNext > this.intPicCount)
			{
			// Aber nur, wenn die Diashow in einer Schleife laufen soll
			if(this.bitLoop)
				{
				this.intPicNext = 1;
				}
			else
				{
				// Ansonsten das Intervall beenden
				objInterval.stop();
				
				// Und weiterleiten, falls URL angegeben wurde
				if(this.strRedirectURL != '')
					{
					new PeriodicalExecuter(this.goto_url.bind(this), this.floatSpeed);
					}
				}
			}
		// Bugfix FFx 2 Schritt 2:
		this.pe = new PeriodicalExecuter(this.show_next_pic.bind(this), this.floatSpeed);
		}
	
	// Springt zur hinterlegten URL
	this.goto_url = function()
		{
		if(this.strRedirectURL != '')
			{
			window.location.href = this.strRedirectURL;
			}
		}
	
	// Wenn eine URL übergeben wurde...
	if(strRedirectURL != '')
		{
		// ...dem Diashowelement ein Klickevent mit Weiterleitung spendieren
		Event.observe($('diashow_' + this.intSystemId), 'click', this.goto_url.bind(this), true);
		
		// ...und noch einen "Zeigepointer"
		$('diashow_' + this.intSystemId).style.cursor = 'pointer';
		}
	
	// Das Intervall starten, welches für die Überblendungen sorgt
	this.pe = new PeriodicalExecuter(this.show_next_pic.bind(this), this.floatSpeed);
	
	
	
	// Mousouver Aktion für die Containernavigation links (individuell Eikona Webseite) -----------------------------------------------------------------
	var that = this;
	document.observe("dom:loaded", function() {
	
		// Alle Container links von der Diashow holen
		var array_container = $('containernavi').select('[id]');
		
		for(var i=0; i<array_container.length; i++)
			{
				// Event Handler für die einzelnen Container
				array_container[i].observe('mouseover', function(event){
				
					// Effekte stoppen
					if(Boolean(that.effect_fade) && Boolean(that.effect_appear))
						{
						that.effect_fade.cancel();
						that.effect_appear.cancel();
						}
				
					// PeriodicalExecuter anhalten
					that.pe.stop();
					
					// Alle Bilder auf display:none setzen
					var array_kinder_diashow = $$('div.diashow')[0].childElements();
					var array_kinder = array_kinder_diashow[0].childElements();
					
					for(var j=0; j<array_kinder.length; j++)
						{
						array_kinder[j].setStyle({display:'none'});
						}
						
					// Das entsprechende Bild zum aktuellen Container anzeigen
					var containernummer = this.readAttribute('id');
					$('diashow_'+intSystemId+'_'+containernummer).setStyle({display:'inline'});
					$('diashow_'+intSystemId+'_'+containernummer).setStyle({opacity:'1'});
					
				});
				
				// Mouseout-Event: Diashow wieder starten
				array_container[i].observe('mouseout', function(event){
					// Warum man die folgenden zwei Zeilen so schreiben muss?? -Es funktioniert aber (kein Zurücksetzen, aber dafür kein Stolpern der Diashow mehr)
					that.intPicShown = 1;
					that.intPicNext = 2;
					that.pe = new PeriodicalExecuter(that.show_next_pic.bind(that), that.floatSpeed);
				});
				
			}
		
	});
	
	} // diashow()
