﻿(function ($) {
    $.fn.fadeTransition = function (options) {
        var options = $.extend({ pauseTime: 5000, transitionTime: 2000, ignore: null, delayStart: 0, pauseNavigation: false }, options);
        var transitionObject;

        Trans = function (obj) {

            if (options.pauseOnMouseOver) {
                $(obj).mouseover(pause).mouseout(cue);
            }


            var timer = null;

            if (window.location.hash) {
                var current = window.location.hash.substring(1);

            } else {
                var current = 0;
            }



            var els = (options.ignore) ? $("> *:not(" + options.ignore + ")", obj) : $("> *", obj);
            $(obj).css("position", "relative");
            els.css("display", "none").css("left", "0").css("top", "0").css("position", "absolute");

            if (options.delayStart > 0) {
                setTimeout(showFirst, options.delayStart);
            }
            else
                showFirst();

            function pause() {
                if (timer)
                    clearTimeout(timer);
            }


            function showFirst() {
                if (options.ignore) {
                    $(options.ignore, obj).fadeOut(options.transitionTime);
                    $(els[current]).fadeIn(options.transitionTime);
                }
                else {
                    $(els[current]).css("display", "block");
                }
            }

            function transition(next) {
                $(els[current]).fadeOut(options.transitionTime);
                $(els[next]).fadeIn(options.transitionTime);
                current = next;
                cue();
            };

            function cue() {
                if ($("> *", obj).length < 2) return false;
                if (timer) clearTimeout(timer);
                if (!options.pauseNavigation) {
                    timer = setTimeout(function () { transition((current + 1) % els.length | 0) }, options.pauseTime);
                }
            };

            this.showItem = function (item) {
                if (timer) clearTimeout(timer);
                transition(item);
            };

            cue();
        }

        this.showItem = function (item) {
            transitionObject.showItem(item);
            var time = 1000;
        };

        return this.each(function () {
            transitionObject = new Trans(this);
        });
    }

})(jQuery);


