﻿/*
Extended infinite carousel plugin [GBE] - 20101013
*/
(function ($) {
    $.fn.extend({
        extendedCarousel: function (options) {
            var defaults = {
                suffixImage: '-image',
                suffixText: '-text',
                durationIn: "slow",
                opacityIn: 1.0,
                durationOut: "slow",
                opacityOut: 0,
                textholderHeight: 0,
                displayProgressBar: false,
                displayThumbnailBackground: false,
                thumbnailFontSize: '1em',
                showControls: false
            };
            var options = $.extend(defaults, options);

            return this.each(function () {
                var o = options;
                var id = $(this).attr("id");
                var obj = $("#" + id + o.suffixText);

                $("#" + id + o.suffixImage).infiniteCarousel($.extend(options, { onSlideStart: SlideStart }));

                $(obj).css({ 'position': 'relative', 'overflow': 'hidden' })
                $('ul', obj).css({ 'list-style': 'none', 'margin': '0', 'padding': '0', 'position': 'relative' })
                $('li', obj).css({ 'list-style': 'none', 'position': 'absolute', 'top': '0', 'left': '0', 'background-color': '#fff' }); // bg color added because FadeTo causes pixelated text in any IE

               $('li', obj).css('z-index', 0).customFadeTo(o.durationOut, o.opacityOut);
               $('li:first', obj).css('z-index', 10).customFadeTo(o.durationIn, o.opacityIn);

                function SlideStart(viewable, dir) {
                    var currentObj = $('li', obj).eq(viewable[0] - 1);

                    currentObj.siblings().css('z-index', 0).customFadeTo(o.durationOut, o.opacityOut);
                    currentObj.css('z-index', 10).customFadeTo(o.durationIn, o.opacityIn);
                }
            });
        }
    });

    // fixed fadeTo problem in IE : http://www.kevinleary.net/jquery-fadein-fadeout-problems-in-internet-explorer/
    $.fn.customFadeTo = function (speed, to, callback) {
        return this.animate({ opacity: to }, speed, function () {
            if (to == 1 && jQuery.browser.msie)
                this.style.removeAttribute('filter');
            if (jQuery.isFunction(callback))
                callback();
        });
    };

})(jQuery);
