﻿var preloadArray = new Array();

function slide(varImage) {
    slide("", "", varImage, "")
}

function slide(varName, varLink, varImage, varDescription) {
    this.Name = varName;
    this.Link = varLink;
    this.Image = varImage;
    this.Description = varDescription;
    preloadArray[preloadArray.length] = new Image();
    preloadArray[preloadArray.length - 1].src = varImage;
}

function slideShow(arrSlides, varFadeSpeed, varSpeed, varElementID, instanceName) {
    var varTimeOffset = 0;
    var varFadeFrameLimit = 24;
    //  continue or new
    var varFadeType = "new";

    var varLastSlideIndex = 0;
    var varCurrentSlideIndex = 0;
    var varSlideInterval;
    var varTimeout;

    var imageFade;
    var quoteFade;

    this.showSlide = function (varSlideIndexIn, varNewTimeout) {
        showSlide(varSlideIndexIn, varNewTimeout);
    }

    if (document.getElementById("divButtons" + varElementID) != null && arrSlides.length > 1) {
        for (i = 0; i < arrSlides.length; i++) {
            document.getElementById("divButtons" + varElementID).innerHTML += "<a href='javascript:" + instanceName + ".showSlide(" + i + ", true);' class='clsButton' id='btnSlide" + (i + 1) + "'></a>";
        }
    }

    function showSlide(varSlideIndexIn, varNewTimeout) {

        varCurrentSlideIndex = varSlideIndexIn;

        if (varCurrentSlideIndex > arrSlides.length - 1) {
            varCurrentSlideIndex = 0;
        }

        if (varNewTimeout && arrSlides.length > 1) {
            //alert(varTimeout);
            //clearTimeout(varTimeout);
            if (varFadeType == "new") {
                if (imageFade != undefined) {
                    imageFade.stop();
                }
                if (quoteFade != undefined) {
                    quoteFade.stop();
                }
            }
            clearInterval(varSlideInterval);
            varTimeout = setTimeout(function () { varSlideInterval = setInterval(function () { showSlide(varCurrentSlideIndex + 1, false) }, varSpeed); }, varTimeOffset);
            //alert(varTimeout);
        }

        if ((varFadeType == "new" || (varFadeType == "continue" && (!varNewTimeout || (imageFade == undefined || !imageFade.isFading())))) && arrSlides.length > 1) {
            imageFade = new fade("imgSlide" + varElementID, varFadeSpeed);
            imageFade.fadeOut();
            if (document.getElementById("txt" + varElementID) != null) {
                quoteFade = new fade("txt" + varElementID, varFadeSpeed);
                quoteFade.fadeIn();
            }
        }

        if (arrSlides.length > 1) {
            for (i = 1; i <= arrSlides.length; i++) {
                if (i == (varCurrentSlideIndex + 1)) {
                    document.getElementById("btnSlide" + i).style.backgroundPosition = 'bottom';
                } else {
                    document.getElementById("btnSlide" + i).style.backgroundPosition = 'top';
                }
            }
        }
        //set the current image as background
        document.getElementById("divSlide" + varElementID).style.backgroundImage = "url(" + arrSlides[varCurrentSlideIndex].Image + ")";
        document.getElementById("imgSlide" + varElementID).src = arrSlides[varLastSlideIndex].Image;
        if (document.getElementById("lnkSlide" + varElementID) != null) {
            document.getElementById("lnkSlide" + varElementID).href = arrSlides[varCurrentSlideIndex].Link;
        }
        if (document.getElementById("txt" + varElementID) != null) {
            document.getElementById("txt" + varElementID).innerHTML = arrSlides[varCurrentSlideIndex].Description;
        }
        //alert(arrSlides[varLastSlideIndex].Image);

        varLastSlideIndex = varCurrentSlideIndex;
    }

    function fade(elementId, millisec) {
        var varFadeInterval;
        var varIsFading;
        var speed = Math.round(millisec / 100);
        var varFadeFrame;
        var object;

        this.fadeIn = function () {
            changeOpacUp(0);
        };

        this.stop = function () {
            clearInterval(varFadeInterval);
        };

        this.isFading = function () {
            return (varFadeFrame < varFadeFrameLimit);
        };

        function changeOpacUp(varFadeFrameIn) {
            varFadeFrame = varFadeFrameIn;
            object = document.getElementById(elementId).style;
            object.opacity = (varFadeFrame / varFadeFrameLimit);
            object.MozOpacity = (varFadeFrame / varFadeFrameLimit);
            object.KhtmlOpacity = (varFadeFrame / varFadeFrameLimit);
            object.filter = "alpha(opacity=" + varFadeFrame * (100 / varFadeFrameLimit) + ")";
            if (varFadeFrame < varFadeFrameLimit) {
                varFadeInterval = setTimeout(function () { changeOpacUp(varFadeFrameIn + 1) }, speed * (100 / varFadeFrameLimit));
            }
        }

        this.fadeOut = function () {
            changeOpacDown(0);
        };

        function changeOpacDown(varFadeFrameIn) {
            varFadeFrame = varFadeFrameIn;
            object = document.getElementById(elementId).style;
            object.opacity = 1 - (varFadeFrame / varFadeFrameLimit);
            object.MozOpacity = 1 - (varFadeFrame / varFadeFrameLimit);
            object.KhtmlOpacity = 1 - (varFadeFrame / varFadeFrameLimit);
            object.filter = "alpha(opacity=" + (100 - (varFadeFrame * (100 / varFadeFrameLimit))) + ")";
            if (varFadeFrame < varFadeFrameLimit) {
                varFadeInterval = setTimeout(function () { changeOpacDown(varFadeFrameIn + 1) }, speed * (100 / varFadeFrameLimit));
            }
        }
    }
}
