$(document).ready(function() {

	$.fn.cb_fader = function(settings) {

		settings = $.extend({
			autoHeightEaseDuration: 	300,
			autoHeightEaseFunction: 	'easeInOutExpo',
			autoFade: 					true,
			autoFadeInterval: 			8000,
			autoFadeStopWhenClicked: 	true,
			dynamicTabs: 				true,
			fadeEaseDuration: 			300,
			fadeEaseFunction: 			'easeInOutExpo'
		}, settings);

		return this.each(function() {

            var fader = $(this);
            var panelWidth = fader.width();
            var panelCount = fader.find(".fader-element").size();
            var navClicks = 0;
            var currentPanel = 0;
            var panelContainerWidth = panelWidth;
            var panelHeights = new Array();

            var parentWidth = fader.parent().parent().parent().width();
            var duration = Number(fader.find(".duration").html() + "000");
            var timer;
            var timerstate = false;
            var $registertabcontent = fader.closest(".tabcontent");
            var $registertabs = fader.closest(".tab_container").prev().find("dd");
            var activetab = 0;

            //var tabcontent = fader.closest(".tabcontent");
            //var parentheight = tabcontent.innerHeight() - (parseInt(tabcontent.css('padding-top')) || 0) - ( parseInt(tabcontent.css('padding-bottom')) || 0);
            var parentHeight = fader.closest(".tabcontent").height();

            var parentWidthOffset = 30;
            var parentHeightOffset = 100;

            fader.css({ position:'relative', width:panelWidth});
            fader.find('.fader-content').css({ position:'absolute', display:'block', width:panelContainerWidth});


            // positionierung der inhalte (vertikal oder horizontal)

            fader.find('.fader-element').each(function(i) {
                currentElement = fader.find('.fader-element:eq(' + i + ')');
                currentElement.css({width:panelWidth});
                panelHeights.push(currentElement.height());
            });


            buildNavigation();

            init_All();

            //autoFade();
            if (timerstate) {
                timer = setTimeout(autoFade, duration);
            }

            $registertabs.click(function() {
                timerstate = 0;
                if($registertabcontent.find("div").is(':visible')) {
                    clearTimeout(timer);
                    timerstate = 1;
                    timer = setTimeout(autoFade, duration);
                }
            });

            fader.find('.tabs a').each(function(i) {
                $(this).bind("click", function() {
                    clearTimeout(timer);
                    timerstate = 1;
                    timer = setTimeout(autoFade, duration);
                    navClicks++;
                    currentPanel = i;
                    animateAll();
                    return false;
                });
            });

            function init_All() {
                if($registertabcontent.find("div").is(':visible')) {
                    timerstate = 1;    
                }

                //console.debug(fader.closest(".tab_container").prev().find("dd"));

                currentFader = fader.find('.fader-element:eq(0)');

                // Hide all but not first element
                fader.each(
                        function() {
                            $(this).find(".fader-element:gt(0)").css({display:'none'});
                        }
                        );

                fader.find('.fader-content').css({ top: 0 });
                //fader.css({ height: fader.find('.fader-element:eq(0)').height() });

                tabs = fader.find('.tabs');
                //tabs.css({ right:'10px', top:(panelHeights[0]-tabs.height()-5)});
                //tabs.css({ right:'10px', top:(parentHeight-parentHeightOffset)});
                tabs.find('a').removeClass('current');
                tabs.find('a:eq(0)').addClass('current');
            }

            ;


            function animateAll() {
                fader.find('.fader-content').fadeOut(settings.fadeEaseDuration,
                    // fallback
                        function() {

                            fader.find('.fader-element').each(function(i) {

                                currentElement = fader.find('.fader-element:eq(' + i + ')');
                                currentElement.css({display:'none'});

                                if (currentPanel == i) {

                                    tabs = fader.find('.tabs');
                                    //tabs.animate({ right:10, top:(panelHeights[i]-tabs.height()-5)}, settings.slideEaseDuration, settings.slideEaseFunction);
                                    tabs.find('a').removeClass('current');
                                    tabs.find('a:eq(' + currentPanel + ')').addClass('current');

                                    fader.animate({  }, settings.autoHeightEaseDuration, settings.autoHeightEaseFunction,
                                            function() {
                                                fader.find('.fader-element:eq(' + i + ')').css({display:'block'});
                                                fader.find('.fader-content').fadeIn(settings.fadeEaseDuration);
                                            }
                                            );
                                }
                            });
                        }

                        );
            }

            ;


            function buildNavigation() {

                dynamicTabs = '<div class="tabs"></div>';

                fader.find('.fader-content').after(dynamicTabs);

                div = fader.find('div.tabs');
                div.css({ position:'absolute','z-index':'99'});

                fader.find('.fader-element').each(function(i) {

                    if (i == panelCount - 1) {
                        div.append('<a href="#">' + (i + 1) + '</a>');
                    } else {
                        div.append('<a href="#">' + (i + 1) + '</a>&nbsp;|&nbsp;');
                    }
                });

            }

            ;

            function autoFade() {
                if (timerstate) {
                    if (currentPanel >= panelCount - 1) {
                        currentPanel = 0;
                        distance = 0;
                    } else {
                        currentPanel += 1;
                    };
                    clearTimeout(timer);
                    timer = setTimeout(autoFade, duration);
                    animateAll();
                }
            }

        });
	};

});
