﻿/// <reference path="../../js/jquery-1.4.1-vsdoc.js" />
var sliderIntervalID;
var sliderRestartTimeOutID;
var fadeOutTimerID;

jQuery.fn.infiniteCarousel = function() {
    return this.each(function() {
        var $wrapper = jQuery('> div', this),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            page = 1,
            pages = $items.length;

        function prevSliderImage(stopAutoSlide) {
            if (stopAutoSlide == true) pauseSlide();

            var left = (page == 1) ? sliderWidth * (pages - 1) : -1 * sliderWidth;

            $wrapper.filter(':not(:animated)').animate({
                scrollLeft: '+=' + left
            }, sliderSpeed, function() {
                if (page == 1) {
                    $wrapper.scrollLeft(sliderWidth * (pages - 1));
                    page = pages;
                }
                else {
                    page = page - 1;
                    $wrapper.scrollLeft(sliderWidth * (page - 1));
                }
            });

            return false;
        }

        function nextSliderImage(stopAutoSlide) {
            if (stopAutoSlide == true) pauseSlide();

            var left = ((page == pages) ? (-1 * sliderWidth * (pages - 1)) : sliderWidth);

            $wrapper.filter(':not(:animated)').animate({
                scrollLeft: '+=' + left
            }, sliderSpeed, function() {
                if (page == pages) {
                    $wrapper.scrollLeft(0);
                    page = 1;
                }
                else {
                    page = page + 1;
                    $wrapper.scrollLeft(sliderWidth * (page - 1));
                }
            });

            return false;
        }

        function pauseSlide() {
            //Clear interval to stop slide
            clearInterval(sliderIntervalID);

            //Clear timeout if any
            if (sliderRestartTimeOutID) clearTimeout(sliderRestartTimeOutID);

            //Add timeout to restart slide
            sliderRestartTimeOutID = setTimeout(function() {
                //Do first slide
                nextSliderImage(false);
                
                //Restart automatic slide
                sliderIntervalID = setInterval(function() {
                    nextSliderImage(false);
                }, sliderInterval);
            }, 20000);
        }

        //Check that there are more than one image
        if (pages > 1) {
            //Add back and forward
            $wrapper.before('<a id="BtnBack" style="background-image: url(\'' + R + 'Images/left_arrow_32x32.png\');"></a><a id="BtnForward" style="background-image: url(\'' + R + 'Images/right_arrow_32x32.png\');"></a>');

            //Bind to the forward and back buttons
            jQuery('#BtnBack').click(function() {
                return prevSliderImage(true);
            });

            jQuery('#BtnForward').click(function() {
                return nextSliderImage(true);
            });

            //Add hover show images
            jQuery("a#BtnBack, a#BtnForward, .SliderContainer > .SliderWrapper").hover(function() {
                if (jQuery.browser.msie) jQuery("a#BtnBack, a#BtnForward").css("z-index", "1").css("display", "block");
                else {
                    if (fadeOutTimerID) clearTimeout(fadeOutTimerID);
                    jQuery("a#BtnBack, a#BtnForward").stop().fadeTo(200, 1);
                }
            }, function() {
                if (jQuery.browser.msie) jQuery("a#BtnBack, a#BtnForward").css("z-index", "-1");
                else {
                    if (fadeOutTimerID) clearTimeout(fadeOutTimerID);
                    fadeOutTimerID = setTimeout(function() {
                        jQuery("a#BtnBack, a#BtnForward").stop().fadeTo(200, 0);
                    }, 100);
                }
            });

            //Start autoslide
            sliderIntervalID = setInterval(function() {
                nextSliderImage(false);
            }, sliderInterval);
        }
    });
};

if (typeof jQuery != 'undefined') {
    jQuery(document).ready(function() {
        jQuery('.SliderContainer').infiniteCarousel();
    });
}
