/**
 * jQuery PlugIns by KK
 */
(function($){
    $.fn.ImageScroller = function(opts){

        var imageScroller = $(this);
        imageScroller.css({position:'relative',top:0,left:0});

        var currentIndex = 0;
        var maxIndex = 0;

        /**
         * Init the gloabl working "Config Object"
         */
        var config = {
            animateTime : 800,
            scrollerWidth : $(this).innerWidth(),
            scrollerHeight : $(this).innerHeight(),
            boxSelector : 'div.image_scoller_container',
            cntrls : false,
            slideshow : {
                enabled : false,
                startdelay : false,
                delay : 1000
            }
        };

        /**
         * Init the subpart for the CONTROLS
         */
        var cntrls = {
            left : false,
            right : false,
            buttonContainer : false,
            buttonClass : 'image_scoller_button',
            buttonContainerInactiveClass : 'inactive'
        };

        /**
         * Find controlls if they are named as standart
         */
        if($(this).find('.ctrl_left').length == 1){
            cntrls.left = imageScroller.find('.ctrl_left');
        }
        if($(this).find('.ctrl_right').length == 1){
            cntrls.right = imageScroller.find('.ctrl_right');
        }
        if($(this).find('.ctrl_bottom').length == 1){
            cntrls.buttonContainer = imageScroller.find('.ctrl_bottom');
        }





        // Insert the subpart into the config
        config.cntrls = cntrls;

        /**
         * Merge the opts into the config object
         */
        $.extend(true, config, opts);

        /**
         * Slideshow vars
         */
        var intervalObj = false;
        var showStatus = config.slideshow.enabled;
        var reEnableTimer = 0;
        /**
         * Define important private functions
         */

        /**
         * Adds a button to the bottom control panel
         *
         * @param elem The Boxelement the button should represent
         */
        function addBottomButton(index){
            if(!config.cntrls.buttonContainer)return false;
            var Btn = $('<a>').attr('href','#'+index).css({display:'inline-block'}).addClass(config.cntrls.buttonClass).click(function(){
                stopSlideShow();
                slideToBox(index);
                return false;
            });
            if(index == 0){
                Btn.addClass('active');
            }
            config.cntrls.buttonContainer.append(Btn);
        }

         function slideToBox(index,force){
             if(typeof force == 'undefined')force = 'none';
             // Ignore negative value
             if(index < 0)return;
             // get the element
             var elem = imageScroller.find(config.boxSelector).eq(index);
             imageScroller.find(config.boxSelector).css({
                 left:0
             });
             // ignore not existing elements
             if(elem.length == 0)return;
             // ignore the call if the element is already selected
             if(currentIndex == index)return;

             // animate backward
             if(force == 'right' || ( force == 'none' && currentIndex > index)){
                 // animate the new elem
                 /*elem.css({
                     left:(elem.outerWidth() * -1)
                 }).animate({
                     left:0
                 },config.animateTime);*/
                 // animate the current elem
                 /*imageScroller.find(config.boxSelector).eq(currentIndex).animate({
                     left:elem.outerWidth()
                 },config.animateTime);*/
                 var tmp_curr = currentIndex;
                 elem.show();
                 imageScroller.find(config.boxSelector).eq(tmp_curr).fadeOut(config.animateTime);
                 
             }

             // animate forward
             if(force == 'left' || ( force == 'none' && currentIndex < index)){
                 // animate the new elem
                 /*elem.css({
                     left:elem.outerWidth()
                 }).animate({
                     left:0
                 },config.animateTime);*/
                 // animate the current elem
                 /*imageScroller.find(config.boxSelector).eq(currentIndex).animate({
                     left:(elem.outerWidth() * -1)
                },config.animateTime);*/
                 var tmp_curr = currentIndex;
                 elem.fadeIn(config.animateTime,function(){
                     imageScroller.find(config.boxSelector).eq(tmp_curr).hide();
                 });
            }

            if(config.cntrls.buttonContainer){
                // Classmanagement for the bottom icons
                $('a.'+config.cntrls.buttonClass).removeClass('active');
                $('a.'+config.cntrls.buttonClass+'[href=#'+index+']').addClass('active');
            }

            if(config.cntrls.left){
                // Classmanagement for arrows
                if(index === 0){
                    config.cntrls.left.addClass(config.cntrls.buttonContainerInactiveClass);
                }else{
                    config.cntrls.left.removeClass(config.cntrls.buttonContainerInactiveClass);
                }
            }

            if(config.cntrls.right){
                if(index === maxIndex){
                    config.cntrls.right.addClass(config.cntrls.buttonContainerInactiveClass);
                }else{
                    config.cntrls.right.removeClass(config.cntrls.buttonContainerInactiveClass);
                }
            }

            currentIndex = index;
         }

        /**
         * End of functionblock
         *
         * Here starts the real Plugin
         */

        /**
         * Find the boxes to animate later on
         */
        imageScroller.find(config.boxSelector).each(function(i){
            var currentBox = $(this);
            if(i == currentIndex){
                currentBox.css({position:'absolute',top:0,left:0});
            }
            if(i > currentIndex){
                currentBox.css({position:'absolute',top:0,left:0,display:'none'});
            }
            if(i < currentIndex){
                currentBox.css({position:'absolute',top:0,left:0,display:'none'});
            }
            addBottomButton(i);
            maxIndex = i;



        });


        if(maxIndex <1)
        {
          imageScroller.find('.ctrl_pane').css('display','none');
        }

        if(config.cntrls.left) config.cntrls.left.click(function(){
            stopSlideShow();
            slideToBox((currentIndex - 1));
            return false;
        });

        if(config.cntrls.right) config.cntrls.right.click(function(){
            stopSlideShow();
            slideToBox((currentIndex + 1));
            return false;
        });

        /**
         * Fix bug that max occurs if the css does not set an height for the imagescoller
         * When we set the boxes and stuff to position:absolute this container may get a height of 0 which is pretty bad...
         */
        var tmp_parent;
        var tmp_current = imageScroller;
        while(imageScroller.height() == 0){
            tmp_parent = tmp_current.parent();
            if(tmp_parent.height() != 0){
                imageScroller.height(tmp_parent.height());
                break;
            }
            tmp_current = tmp_parent;
        }

        /**
         * Simple Slideshow
         */
        function startIntervalAction()
        {
            if(!showStatus)return;
            intervalObj = window.setInterval(function(){
                if(!showStatus){
                    stopSlideShow();
                    return;
                }
                if(currentIndex < maxIndex)slideToBox((currentIndex + 1));
                else slideToBox(0);
            },parseInt(config.slideshow.delay));
        }

        function reEnable()
        {
            var d = new Date();
            reEnableTimer = d.getTime();
            var tmp_time = d.getTime();
            var reEnDelay = parseInt(config.slideshow.delay * 2);
            if(config.slideshow.reenabledelay)reEnDelay = config.slideshow.reenabledelay;
            window.setTimeout(function(){
                if(tmp_time == reEnableTimer){
                    showStatus = true;
                    startIntervalAction();
                }
            },reEnDelay);
        }

        function stopSlideShow()
        {
            showStatus = false;
            if(intervalObj !== false){
                window.clearInterval(intervalObj);
                if(config.slideshow.reenable){
                    reEnable();
                }
            }
        }

        if(config.slideshow.enabled){
            if(config.slideshow.startdelay){
                window.setTimeout(function(){
                    slideToBox((currentIndex + 1));
                    startIntervalAction();
                },parseInt(config.slideshow.startdelay));
            }else startIntervalAction();
        }
    }
})(jQuery);
(function($){
    $.fn.kkTabs = function(opts){

        function error(msg){
            if(typeof console == 'object'){
                console.error(msg);
                return true;
            }else{
                if(typeof $.kkError == 'object'){
                    $.kkError.displayError(msg);
                    return true;
                }
            }
            return false;
        }

        var config = {
            navElem : 'ul',
            navItemElem : 'li',
            tabElem : 'div',
            tabEvent : 'click',
            tabContainerElem : false,
            delaySwitch : false,

            // Animationstuff
            tabNavAnmation : false,
            tabNavAnmationTime : 1000,
            tabContainerAnimation : false,
            tabContainerAnimationTime : 1000,
            disableWhileAnimate : true,

            containerClass : 'tab-container',
            navClass : 'tab-nav',
            navItemClass : 'tab-nav-item',
            navItemActiveClass : 'active',
            tabClass : 'tab-tabItem',
            tabActiveClass : 'active',

            startTab : 0,
            prevendDefaultLinkAction : true
        };
        $.extend(true, config, opts);

        var container = $(this);
        var nav = container.find(config.navElem);
        var navItems = nav.children(config.navItemElem);

        function fetchTabs(){
            if(config.tabContainerElem != false){
                if(typeof config.tabContainerElem == 'string')return container.find(config.tabContainerElem).children(config.tabElem);
                else if(typeof config.tabContainerElem == 'object'){
                    var allTabs = new Array();
                    for(var i in config.tabContainerElem){
                        allTabs.push(container.find(config.tabContainerElem[i]).children(config.tabElem));
                    }
                    allTabs['multi'] = true;
                    return allTabs;
                }else{
                    return [];
                }
            }else{
                return container.children(config.tabElem);
            }
        }

        var tabs = fetchTabs();

        container.addClass(config.containerClass);
        nav.addClass(config.navClass);
        navItems.addClass(config.navItemClass);

        if(navItems.length <= 0){
            error('No navitems found for building tabs');
            return;
        }
        /*if(navItems.eq(config.startTab).length <= 0){
            if(navItems.eq(0).length > 0) config.startTab = 0;
            else {
                error('Unable to fetch tabnavigation [E01]');
                return;
            }
        }*/
        navItems.eq(config.startTab).addClass(config.navItemActiveClass);

        /**
         * Default action for Content toggle
         */
        var toggleContainer = function(index){
            getTab().hide().removeClass(config.tabActiveClass);
            getTab(index).show().addClass(config.tabActiveClass);
        }

        /**
         * Functions for handling multi and single tab Container
         */
        var getTab = function(index){
            if(typeof index == 'undefined' || isNaN(index)){
                if(tabs['multi']){
                    var returnTabs = $();
                    for(var i in tabs){
                        if(!isNaN(i)) returnTabs = $.merge(returnTabs,tabs[i]);
                    }
                    return returnTabs;
                }else{
                    return tabs;
                }
            }else{
                if(tabs['multi']){
                    var returnTabs = $();
                    for(var i in tabs){
                        if(!isNaN(i)) returnTabs = $.merge(returnTabs,tabs[i].eq(index));
                    }
                    return returnTabs;
                }else{
                    return tabs.eq(index);
                }
            }
        };

        var filterTabs = function(filter)
        {
            if(tabs['multi']){
                var returnTabs = $();
                for(var i in tabs){
                    if(!isNaN(i)) returnTabs = $.merge(returnTabs,tabs[i].filter(filter));
                }
                return returnTabs;
            }else{
                tabs.filter(filter);
            }
        };

        var adjustTextColor = function(index){
            if(navItems.eq(index).children('a').length > 0){
                getTab(index).find('a,p,ul,div').css('color',navItems.eq(index).children('a').css('color'));
            }
        };

        var switchTab = function(navItem)
        {
            // Nav
            navItems.removeClass(config.navItemActiveClass);
            if(!config.tabNavAnmation){
                navItem.addClass(config.navItemActiveClass);
            }else{
                navItem.animate(config.tabNavAnmation,config.tabNavAnmationTime,function(){
                    navItem.addClass(config.navItemActiveClass);
                });
            }

            // Content
            var index = navItem.index();
            if(!config.tabContainerAnimation){
                toggleContainer(index);
            }else{
                switch(config.tabContainerAnimation){
                    case 'fade':
                        if(!config.disableWhileAnimate)getTab().stop(false,true);
                        filterTabs('.'+config.tabActiveClass).fadeOut(config.tabContainerAnimationTime, function(){
                            $(this).removeClass(config.tabActiveClass);
                            getTab(index).fadeIn(config.tabContainerAnimationTime, function(){
                                $(this).addClass(config.tabActiveClass);
                            });
                        });
                        break;
                    case 'fadeAnColor':
                        if(!config.disableWhileAnimate)getTab().stop(false,true);
                        filterTabs('.'+config.tabActiveClass).fadeOut(config.tabContainerAnimationTime, function(){
                            $(this).removeClass(config.tabActiveClass);
                            adjustTextColor(index);
                            getTab(index).css('backgroundColor',navItem.css('backgroundColor')).fadeIn(config.tabContainerAnimationTime, function(){
                                $(this).addClass(config.tabActiveClass);
                            });
                        });
                        break;
                    case 'color':
                        toggleContainer(index);
                        getTab(index).css('backgroundColor',navItem.css('backgroundColor'));
                        adjustTextColor(index);
                        break;
                    default :
                        toggleContainer(index);
                        break;
                }
            }
        }

        // Init start Tab
        getTab().hide();
        getTab(config.startTab).show().addClass(config.tabActiveClass);
        switch(config.tabContainerAnimation){
            case 'color':
            case 'fadeAnColor':
                getTab(config.startTab).css('backgroundColor',navItems.eq(config.startTab).css('backgroundColor'));
                adjustTextColor(config.startTab);
                break;
        }

        // Event
        var status;
        navItems.bind(config.tabEvent,function(){
            if(config.disableWhileAnimate && tabs.is(':animated'))return false;
            status = $(this).index();
            var tmp_status = status;
            var navItem = $(this);

            if(!isNaN(config.delaySwitch))
            {
                window.setTimeout(function(){
                    if(status == tmp_status){
                        switchTab(navItem);
                    }
                },config.delaySwitch);
            }
            else switchTab(navItem);

            return (config.prevendDefaultLinkAction != true);
        });

        navItems.mouseleave(function(){
            status = 9999;
        });
    }
})(jQuery);

function fixTeamMargin()
{
    var finalMargin = 0;
    for(var i = 0; i < 3; i++){
        var margin_elem = $('.keyvisual').children('*:eq('+(i+1)+')').height() + 2;
        if(margin_elem > finalMargin) finalMargin = margin_elem;
    }
    $('.keyvisual').css('marginBottom',finalMargin);
}
/**
 * Document Ready
 */
$(function(){
    if($('div.img_scroller').length > 0){
        $('div.img_scroller div.service_teaser_content').ImageScroller({slideshow:{
                enabled:true,
                delay:6000,
                reenable : true
            },
            animateTime:3000
        });
    }

    if($('.info_btn').length > 0){
        $(".info_btn:not('.active')").live('click',function(){
            $('div.keyvisual_info, img.img_default').hide();
            $('div.keyvisual_info_left, div.keyvisual_info_right, img.img_left, img.img_right').hide();
            if($(this).parents('div.keyvisual_text_left').length > 0){
                $('div.keyvisual_info_left, img.img_left').removeClass('dn').css('display','block');
                
            }else{
                $('div.keyvisual_info_right, img.img_right').removeClass('dn').css('display','block');
            }
            $('.info_btn.active').removeClass('active');
            $(this).addClass('active');
            return false;
        });
    }

    if($('div.grid24_tabteaser').length){
        $('div.grid24_tabteaser').kkTabs({
            navElem : 'div.grid24_tabteaser_menu ul',
            tabContainerElem : 'div.grid24_tabteaser_content'
        });
    }


    if($('#team').length > 0){
        fixTeamMargin();
    }
});
