/* Copyright 2011 Unternehmen Online GmbH & Co. KG */
/* Author: Christian Drengenberg */

(function($) {
        
    $.fn.uoImageRotation = function(options) {
        
        var defaultOptions = { rotationSpeed : 3000, effectSpeed : 500,  progressClass : 'uo-rotation-progress',
            itemsContainerClass : 'uo-items', itemsClass: 'uo-rotation-item' };
        
        options = $.extend(defaultOptions, options);
        
        var $parent = $(this);
        var $progress;
        var progressLength = 0;
        
        if($parent.length > 1) {
            $parent.each(function() { $(this).uoImageRotation(options); })
        }
        else {
            $progress = $('.' + options.progressClass, $parent);
            progressLength = $progress.length;
            
            var $itemsContainer = $('.' + options.itemsContainerClass, $parent);
            var $items = $('.' + options.itemsClass, $parent);
            var interval;
            
            if(progressLength > 1)
            {
                interval = setInterval(__rotate, options.rotationSpeed);
                
                $itemsContainer.append($($items.get(0)));
                $items = $('.' + options.itemsClass, $parent);
                  
                $items.mouseenter(function() { clearInterval(interval); });
                $items.mouseleave(function() { interval = setInterval(__rotate, options.rotationSpeed / 2); });
            }
        }
        
        function __rotate() {
            var $cur = $($items.get(0));
            var $next = $cur.next();
                        
            $cur.hide(function() {
                var $curProg = $($progress.get(progressLength-1));
                
                $progress.parent().prepend($curProg);
                $progress = $('.' + options.progressClass, $parent);
                
                $itemsContainer.append($cur);
                $items = $('.' + options.itemsClass, $parent);
                $items.fadeIn(options.effectSpeed);
            });
        }
    }
    
})(jQuery);

(function($) {
        
    $.fn.uoFoldTeaser = function(options) {
        
        var defaultOptions = { effectSpeed : 250,  collapsedItemClass : 'uo-fold-teaser-collapsed', visibleItemClass: 'uo-fold-teaser-visible',
            headItemClass : 'uo-fold-teaser-head' };
        
        options = $.extend(defaultOptions, options);
        
        var $parent = $(this);
        
        if($parent.length > 1) {
            $parent.each(function() { $(this).uoFoldTeaser(options); })
        }
        else {
           var $collapsedItem = $('.' + options.collapsedItemClass, $parent);
           var $visibleItem = $('.' + options.visibleItemClass, $parent);
           var $headItem = $('.' + options.headItemClass, $parent);
           
           $visibleItem.hide();
           
           $headItem.click(function() {
                $collapsedItem.toggle();
                $visibleItem.slideToggle(options.effectSpeed);
                //$headItem.click(function() { $visibleItem.slideUp(options.effectSpeed); $collapsedItem.show(options.effectSpeed); });
           });
        }
    }
    
})(jQuery);

(function($) {
        
    $.fn.uoFlyoutNavigation = function(options) {
        
        var defaultOptions = { effectSpeed : 250,  level1Class : 'uo-navigation-01', level2Class: 'uo-navigation-02', level3Class: 'uo-navigation-03',
            itemOnClass : 'on', lockedClass : 'uo-locked' };
        
        options = $.extend(defaultOptions, options);
        
        var $parent = $(this);
        var hideTimer;
        var timeoutId;
        
        if($parent.length > 1) {
            $parent.each(function() { $(this).uoFoldTeaser(options); })
        }
        else {
           $level1Items = $('.' + options.level1Class, $parent).children();
           $level2Items = $('.' + options.level2Class, $parent);
           $level2Items.hide();
           
           var level1ItemsLength = $level1Items.length;
           var $firstItem = $level1Items.eq(0);
           
           var firstPosition = $firstItem.position();
           var firstSize = { width : $firstItem.width(), height : $firstItem.height() };
           var level2Pos = { left : firstPosition.left, top : firstSize.height };
           
           $parent.mouseleave(function() {
                $level1Items.filter('.' + options.lockedClass).addClass(options.itemOnClass);
           })
           
           $(window).resize(function() {
                firstPosition = $firstItem.position();
                level2Pos = { left : firstPosition.left, top : firstSize.height };
            });

           $level1Items.mouseenter(function() {
                $level1Items.removeClass(options.itemOnClass);
                $(this).addClass(options.itemOnClass);
                
                $level2Items.hide();
                $level2ItemsLocal = $(this).find('.' + options.level2Class);
                $level2ItemsLocal.css({ position : 'absolute', left : level2Pos.left, top : level2Pos.top + $(this).position().top, 'z-index' : 100000 });
                
                if(!timeoutId)
                    timeoutId = setTimeout(showItems, options.effectSpeed);
           });
           
           $level1Items.mouseleave(function() {
                if(timeoutId)
                {
                    clearTimeout(timeoutId);
                    timeoutId = null;
                }
                
                $(this).removeClass(options.itemOnClass);
                $level2Items.hide();
           });
           
           function showItems() {
            $level2ItemsLocal.show();
           }
        }
    }
    
})(jQuery);

(function($) {
    
    $.fn.uoAnyBox = function(options) {
        
        var defaultOptions = { fadeBackground : true };
        
        options = $.extend(defaultOptions, options);
        
        var $parent = $(this);
        
        if($parent.length > 1) {
            $parent.each(function() { $(this).uoAnyBox(options); });
        }
        else {
            var relItemClass = $parent.attr('rel');
            var $relItem = $('.' + relItemClass).hide();
            var $bg = $('<div/>').hide();
            
            $relItem.click(function() { $relItem.slideUp(500, function() { $bg.fadeOut(500); }); });
            $parent.click(function() { return __show($relItem); });
            $(window).resize(function() { if($relItem.is(':visible')) __show($relItem); }).scroll(function() { if($relItem.is(':visible')) __show($relItem); });
        }
        
        function __show($item) {
            var itemSize = { width : $item.width(), height : $item.height() };
            var position = { left : ($(window).width() - itemSize.width) / 2, top : (($(window).height() - itemSize.height) / 2) + $(window).scrollTop() };
            var css = { position : 'absolute', left : position.left, top : position.top, 'z-index' : 10000 };
            
            $bg.css({ position: 'absolute', left : 0, top : 0, background : '#000', width : '100%', height : $(document).height(), filter : 'alpha(opacity=50)',
                    '-moz-opacity' : 0.50, opacity: 0.50 });
                    
            $item.css(css);           
            
            if(!$item.is(':visible'))
            {
                $bg.appendTo('body').fadeIn(500, function() {
                    $item.slideDown(500);
                });
            }
            
            return false;
        }
    }
    
})(jQuery);

(function(jQuery) {
    
    jQuery.fn.uoSimpleZoom = function(options) {
        
        var defaults = {
            startWidth : 640,
            startHeight : 480,
            endWidth : 0,
            endHeight : 0,
            border : 'solid 2px #aaa',
            animationSpeed : 500
        };    
        
        if(this.length > 1)
        {
            this.each(function() { $(this).uoSimpleZoom(options); });
            return;
        }
        
        var options = $.extend(defaults, options);
        var $window = $(window);
        var $document = $(document);
        var $body = $document.find('body');
        var $parent = this;
        
        var $loader = $('<img src="fileadmin/templates/javascript/slideshow/ajax-loader.gif" />').hide();
                
        $body.append($loader);
                        
        window.uoSimpleZoomIsActive = false;
        
        var _getPrev = function($item) {
            
            var $prev = $item.prev();
                    
            if($prev.length == 0)
                $prev = $parent.eq($parent.length - 1);
            
            return $prev;
        }
        
        var _getNext = function($item) {
            
            var $next = $item.next();
                    
            if($next.length == 0)
                $next = $parent.eq(0);
            
            return $next;
        }
                
        this.click(function(e) {
            
            if(!window.uoSimpleZoomIsActive) {
                window.uoSimpleZoomIsActive = true;
                
                var $closeButton = $('<img src="fileadmin/templates/javascript/slideshow/quad.png" style="cursor: pointer" />').css({ opacity : 0.5 });
                $closeButton.mouseover(function() { $(this).css({ opacity : 1 }); }).mouseleave(function() { $(this).css({ opacity : 0.5 }); });
                $body.append($closeButton);
                $closeButton.hide();
                
                var $clicker = $(this).parent();
                var $next = _getNext($(this));
                var $prev = _getPrev($(this));
                var startPosition = { top : $clicker.offset().top, left : $clicker.offset().left };
                var loaderPosition = { top : startPosition.top + $(this).height() / 2 - $loader.height() / 2, left : startPosition.left + $(this).width() / 2 - $loader.width() / 2 };
                
                var backImages = { off: 'fileadmin/templates/javascript/slideshow/backwards.png', on: 'fileadmin/templates/javascript/slideshow/backwards.hover.png' };
                var nextImages = { off: 'fileadmin/templates/javascript/slideshow/forwards.png', on: 'fileadmin/templates/javascript/slideshow/forwards.hover.png' };
        
                var $arrowBack = $('<img style="display: none; cursor: pointer">').attr('src', backImages.off);
                var $arrowNext = $('<img style="display: none; cursor: pointer">').attr('src', nextImages.off);
                                
                $arrowBack.mouseover(function() { $(this).attr('src', backImages.on); }).mouseout(function() { $(this).attr('src', backImages.off); });
                $arrowNext.mouseover(function() { $(this).attr('src', nextImages.on); }).mouseout(function() { $(this).attr('src', nextImages.off); });
                
                $loader.css({ position : 'absolute', 'z-index' : 11000, left : loaderPosition.left, top : loaderPosition.top });
                $loader.show();
                                                
                var $image = $('<img src="'+  $(this).attr('href') +'" />').hide().load(function() {
                    
                    var imageSize = { width : (options.endWidth ? options.endWidth : $image.width()), height : (options.endHeight ? options.endHeight : $image.height()) };
                    var endPosition = { left : ($window.width()-imageSize.width)/2 + $document.scrollLeft(), top : ($window.height()-imageSize.height)/2 + $document.scrollTop() };
                    var arrowBackPosition = { left : endPosition.left, top : endPosition.top + imageSize.height / 2 - $arrowBack.height() / 2 };
                    var arrowNextPosition = { left : endPosition.left + imageSize.width - $arrowNext.width(), top : endPosition.top + imageSize.height / 2 - $arrowBack.height() / 2 };
                    var closeButtonPosition = { top : endPosition.top + 10, left : endPosition.left + imageSize.width - $closeButton.width() - 10};
        
                    $closeButton.css({ position : 'absolute', 'z-index' : 11000, left : closeButtonPosition.left, top : closeButtonPosition.top });
                    $closeButton.show();
        
                    $image.css({ position : 'absolute', 'z-index' : 10000, left : startPosition.left, top : startPosition.top, width : options.startWidth, height : options.startHeight });            
                    $image.show().animate({ left: endPosition.left, top : endPosition.top, width : imageSize.width, height : imageSize.height }, options.animationSpeed, function() {
                        $arrowBack.css({ position : 'absolute', 'z-index' : 11000, left : arrowBackPosition.left, top : arrowBackPosition.top }).fadeIn();
                        $arrowNext.css({ position : 'absolute', 'z-index' : 11000, left : arrowNextPosition.left, top : arrowNextPosition.top }).fadeIn();
                        $loader.hide();
                    });
                });
                
                $closeButton.click(function() { $image.trigger('click'); });
                
                var _loadImageFromArrow = function(imageUrl) {
                    var loaderPosition = { left : $image.offset().left + $image.width() / 2 - $loader.width() / 2,
                        top : $image.offset().top + $image.height() / 2 - $loader.height() / 2 };
                    
                    $loader.css({ left : loaderPosition.left, top : loaderPosition.top });
                    $loader.show();
                    
                    $image.unbind('load');
                    
                    $image.load(function() { $loader.hide(); });
                    $image.attr('src', imageUrl);
                }
                
                $arrowBack.click(function() {
                    _loadImageFromArrow($prev.attr('href'));
                    $next = _getNext($prev);                
                    $prev = _getPrev($prev);    
                });
                
                $arrowNext.click(function() {
                    _loadImageFromArrow($next.attr('href'));                    
                    $prev = _getPrev($next);
                    $next = _getNext($next);
                });
                             
                $image.css({ border : options.border, cursor : 'pointer' });
                
                $body.append($image);
                $body.append($arrowBack);
                $body.append($arrowNext);
                                                                                         
                $image.click(function() {
                    $arrowBack.remove();
                    $arrowNext.remove();
                    $closeButton.hide();
                    
                    $(this).animate({ left: startPosition.left, top : startPosition.top, width : options.startWidth, height : options.startHeight }, options.animationSpeed, function(){
                        $(this).fadeOut(function() {
                            window.uoSimpleZoomIsActive = false;
                            $(this).remove();
                        });
                    });
                });
            }
            
            return false;
        });
    }
    
})(jQuery);

