if (window.tc_isloaded === undefined) {
    var tc_isloaded = true;

    /**
     * Dauer des Effektes.
     * 
     * @type    {Number}
     */
    var tc_interval     = 3000;

    /**
     * Dauer der Pause zwischen den Bildwechseln.
     * 
     * @type    {Number}
     */
    var tc_pause        = 2000;

    var tc_timeout      = false;
    var tc_imageCounter = 2;

    var tc_containerCounter = 1;
    var tc_imageContainers  = $('#tc_banner_container .tc_banner');
    var tc_rotateImagecache = {};

    /**
     * Startet den Effekt und legt das Javascript auf die Links.
     * 
     * @param   {Object}    images
     */
    function tc_bannerRotate(images) {
        if (tc_timeout !== false) {
            return;
        }

        var links = $('div.tc_page_container a.tc_page');

        for (var index = 0, length = links.length; index < length; index++) {
            $(links[index]).click(function() {
                window.clearTimeout(tc_timeout);
                tc_imageContainers.stop(true, true);
                tc_imageCounter = this.id.split('_')[2];
                tc_rotateImages(images, true);
                $('#bar_emotion_big A.tc_page').removeClass('active');
                $(this).addClass('active');
                return false;
            });
        }

        var tc_imageElements = $('#tc_banner_container .tc_banner_image');
        tc_rotateImagecache[1] = tc_imageElements[0].cloneNode(true);
        tc_timeout = window.setTimeout(
            function() {
                tc_rotateImages(images);
            },
            tc_interval + tc_pause
        );
    }

    /**
     * Tauscht das ausgeblendete Bild durch das neue Bild aus und startet den
     * Effekt.
     * 
     * @param   {Object}    images
     * @param   {Boolean}   stop    Ob der nächste Tausch automatisch gestartet wird.
     */
    function tc_rotateImages(images, stop) {
        var tc_imageElements = $('#tc_banner_container .tc_banner_image');
        if (tc_rotateImagecache[tc_imageCounter] === undefined) {
            tc_rotateImagecache[tc_imageCounter] = tc_imageElements[1].cloneNode(true);
            tc_rotateImagecache[tc_imageCounter].src = images[tc_imageCounter].path;
            tc_rotateImagecache[tc_imageCounter].alt = images[tc_imageCounter].title;
            tc_rotateImagecache[tc_imageCounter].title = images[tc_imageCounter].title;
        }

        var first = tc_imageContainers[tc_containerCounter];

        tc_containerCounter = tc_containerCounter * (-1) + 1;

        var second = tc_imageContainers[tc_containerCounter];

        $('#bar_emotion_big A.tc_page').removeClass('active');
        $('#tc_page_' +tc_imageCounter).addClass('active');
        tc_imageElements[tc_containerCounter].parentNode.href = images[tc_imageCounter].link;
        tc_imageElements[tc_containerCounter].parentNode.replaceChild(tc_rotateImagecache[tc_imageCounter], tc_imageElements[tc_containerCounter]);


        if (tc_imageCounter >= images.length-1) {
            tc_imageCounter = 0;
        }

        tc_imageCounter++;

        tc_fadeImages(first, second);

        if (stop !== true) {
            tc_timeout = window.setTimeout(
                function() {
                    tc_rotateImages(images);
                },
                tc_interval + tc_pause
            );
        }
    }

    /**
     * Blendet das erste Element aus und das zweite ein.
     * 
     * @param   {HTMLElement}   first
     * @param   {HTMLElement}   second
     */
    function tc_fadeImages(first, second) {
        first = $(first);

        first.animate(
            {
                opacity: 'hide'
            },
            tc_interval
        );

        second = $(second);

        second.animate(
            {
                opacity: 'show'
            },
            tc_interval
        );
    }
}
