jQuery(document).ready(function($) {
    setTimeout(homepageAnimations, 500);
    if (jQuery('.slider-item').length > 1) {
        initializeSlideTimer();
    }
});

function homepageAnimations() {
    jQuery('#choose-your-path-block').waypoint(function(direction) {
        jQuery(this.element).addClass('complete');
    }, {
        offset: '100%'
    });

    jQuery('#why-choose-accessibility').waypoint(function(direction) {
        cascadeFade(jQuery(this.element).find('.fade'));
        jQuery(this.element).find('.slide-in').addClass('complete');
        jQuery(this.element).find('.background-slide-in').addClass('complete');
    }, {
        offset: '75%'
    });

    jQuery('#why-choose-value').waypoint(function(direction) {
        cascadeFade(jQuery(this.element).find('.fade'));
        jQuery(this.element).find('.slide-in').addClass('complete');
        jQuery(this.element).find('.background-slide-in').addClass('complete');
    }, {
        offset: '75%'
    });

    jQuery('#why-choose-transferability').waypoint(function(direction) {
        cascadeFade(jQuery(this.element).find('.fade'));
        jQuery(this.element).find('.slide-in').addClass('complete');
        jQuery(this.element).find('.background-slide-in').addClass('complete');
    }, {
        offset: '75%'
    });

    jQuery('#calendar-block').waypoint(function(direction) {
        jQuery(this.element).find('.background-slide-in').addClass('complete');
    }, {
        offset: '75%'
    });

    jQuery('.student-life-header').waypoint(function(direction) {
        jQuery(this.element).addClass('complete');
    }, {
        offset: '100%'
    });

    jQuery('#believe-achieve-succeed-block').waypoint(function(direction) {
        cascadeFade(jQuery(this.element).find('.fade'), true);
        jQuery(this.element).toggleClass('complete')
    }, {
        offset: '75%'
    });
}

function cascadeFade($elements, $toggle) {
    $toggle = typeof $toggle === 'undefined' ? false : $toggle;

    var $timeout = 0;

    for (var $i=0; $i < $elements.length; $i++) {
        setComplete(jQuery($elements[$i]), $timeout, $toggle);
        $timeout += 300;
    }
}

function setComplete($element, $timeout, $toggle) {
    $timeout = typeof $timeout === 'undefined' ? 0 : $timeout;
    $toggle = typeof $toggle === 'undefined' ? false : $toggle;

    setTimeout(function() {
        if ($toggle) {
            $element.toggleClass('complete');
        } else {
            $element.addClass('complete');
        }
    }, $timeout)
}

function initializeSlideTimer() {
    slideTimer = setInterval(function() {
        changeSlide(true)
    }, 6000);
}

function clearSlideTimer() {
    clearInterval(slideTimer);
}

function toggleSlideTimer() {
    var $paused = jQuery('#slide-pause-play').hasClass('paused');

    if ($paused) { //unpause
        jQuery('#slide-pause-play').removeClass('paused');
        initializeSlideTimer();
    } else { //pause
        jQuery('#slide-pause-play').addClass('paused');
        clearSlideTimer();
    }
}

// forward - if true, advance by 1; if false, move backwards by 1
// if an integer, advance to that particular slide
function changeSlide(forward) {
    var $currentSlide = jQuery('.slider-item.active');
    var $currentControl = jQuery('.slider-jump-control.active');
   
    if (typeof forward === 'boolean') {
        var $currentID = $currentSlide.attr('id');
        $currentID = parseInt($currentID.charAt($currentID.length - 1));
        var $allSlides = jQuery('.slider-item');

        if (forward) {
            var $nextID = $currentID + 1;
            // Skip to the beginning if you're trying to go forward beyond total slide count
            if ($nextID >= $allSlides.length) {
                $nextID = 0;
            }
        } else {
            var $nextID = $currentID - 1;
            // Skip to the end if you're trying to go backward from 0
            if ($nextID < 0) {
                $nextID = $allSlides.length - 1;
            }
        }
    } else { // it's a specific number
        var $nextID = forward;
    }

    var $nextSlide = jQuery('#slider-item-' + $nextID);
    var $nextControl = jQuery('#slider-jump-control-' + $nextID);

    $currentSlide.removeClass('active');
    $currentControl.removeClass('active');

    $nextSlide.addClass('active');
    $nextControl.addClass('active');

    if (!jQuery('#slide-pause-play').hasClass('paused')) {
        clearSlideTimer();
        initializeSlideTimer();
    }
}