var lastBannerIndex = -1;
var mainTimer;
var isRunning;
var locked = false;
var delay = 10000;
//banery sou nacteny z externiho souboru
var banners;

function getNextIndex() {
    if (lastBannerIndex + 1 < banners.length) {
        lastBannerIndex += 1;
    } else {
        lastBannerIndex = 0;
    }
    return lastBannerIndex
}

function getPreviousIndex() {
    if (lastBannerIndex > 0) {
        lastBannerIndex -= 1;
    } else {
        lastBannerIndex = banners.length - 1;
    }
    return lastBannerIndex
}

function isSingleImage() {
    return banners.length <= 1;
}

function start() {
    showImage(getNextIndex());
    if (isSingleImage()) {
        return;
    }
    setPauseControlPlay();
    mainTimer = setInterval(function() {
        nextImage()
        }, delay);
    isRunning = true;
}

function stop() {
    clearInterval(mainTimer);
    isRunning = false;
    setPauseControlStop();
}

function toggle() {
    if (isSingleImage()) {
        return;
    }
    if (locked) {
        return;
    }
    if (isRunning) {
        stop();
    } else {
        start();
    }
}

function setOpacity ( obj, opacity ) {

    opacity = (opacity == 100 ? 99.999 : opacity);

    obj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + opacity + ")";
    obj.style.filter = "alpha(opacity:" + opacity + ")";
    obj.style.KHTMLOpacity = opacity / 100;  // Safari<1.2, Konqueror
    obj.style.MozOpacity = opacity / 100;  // Older Mozilla and Firefox
    obj.style.opacity = opacity / 100;  // Safari 1.2, newer Firefox and Mozilla, CSS3
    
}

function setPauseControlPlay() {
    document.getElementById("banner-switcher-pause-control").setAttribute("src", "/assets/imgs/sw-pause-b.png")
}

function setPauseControlStop() {
    document.getElementById("banner-switcher-pause-control").setAttribute("src", "/assets/imgs/sw-play-b.png")
}


function setImage(index) {

    var imageNode = document.getElementById("banner-switcher-target-image");
    var linkNode = document.getElementById("banner-switcher-link");
    var textNode = document.getElementById("banner-switcher-text");
    var newTextNode = document.createTextNode(banners[index][2]);

    if (textNode.hasChildNodes()) {
        textNode.replaceChild(newTextNode, textNode.firstChild);
    } else {
        textNode.appendChild(newTextNode);
    }

    linkNode.setAttribute("href", banners[index][1]);
    imageNode.setAttribute("src", banners[index][0]);

    linkNode.style.display = "block";
    imageNode.style.display = "block";
    textNode.style.display = "block";
}

function clearImage(obj, value) {

    var imageNode = document.getElementById("banner-switcher-target-image");
    var linkNode = document.getElementById("banner-switcher-link");
    var textNode = document.getElementById("banner-switcher-text");

    imageNode.style.display = 'none';
    linkNode.style.display = 'none';
    textNode.style.display = 'none';
}


function doUp(obj, funct, value, step, maxValue, delay, postUp) {
    if (value <= maxValue && obj) {
        funct(obj, value);
        value += step;
        setTimeout( function () {
            doUp(obj, funct, value, step, maxValue, delay, postUp);
        }, delay);
    } else {
        if (postUp) {
            postUp( obj, value );
        }
    }
}

function doDown(obj, funct, value, step, minValue, delay, postDown) {
    if ( value >= minValue && obj ) {
        funct( obj, value );
        value -= step;
        setTimeout( function () {
            doDown ( obj, funct, value, step, minValue, delay, postDown );
        }, delay );
    } else {
        if (postDown) {
            postDown(obj, value);
        }
    }
}


function fadeIn(obj, postFadeIn) {
    doUp(obj, setOpacity, 0, 5, 100, 40, postFadeIn);
}

function fadeOut(obj, postFadeOut) {
    doDown(obj, setOpacity, 100, 5, 0, 40, postFadeOut);
}

function nextImage() {
    if (!isSingleImage()) {
        if (locked) {
            return;
        }
        showImage(getNextIndex());
    }

}

function previousImage() {
    if (!isSingleImage()) {
        if (locked) {
            return;
        }
        showImage(getPreviousIndex());
    }
}

function showImage(index) {
    if (index >= 0) {
        locked = true;
        var targetImage = document.getElementById("banner-switcher-target-image");
        fadeOut(targetImage, function() {
            setImage(index);
            fadeIn(targetImage, function() {
                locked = false
                });
        }
        )
    }
}
