﻿$(document).ready(function() {
    // #################################################################################################################### //
    // ##                                                                                                                ## //
    // ##  Homepage Slideshow Script (adapted from:                                                                      ## //
    // ##  http://sixrevisions.com/tutorials/javascript_tutorial/create-a-slick-and-accessible-slideshow-using-jquery/)  ## //
    // ##                                                                                                                ## //
    // #################################################################################################################### //

    var currentPosition = 0;
    var slideWidth = 879;
    var slideHeight = 411;
    var slides = $('.slide');
    var numberOfSlides = slides.length;
    var slidesInterval;

    if (numberOfSlides > 0) {
        // Remove scrollbar in JS
        $('#slidesContainer').css('overflow', 'hidden');

        // Wrap all .slides with #slideInner div
        slides
                .wrapAll('<div id="slideInner"></div>')
        // Float left to display horizontally, readjust .slides width
                .css({
                    'float': 'left',
                    'width': slideWidth
                });

        // Set #slideInner width equal to total width of all slides
        $('#slideInner').css('width', slideWidth * numberOfSlides);

        // Insert nav buttons into slideControl div -- DAVEV
        $('#slideshow')
                .append('<div id="slideControl"></div><div id="linkShield"></div>');
        for (var q = 0; q < numberOfSlides; q++) {
            $('#slideControl').append('<div class="control" id="slide' + q + '">' + (q + 1) + '</div>');
        }

        manageControls(0);

        // Create event listeners for .controls clicks
        $('.control')
            .bind('click', function() {
                // Determine new position
                currentPosition = $(this).attr('id').replace("slide", "");

                // stop rotation
                clearInterval(slidesInterval);

                // Hide / show controls
                manageControls(currentPosition);

                // Move slides
                moveSlides(currentPosition);
            });

        $('#slideImg0', slides).imagesLoaded(setSlideInterval);
    }

    function moveSlides(position) {
        // Move slideInner using margin-left
        $('#slideInner').animate({
            'marginLeft': slideWidth * (-position)
        });
    }

    // manageControls: Hides and shows controls depending on currentPosition
    function manageControls(position) {
        $(".control").removeClass("control_on");
        $(".control").eq(position).addClass("control_on");
    }

    // positionControls: Stick the navigation strip in the bottom-left corner of the rotating DIVS -- DAVEV
    function positionControls() {
        var slideLeftEdge = slides.offset().left + 40;
        var slideBottomEdge = slides.offset().top + slideHeight - 40;
        $('#slideControl').offset({ top: slideBottomEdge, left: slideLeftEdge });

        // linkShield is used to control the clickable areas of the slideshow image
        var slideControlOffset = $('#slideControl').offset();
        $('#linkShield').css({ 'text-indent': '0px', 'width': $('#slideControl').width() + 60, 'height': $('#slideControl').height() + 60 });
        $('#linkShield').offset({ top: slideControlOffset.top - 50, left: slideControlOffset.left - 10 });
    }

    // set the rotate interval for the slideshow
    function setSlideInterval() {
        clearInterval(slidesInterval);
        // on load set interval for slideshow to progress, then loop back to the beginning when the end of the slideshow is reached
        slidesInterval = setInterval(function() {
            if (currentPosition < numberOfSlides - 1) {
                currentPosition++;
            } else {
                currentPosition = 0;
            }
            moveSlides(currentPosition);
            manageControls(currentPosition);
        }, 8000);

        positionControls();
    }
});

// From https://gist.github.com/268257 and http://www.cjboco.com/blog.cfm/post/a-fix-for-paul-irish-s-imagesloaded-jquery-plug-in/
// $('img.photo',this).imagesLoaded(myFunction)
// execute a callback when all images have loaded.
// needed because .load() doesn't work on cached images

// mit license. paul irish. 2010.
// webkit fix from Oren Solomianik. thx!

// callback function is passed the last image to load
// as an argument, and the collection as `this`
(function($) {
    $.fn.imagesLoaded = function(callback) {
        var elems = this.filter('img'),
            	len = elems.length,
        // data uri bypasses webkit log warning (thx doug jones (cjboco))
            	blank = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
        elems.bind('load', function() {
            // check image src to prevent firing twice (thx doug jones (cjboco))
            if (--len <= 0 && this.src !== blank) {
                callback.call(elems, this);
            }
        }).each(function() {
            // cached images don't fire load sometimes, so we reset src.
            if (this.complete || this.complete === undefined) {
                var src = this.src;
                // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
                this.src = blank;
                this.src = src;
            }
        });
    };
} (jQuery));

