/*
 * Konfigurierbare Variablen:
 * "interallzeit" -> die Dauer in Sekunden bis zum naechsten automatischen
 *                   "blaettern"
 * "schrittweite" -> indirekte Geschwindigkeit des Fadens. Je hoeher der Wert
 *                   desto schneller, aber unsauberer der Ab-/Aufblendeffekt
 */
var intervallzeit = 12;
var schrittweite = 3;

/*
 * Festgegebenen Variablen: DON'T TOUCH!
 */
var nummer = 1
var timervar = window.setInterval(function () {fadePlus(); }, (intervallzeit*1000));
var divFadeOut = null;
var divFadeIn = null;

/*
 * Funktion dient zum Ausblenden des alten und Einblenden es neuen
 * DIV-Containers
 */
function fade(step) {
    /* So lange die Opacity des Ausblenden groeszer 0 ist, wird ausgeblendet.
     * IE kann "opacity" auslesen, auch wenn er es nicht interpretiert.
     */
    if(this.divFadeOut.style.opacity > 0) {
        this.divFadeOut.style.opacity = step/100;
        this.divFadeOut.style.filter  = "alpha(opacity=" + (step) + ")"; // IE
        step -= schrittweite;
        if(this.divFadeOut.style.opacity <= 0) {
            step = 0;
        }
    }
    /*
     * Ansonsten wird der neue Container eingeblendet und der alte komplett auf
     * display: none gesetzt.
     */
    else {
        this.divFadeOut.style.display = 'none';
        this.divFadeIn.style.display  = 'block';
        this.divFadeIn.style.opacity  = step/100;
        this.divFadeIn.style.filter   = "alpha(opacity=" + step + ")"; // IE
        step += schrittweite;
    }

    /*
     * So lange der neue Container nicht vollkommen sichtbar ist, wird
     * rekursiv per Timeout diese Funktion aufgerufen.
     */
    if(this.divFadeIn.style.opacity < 1){
        this.fadetimer = window.setTimeout(function () { fade(step); }, 1);
    }
    else{
        step = 100;
    }
}

/*
 * Speichert im globalen Gueltigkeitsbereich die beiden Container die aus-
 * bzw. eingeblendet werden sollen. Erwartet als Parameter die Nummer des
 * neuen Containers.
 */
function setDivsToFade(numberFadeIn) {
    /*
     * Das aktuelle Faden wird unterbrochen
     */
    window.clearTimeout(this.fadetimer);
    /*
     * Vorsichtshalber werden die beiden zu letzt gefadeten Container komplett
     * aus- bzw. eingeblendet. Kann nur angewendet werden, wenn diese Funktion
     * bereits einmal ausgefuehrt wurde. Dient dem sauberen Abschluss, falls
     * waehrend eines Uebergangs manuell "geblaettert" wird.
     */
    if(this.divFadeOut != null){
        this.divFadeOut.style.display = 'none';
        this.divFadeOut.style.opacity = 0;
        this.divFadeOut.style.filter  = 'alpha(opacity=0)';
    }
    if(this.divFadeIn != null){
        this.divFadeIn.style.display = 'block';
        this.divFadeIn.style.opacity = 1;
        this.divFadeIn.style.filter  = 'alpha(opacity=100)';
    }

    /*
     * Das auszublendene DIV erhaelt seine Numme aus einer globalen Variablen
     */
    this.divFadeOut = document.getElementById('div'+this.nummer);

    /*
     * Das einzublendene DIV erhaelt seine Numme aus der uebergebenen Variablen
     */
    this.divFadeIn = document.getElementById('div'+numberFadeIn);
    /*
     * Sollte die uebergebene Nummer auserhalb des Gueltigen Bereichs liegen
     * (Anfang oder Ende erreicht) wird ermittelt in welche Richtung die
     * Abweichung geht und entsprechend das erste, oder das letzte Element
     * zugewiesen.
     */
    if(!this.divFadeIn){
        if(numberFadeIn <= 1){
            var i = 1;
            while(maxdiv = document.getElementById("div"+i)){
                var max = maxdiv.id.replace('div', '');
                i++;
            }
            numberFadeIn = max;
        }
        else{
            numberFadeIn = 1;
        }
        this.divFadeIn = document.getElementById("div"+(numberFadeIn));
    }

    /*
     * Die globale Nummer wird angepasst.
     */
    this.nummer = numberFadeIn;
}

/*
 * Funktion dient dem "vorwaertsblaettern". Wird standardmaeszig ueber ein
 * Interval ausgefuehrt, kann aber auch manuell gestartet werden.
 */
function fadePlus() {
    setDivsToFade((this.nummer+1));
    this.fadetimer = window.setTimeout(function () { fade(100); }, 1);
}

/*
 * Funktion dient dem "rueckwaertsblaettern". Wird standardmaeszig nur manuell
 * gestartet.
 */
function fadeMinus() {
    setDivsToFade((this.nummer-1));
    this.fadetimer = window.setTimeout(function () { fade(100); }, 1);
}

/*
 * Fuehrt einen Containerwechsel in die gewuenschte Richtung aus (-/+) und
 * beendet das automatische Faden.
 * Erwartet die gewuenschte "Richtung" als String "-" bzw. "+"
 * Gibt false zurueck (Anwendung fuer Links gedacht)
 */
function doFadeIntoDirection(direction) {
    if(direction == '-'){
        window.clearInterval(timervar);
        fadeMinus();
    }
    else if(direction == '+'){
        window.clearInterval(timervar);
        fadePlus();
    }

    return false;
}