// Animation des Farbvorhangs und Bildwechsel im Seitenkopf
//
// 2006-07-25, Erste Erstellung als Vorhang mit Wurzelfunktion als Weg(Zeit)-Kurve, kyw

// Globale Initialisierungen
// Dimensionierungen
var nv = 4;   // Anzahl der "Vorhänge" *** evtl. dyn. aus den Elementnamen bzw. Anzahl der Kindelemente ermitteln
var ns = 40;  // Anzahl der Schritte der Animation *** evtl. dyn. aus der Elternelementbreite bestimmen
var tau = 15;             // Zeitabstand zwischen zwei Bewegungsschritten der Vorhänge [ms]
var vorhangZu = 1000;     // Pausenzeit bei geschlossenem Vorhang [ms]
var vorhangOffen = 10000; // Pausenzeit bei offenem Vorhang [ms]
var maxCycle = 100;        // Maximale Anzahl von Bildwechseln limitieren, damit kein "endloser" Traffic anfällt.

// Definierte Bildfolgen
var bildFolgen = new Array();
var folge = new Array( '/img/shared/lady22.jpg', '/img/shared/lady23.jpg', '/img/shared/lady24.jpg', '/img/shared/lady25.jpg', '/img/shared/lady26.jpg', '/img/shared/lady27.jpg', '/img/shared/lady28.jpg', '/img/shared/lady29.jpg', '/img/shared/lady21.jpg' );
bildFolgen['default'] = folge; // Diese Folge wird angezeigt, wenn keine oder eine unbekannte Folge angefordert wurde.
bildFolgen['lady2'] = folge;
var folge = new Array( '/img/shared/lady12.jpg', '/img/shared/lady13.jpg', '/img/shared/lady14.jpg', '/img/shared/lady15.jpg', '/img/shared/lady16.jpg', '/img/shared/lady17.jpg', '/img/shared/lady11.jpg' );
bildFolgen['lady1'] = folge;
var folge = new Array( '/img/shared/lady32.jpg', '/img/shared/lady33.jpg', '/img/shared/lady34.jpg', '/img/shared/lady35.jpg', '/img/shared/lady36.jpg', '/img/shared/lady37.jpg', '/img/shared/lady38.jpg', '/img/shared/lady39.jpg', '/img/shared/lady31.jpg' );
bildFolgen['lady3'] = folge;
var folge = new Array( '/img/shared/kind11.jpg', '/img/shared/sir11.jpg', '/img/shared/lady41.jpg', '/img/shared/sir12.jpg', '/img/shared/lady42.jpg', '/img/shared/sir13.jpg', '/img/shared/sir14.jpg', '/img/shared/sir15.jpg' );
bildFolgen['familie1'] = folge;

// window.alert( bildFolgen['mister1'] );

// Indizierter Zugriff auf die Vorhangobjekte
var a = new Array(nv); //0..nv-1
// Exponenten der Bewegungskurve der verschieden bewegten Vorhänge
// x(i,t) = t/T ** p(i)
var p = new Array( 0.4, 0.6, 1.0, 1.7 );  //0..nv-1
// Startpunkte der linken Vorhangkanten
var l = new Array( -0.1, 0.2, 0.6, 1.2 );  //0..nv-1
// Bilder
var bildListe = new Array(); // URLs der zyklisch im Kopf darzustellenden Bilder
var aktBild = 0; // Index des aktuell im Kopf dargestellten Bildes

var s = 0; // Aktuelle Position des Vorhangs
var vorhangstange;  // Trigger für start/stop des Vorhangs usw.
var cycle = 0; // Zyklenzähler

function initBewegungsParam() {
// Setzt die Bewegungsparameter der Vorhänge auf zufällige neue Werte.
  var i;
  for (i=0; i<nv; i++) {
    p[i] = 2 * Math.random();          //  0 <= p[i] <= 2
    l[i] = 1.5 * Math.random() - 0.25; // -0.25 <= l[i] <= 1.25
  } /* for i */
}

function vorhangschub( increment ) {
// Einen Schritt der Vorhangbewegung ausführen, an den Enden der Bewegung pausieren
// und dann mit umgekehrter Bewegungsrichtung fortfahren.
// Dabei besondere Behandlung der Endpositionen.
  var i; var breite; var links; var k; var nextpic;

  if (s==0) {  // Beginn einer neuen "Verdunklung"
    // Vorhang wegen der Blödheit des IE sichtbar schalten
    for (i=0; i<nv; i++) {
      a[i].style.visibility = "visible";
// alert ('s=' + s + ', i=' + i + ', width=' + a[i].style.width);
    } /* for i */
  }
  // Neue Vorhangpositionen berechnen
  for (i=0; i<nv; i++) {
    breite = Math.pow( s/ns,p[i] );
    links = l[i] - breite/2;
    // Arithmetisches Clipping, weil's im CSS nicht recht klappt.
    a[i].style.left = 100 * Math.max( Math.min( 1,links ),0 ) + "%";
    a[i].style.width = 100 * Math.max( Math.min( 1-links,breite ),0 ) + "%";
//    a[i].style.right = 100 * Math.max( Math.min( 1,l[i] + breite/2 ),0 ) + "%";
// alert ('s=' + s + ', i=' + i + ', width=' + a[i].style.width);
  } /* for i */
  s = s + increment;
  if (s>ns) {
// window.alert( 'Der Vorhang ist zu' );
    s = ns;
    // Bildwechsel ausführen
   nextpic = 'url("' + bildListe[aktBild] + '")';
// alert( 'Nächstes Bild=' + nextpic );
    k = document.getElementById("kopf");
// alert( k.nodeName );
//    k.setAttribute( "style", nextpic ); // *** Das raffte der IE 'mal wieder nicht!
    k.style.backgroundImage = nextpic;
    aktBild = (aktBild + 1) % bildListe.length;
    // Vorhang nach einem Weilchen wieder zurückschieben
    vorhangstange = window.setTimeout( "vorhangschub(" + -increment + ")", vorhangZu );
  } else if (s<0) {
// window.alert( 'Der Vorhang ist auf' );
    s = 0;
// Vorhang wegen der Blödheit des IE unsichtbar schalten
    for (i=0; i<nv; i++) {
      a[i].style.visibility = "hidden";
// alert ('s=' + s + ', i=' + i + ', width=' + a[i].style.width);
    } /* for i */
    // Zykluskontrolle und ggf. Fortsetzung
    cycle++;
    if (cycle <= maxCycle) {
      // Vorhangbewegungsparameter für den nächsten Zyklus initialisieren
      initBewegungsParam();
      // Vorhang nach einer Weile wieder zuschieben
      vorhangstange = window.setTimeout( "vorhangschub(" + -increment + ")", vorhangOffen );
    } // else  Kein Neustart => Ende der Animation
  } else { // einen weiteren Schubschritt auslösen
    vorhangstange = window.setTimeout( "vorhangschub(" + increment + ")", tau );
  }
} /* vorhangschub */

function kopfanimation( kollektion ) {
// Fortlaufende animierte Wechsel der Kopfgraphik

//  window.alert( 'Animation wird gestartet!' );
// alert ( 'Kollektion='+kollektion );

  // Initialisierungen globaler Variablen
  // Objekthandle der divs beschaffen *** Notausgang, falls kein DOM vorhanden, hinzufügen
  var i;
  i=0; a[i] = document.getElementById("ani1");
  i++; a[i] = document.getElementById("ani2");
  i++; a[i] = document.getElementById("ani3");
  i++; a[i] = document.getElementById("ani4");

  // Alle Bilder bereitstellen
  if (!kollektion || !bildFolgen[kollektion]) kollektion = 'default';
  bildListe = bildFolgen[kollektion];
// alert (bildListe.length+' übernommene Bilder');

  // Vorhangbewegungsparameter für den ersten Zyklus initialisieren
  initBewegungsParam();
  // Schneller Start, weil das Laden der Bilder wahrscheinlich schon ein wenig gedauert hat.
  vorhangstange = window.setTimeout( 'vorhangschub( +1 )',vorhangOffen/2 )
} /* kopfanimation */

function stopanimation() {
// Stoppen aller Timer, damit keine JS-threads im Hintergrund weiterlaufen.
  window.clearTimeout( vorhangstange );
//  window.alert( 'Animation ist gestoppt!' );
}