﻿var currentPortal = -1;
var images, claims, descriptions;

var claimOpacity = 0.72;
var descOpacity = 0.72;

var claimFadeInTweens;
var claimFadeOutTweens;
var claimMoveInTweens;
var claimMoveOutTweens;

var claimFadeInTimers = new Array();
var claimFadeOutTimers = new Array();
var claimMoveInTimers = new Array();
var claimMoveOutTimers = new Array();

var claimStartPositions = ['6px', '6px', '6px', '6px'];
var claimTargetPositions = ['46px', '46px', '46px', '46px'];

var claimFadeInDuration = 1200;
var claimFadeInDelay = 600;
var claimFadeOutDuration = 500;
var claimFadeOutDelay = 100;
var claimMoveInDuration = 1100;
var claimMoveInDelay = 500;
var claimMoveOutDuration = 500;
var claimMoveOutDelay = 50;

var descFadeInTweens;
var descFadeOutTweens;
var descMoveInTweens;
var descMoveOutTweens;

var descFadeInTimers = new Array();
var descFadeOutTimers = new Array();
var descMoveInTimers = new Array();
var descMoveOutTimers = new Array();

var descStartPositions = ['35px', '35px', '35px', '35px'];
var descTargetPositions = ['82px', '82px', '82px', '82px'];

var descFadeInDuration = 1200;
var descFadeInDelay = 800;
var descFadeOutDuration = 500;
var descFadeOutDelay = 200;
var descMoveInDuration = 1100;
var descMoveInDelay = 700;
var descMoveOutDuration = 500;
var descMoveOutDelay = 150;

var slideshowTimer;
var slideshowDelay = 8000;

function startInitialise() {
    startCreateImageArrays();
    startCreateClaimTweens();
    startCreateDescTweens();
                        
    for (var i = 0; i < 4; i++) {
        claims[i].fade('hide');
        descriptions[i].fade('hide');
        if (i == 0) {
            images[i].fade(1);
            descriptions[i].fade('hide');
            claimFadeInTimers[0] = claimFadeInTweens[0].start.pass(['opacity', claimOpacity], claimFadeInTweens[0]).delay(claimFadeInDelay);
            claimMoveInTimers[0] = claimMoveInTweens[0].start.pass(['left', claimStartPositions[0], claimTargetPositions[0]], claimMoveInTweens[0]).delay(claimMoveInDelay);
            descFadeInTimers[0] = descFadeInTweens[0].start.pass(['opacity', descOpacity], descFadeInTweens[0]).delay(descFadeInDelay);
            descMoveInTimers[0] = descMoveInTweens[0].start.pass(['left', descStartPositions[0], descTargetPositions[0]], descMoveInTweens[0]).delay(descMoveInDelay);            
        }
        else {
            images[i].fade('hide');
        }
        images[i].show();
        claims[i].show();
        descriptions[i].show();
    }
    currentPortal = 0;
}

function startCreateImageArrays() {
    images = [$('Start-Image-Systemhaus'),
                $('Start-Image-Web'),
                $('Start-Image-Expo'),
                $('Start-Image-Rollout')];
    claims = [$('Start-Claim-Systemhaus'),
                $('Start-Claim-Web'),
                $('Start-Claim-Expo'),
                $('Start-Claim-Rollout')];
    descriptions = [$('Start-Desc-Systemhaus'),
                $('Start-Desc-Web'),
                $('Start-Desc-Expo'),
                $('Start-Desc-Rollout')];
}

function startCreateClaimTweens() {
    claimFadeInTweens = [new Fx.Tween(claims[0], { duration: claimFadeInDuration }),
        new Fx.Tween(claims[1], { duration: claimFadeInDuration }),
        new Fx.Tween(claims[2], { duration: claimFadeInDuration }),
        new Fx.Tween(claims[3], { duration: claimFadeInDuration })];
    claimFadeOutTweens = [new Fx.Tween(claims[0], { duration: claimFadeOutDuration }),
        new Fx.Tween(claims[1], { duration: claimFadeOutDuration }),
        new Fx.Tween(claims[2], { duration: claimFadeOutDuration }),
        new Fx.Tween(claims[3], { duration: claimFadeOutDuration })];
    claimMoveInTweens = [new Fx.Tween(claims[0], { duration: claimMoveInDuration }),
        new Fx.Tween(claims[1], { duration: claimMoveInDuration }),
        new Fx.Tween(claims[2], { duration: claimMoveInDuration }),
        new Fx.Tween(claims[3], { duration: claimMoveInDuration })];
    claimMoveOutTweens = [new Fx.Tween(claims[0], { duration: claimMoveOutDuration }),
        new Fx.Tween(claims[1], { duration: claimMoveOutDuration }),
        new Fx.Tween(claims[2], { duration: claimMoveOutDuration }),
        new Fx.Tween(claims[3], { duration: claimMoveOutDuration })];
}

function startCreateDescTweens() {
    descFadeInTweens = [new Fx.Tween(descriptions[0], { duration: descFadeInDuration }),
        new Fx.Tween(descriptions[1], { duration: descFadeInDuration }),
        new Fx.Tween(descriptions[2], { duration: descFadeInDuration }),
        new Fx.Tween(descriptions[3], { duration: descFadeInDuration })];
    descFadeOutTweens = [new Fx.Tween(descriptions[0], { duration: descFadeOutDuration }),
        new Fx.Tween(descriptions[1], { duration: descFadeOutDuration }),
        new Fx.Tween(descriptions[2], { duration: descFadeOutDuration }),
        new Fx.Tween(descriptions[3], { duration: descFadeOutDuration })];
    descMoveInTweens = [new Fx.Tween(descriptions[0], { duration: descMoveInDuration }),
        new Fx.Tween(descriptions[1], { duration: descMoveInDuration }),
        new Fx.Tween(descriptions[2], { duration: descMoveInDuration }),
        new Fx.Tween(descriptions[3], { duration: descMoveInDuration })];
    descMoveOutTweens = [new Fx.Tween(descriptions[0], { duration: descMoveOutDuration }),
        new Fx.Tween(descriptions[1], { duration: descMoveOutDuration }),
        new Fx.Tween(descriptions[2], { duration: descMoveOutDuration }),
        new Fx.Tween(descriptions[3], { duration: descMoveOutDuration })];
}

function startShowPortal(portalId) {
    if (currentPortal >= 0 && currentPortal != portalId) {
        // Timer des aktuellen Portals abbrechen
        claimFadeInTimers[currentPortal] = $clear(claimFadeInTimers[currentPortal]);
        claimMoveInTimers[currentPortal] = $clear(claimMoveInTimers[currentPortal]);
        descFadeInTimers[currentPortal] = $clear(descFadeInTimers[currentPortal]);
        descMoveInTimers[currentPortal] = $clear(descMoveInTimers[currentPortal]);
        // Timer des neuen Portals abbrechen
        claimFadeInTimers[portalId] = $clear(claimFadeInTimers[portalId]);
        claimMoveInTimers[portalId] = $clear(claimMoveInTimers[portalId]);
        descFadeInTimers[portalId] = $clear(descFadeInTimers[portalId]);
        descMoveInTimers[portalId] = $clear(descMoveInTimers[portalId]);
        // Einblend-Effekte für das aktuelle Portal abbrechen
        claimFadeInTweens[currentPortal].cancel();
        claimMoveInTweens[currentPortal].cancel();
        descFadeInTweens[currentPortal].cancel();
        descMoveInTweens[currentPortal].cancel();
        // Ausblend-Effekte für das neue Portal abbrechen
        claimFadeOutTweens[portalId].cancel();
        claimMoveOutTweens[portalId].cancel();
        descFadeOutTweens[portalId].cancel();
        descMoveOutTweens[portalId].cancel();
        
        // Ausblendeffekte
        images[currentPortal].fade(0);
        claimFadeOutTimers[portalId] = claimFadeOutTweens[currentPortal].start.pass(['opacity', 0], claimFadeOutTweens[currentPortal]).delay(claimFadeOutDelay);
        claimMoveOutTimers[portalId] = claimMoveOutTweens[currentPortal].start.pass(['left', claimTargetPositions[currentPortal], claimStartPositions[currentPortal]], claimMoveOutTweens[currentPortal]).delay(claimMoveOutDelay);
        descFadeOutTimers[portalId] = descFadeOutTweens[currentPortal].start.pass(['opacity', 0], descFadeOutTweens[currentPortal]).delay(descFadeOutDelay);
        descMoveOutTimers[portalId] = descMoveOutTweens[currentPortal].start.pass(['left', descTargetPositions[currentPortal], descStartPositions[currentPortal]], descMoveOutTweens[currentPortal]).delay(descMoveOutDelay);
        
        // Einblendeffekte
        images[portalId].fade(1);
        claimFadeInTimers[portalId] = claimFadeInTweens[portalId].start.pass(['opacity', claimOpacity], claimFadeInTweens[portalId]).delay(claimFadeInDelay);
        claimMoveInTimers[portalId] = claimMoveInTweens[portalId].start.pass(['left', claimStartPositions[portalId], claimTargetPositions[portalId]], claimMoveInTweens[portalId]).delay(claimMoveInDelay);
        descFadeInTimers[portalId] = descFadeInTweens[portalId].start.pass(['opacity', descOpacity], descFadeInTweens[portalId]).delay(descFadeInDelay);
        descMoveInTimers[portalId] = descMoveInTweens[portalId].start.pass(['left', descStartPositions[portalId], descTargetPositions[portalId]], descMoveInTweens[portalId]).delay(descMoveInDelay);
        currentPortal = portalId;
    }
}

function startSlideshowPlanNext() {
    slideshowTimer = startSlideshowStep.delay(slideshowDelay);
}

function startSlideshowStop() {
    slideshowTimer = $clear(slideshowTimer);
}

function startSlideshowStep() {
    var nextPortalId = currentPortal + 1;
    if (nextPortalId > 3) nextPortalId = 0;
    startShowPortal(nextPortalId);
    startSlideshowPlanNext();
}

function startEnterPortal(portalId) {
    startSlideshowStop();
    startShowPortal(portalId);
}

function startLeavePortal() {
    startSlideshowPlanNext();
}

window.addEvent('domready', function() {
    startInitialise();
    startSlideshowPlanNext();
});

