$(function(){
    /**
     * Funkcja która po najechaniu przez użytkownika
     * na pole .fader-trigger przeszukuje pole .fader-scope
     * w poszukiwaniu dzieci / potomków
     * (zależy czy .fader-scope posiada klase deep)
     * .fader-target i wyświetla je.
     * 
     * Obiekt .fader-scope powinien zawierać się w .fader-wrapper z nadanym ID
     * a pary obiektów .fader-trigger i .fader-target w tym samym obiekcie .fader-scope
     * @author Daniel Mendalka <daniel.mendalka@gmail.com>
     */
    $('.fader-wrapper .fader-trigger').mouseover(function(){
        if($(this).hasClass('fader-scope')) {
            var scope = this;
        } else {
            var scope = $(this).parents('.fader-scope:first');
        }
                                
        if(scope) {
            if($(scope).hasClass('deep')) {
                if($(scope).find('.fader-target:hidden').size()) {
                    $('.fader-wrapper .fader-target').fadeOut('fast');
                    $(scope).find('.fader-teaser').hide();
                    $(scope).find('.fader-target:hidden').fadeIn('fast');
                }
            } else {
                if($(scope).children('.fader-target:hidden').size()) {
                    $('.fader-wrapper .fader-target').fadeOut('fast');
                    $(scope).children('.fader-teaser').hide();
                    $(scope).children('.fader-target:hidden').fadeIn('fast');
                }
            }    
        }
    });
    
    /**
     * Funkcja ukrywająca wszystkie elementy .fader-target
     * kiedy użytkownik wyjedzie myszak poza obszar .fader-wrapper.
     * Żeby uniknąc konfliktu pomiędzy dwoma różnymi obiektami .fader-wrapper
     * są sprawdzane ich ID.
     * @author Daniel Mendalka <daniel.mendalka@gmail.com>
     */
    $('.fader-wrapper').mouseout(function(event){
        var wrapper_id = $(this).attr('id');
        
        if($(event.relatedTarget).parents('#' + wrapper_id).size() == 0) {
            $(this).find('.fader-target').fadeOut('fast');
            $(this).find('.fader-teaser').show();
        }
    });
    
    $('.collapsible-trigger').click(function(event){
        event.preventDefault();
        
        if($(this).hasClass('hide-after-action')) {
            $(this).hide();
        }
        
        if($(this).hasClass('all')) {
            var targetSelect = '.collapsible-target'
        } else {
            var targetSelect = '.collapsible-target:first'
        }
        var $wrapper = $(this).parents('.collapsible-wrapper:first');
        var $target = $wrapper.find(targetSelect);
        $wrapper.toggleClass('collapsed');
        if($(this).hasClass('all')) {
            if($wrapper.hasClass('collapsed')) {
                $target.slideDown('fast').removeClass('collapsed');
            } else {
                $target.addClass('collapsed').slideUp('fast');
            }
        } else {
            $target.slideToggle('fast').toggleClass('collapsed');
        }
        
        return false;
    });
    
    
    /**
     * Inicjalizacja tooltipów. Element powinien posiadać atrybut title
     * a po nim znajdować się tag z nadaną klasą tooltip.
     *
     * @author Daniel Mendalka <daniel.mendalka@gmail.com>
     */
    $('[title]').each(function() {
        if($(this).next().hasClass('tooltip')) {
            $(this)
                .tooltip({
                    predelay: 100,
                    delay: 300,
                    relative: true,
                })
                .dynamic({ bottom: { direction: 'down', bounce: true } })
                .parents('.header').css('overflow', 'visible');
        }
    });
    
    /**
     * Inicjalizacja shadowbox
     */ 
    Shadowbox.init({handleOversize: "drag"});
    
    $('.sticky-note .close').click(function(){
        $.ajax({url:'/configs/stickyNote/' + $(this).attr('id')});
        $('.sticky-note').fadeOut();
        return false;
    });
});

