var NUM_SLIDES = 4;
var currentIndex = 0;
var SLIDE_DELAY = 10000;

var FADE_DELTA = 4;
var FADE_DELAY = 80;
var fadeDelta = FADE_DELTA;
var fadeCurrent = 0;
var fadeElem = null;

function currentSlide() {
    // returns the current slide
    return document.getElementById('slide'+currentIndex);
}

function nextSlide() {
    // check for error
    if(fadeElem!=null) {
        setTimeout(nextSlide, 100); // try again later
        return;
    }
    fadeOut(currentSlide());
    currentIndex++;
    if (currentIndex>=NUM_SLIDES) {
        currentIndex = 0; // reset to start
    }
    setTimeout(fadeInCurrent, 2*FADE_DELAY);
    setTimeout(nextSlide, SLIDE_DELAY);
}

function fadeInCurrent() {
    // check for error
    if(fadeElem!=null) {
        setTimeout(fadeInCurrent, 50);
        return;
    }
    fadeIn(currentSlide());
}

function fadeOut(elem) {
    fadeElem = elem; // only fade one elem at a time!
    fadeCurrent = 99;
    fadeDelta = -FADE_DELTA;
    _fade();
}
function fadeIn(elem) {
    fadeElem = elem; // only fade one elem at a time!
    fadeCurrent = 1;
    fadeDelta = FADE_DELTA;
    _fade();
}

function _fade() {
    fadeCurrent += fadeDelta;
    if (fadeCurrent>=100) {
        // faded in complete
        _setOpacity(fadeElem, 100);
        fadeElem.style.display = 'block';
        fadeElem = null;
    } else if (fadeCurrent<=0) {
        // faded out complete
        fadeElem.style.display = 'none';
        _setOpacity(fadeElem, 0);
        fadeElem = null;
    } else {
        _setOpacity(fadeElem, fadeCurrent);
        fadeElem.style.display = 'block';
        setTimeout(_fade, FADE_DELAY/(100/FADE_DELTA)); // recursive
    }
}



function _setOpacity(obj, opacity) {
    // taken legally from http://3rdmover.com/fade-in-and-fade-out-popups credit to Martin Joergensen (c) 2005
    opacity=(opacity==100) ? 99.999 : opacity;
    // IE/Win
    obj.style.filter="alpha(opacity:"+opacity+")";
    // Safari<1.2, Konqueror
    obj.style.KHTMLOpacity=opacity/100;
    // Older Mozilla and Firefox
    obj.style.MozOpacity=opacity/100;
    // Safari 1.2, newer Firefox and Mozilla, CSS3
    obj.style.opacity=opacity/100;
}

setTimeout(nextSlide, SLIDE_DELAY);
