﻿function photoFader() {
    var g_sImageContainerId = "imagewrapper";
    // ID name of the img, following with an image number. start counting at the var g_iStartNumber
    var g_sImageId = "photofader_image_";
    // Start Number of the images ID
    var g_iStartNumber = 1;
    var g_iPauseSeconds = 2;
    var g_iFadeSeconds = 1;
    var g_bRandomBegin = true;
    var g_bRandomNext = true;


    var g_aImages = new Array();
    var g_iCount = 1;
    var g_iCurrentNumber = "";
    var g_oCurrentImage = "";
    var g_iNextNumber = "";
    var g_oNextImage = "";

    var g_oIntervalId;

    this.setSettings = setSettings;
    this.setOpacityImages = setOpacityImages;
    this.getFadingImages = getFadingImages;
    this.setStartImage = setStartImage;
    this.setNextImage = setNextImage;
    this.fadeImage = fadeImage;
    this.setOpacity = setOpacity;

    function setSettings(settings) {
        g_sImageContainerId = settings['g_sImageContainerId'];
        // ID name of the img, following with an image number. start counting at the var g_iStartNumber
        g_sImageId = settings['g_sImageId'];
        // Start Number of the images ID
        g_iStartNumber = settings['g_iStartNumber'];
        g_iPauseSeconds = settings['g_iPauseSeconds'];
        g_iFadeSeconds = settings['g_iFadeSeconds'];
        g_bRandomBegin = settings['g_bRandomBegin'];
        g_bRandomNext = settings['g_bRandomNext'];

        getFadingImages();
    }

    // Set the images from the "g_sImageContainerId" that have an id "g_sImageId" in the "g_aImages" array
    function getFadingImages() {
        if (document.getElementById(g_sImageContainerId)) {
            while (document.getElementById(g_sImageId + g_iCount)) {
                g_aImages.push(document.getElementById(g_sImageId + g_iCount).src);
                g_iCount++;
            }
            g_iCount--;

            setOpacityImages();
            setStartImage();
        }
    }

    function setOpacityImages() {
        for (i = 1; i <= g_iCount; i++) {
            oImageObj = document.getElementById(g_sImageId + i);
            setOpacity(oImageObj, 0);
        }
    }

    // Define a starting image, this can be set to random or the first image from the array
    function setStartImage() {
        if (g_bRandomBegin) {
            while (g_iCurrentNumber == "" || g_iCurrentNumber < g_iStartNumber) {
                g_iCurrentNumber = Math.round(g_iCount * Math.random());
            }
        } else {
            g_iCurrentNumber = g_iStartNumber;
        }

        g_oCurrentImage = document.getElementById(g_sImageId + g_iCurrentNumber);

        setOpacity(g_oCurrentImage, 100);

        if (g_iCount > 1) {
            setNextImage();
            g_oIntervalId = setTimeout(fadeImage, g_iPauseSeconds * 1000);
        }
    }

    // Define the next image that will fade
    function setNextImage() {
        if (g_bRandomNext) {
            g_iNextNumber = g_iCurrentNumber;
            while (g_iNextNumber == g_iCurrentNumber || g_iNextNumber < g_iStartNumber) {
                g_iNextNumber = Math.round(g_iCount * Math.random());
            }
        } else {
            if (g_iCurrentNumber == g_iCount) {
                g_iNextNumber = g_iStartNumber;
            } else {
                g_iNextNumber = g_iCurrentNumber + 1;
            }
        }

        g_oNextImage = document.getElementById(g_sImageId + g_iNextNumber);
        if (g_oNextImage) {
            setOpacity(g_oNextImage, 0);
        } else {
            alert('error loading image number ' + g_iNextNumber);
            setNextImage();
        }
    }

    // Fade the image out
    function fadeImage() {
        // if the nextImage has a higher view index then the current image, fade in the next image
        if (g_iNextNumber > g_iCurrentNumber) {
            iImageOpacity = g_oNextImage.style.opacity * 100;
            iFadeSteps = 100 / (30 * g_iFadeSeconds);

            if (iImageOpacity < 100) {
                iImageOpacity += iFadeSteps;
                setOpacity(g_oNextImage, iImageOpacity);

                g_oIntervalId = setTimeout(fadeImage, 30);
            } else {
                setOpacity(g_oCurrentImage, 0);
                setOpacity(g_oNextImage, 100);

                g_oCurrentImage = g_oNextImage;
                g_iCurrentNumber = g_iNextNumber;

                setNextImage();
                g_oIntervalId = setTimeout(fadeImage, g_iPauseSeconds * 1000);
            }
        }
        // if the nextImage has a lower view index then the current image, fade out the current image
        else {
            setOpacity(g_oNextImage, 100);

            iImageOpacity = g_oCurrentImage.style.opacity * 100;
            iFadeSteps = 100 / (30 * g_iFadeSeconds);

            if (iImageOpacity > 0) {
                iImageOpacity -= iFadeSteps;
                setOpacity(g_oCurrentImage, iImageOpacity);

                g_oIntervalId = setTimeout(fadeImage, 30);
            } else {
                setOpacity(g_oCurrentImage, 0);

                g_oCurrentImage = g_oNextImage;
                g_iCurrentNumber = g_iNextNumber;

                setNextImage();
                g_oIntervalId = setTimeout(fadeImage, g_iPauseSeconds * 1000);
            }
        }
    }

    // set the opacity of an image
    function setOpacity(imageObj, opacity) {
        opacityVal = Math.round(opacity);


        // Mozilla and Firefox
        imageObj.style.MozOpacity = opacityVal / 100;

        // Safari 1.2, Firefox and Mozilla, CSS3
        imageObj.style.opacity = opacityVal / 100;

        // IE - Win
        //  imageObj.style.filter = "alpha(opacity:"+opacityVal+")";
        imageObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacityVal + ")";


        // Safari Version < 1.2
        // Konqueror
        imageObj.style.KHTMLOpacity = opacityVal / 100;
    }
}
