(function($){
    
    var set = {
        sliderSelector: '#sliderBox',
        auto: true,
        timeOut: 2000,
        autoSlideTime: 10000
    }
    
    var fn = {
        sliderButton: function(args) {
            var $this = $(this);
            set = $.extend({}, set, args);

            $this.data('rexxScreenSliderButton', set);
            $this.click(fn.showSlider);
        },
        showSlider: function(e) {
            if(e && typeof e.preventDefault == 'function') {
                e.preventDefault();
            }
            
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
                        
            if($(set.sliderSelector).length <= 0) {
                fn._loadSlider.apply(this, true);
            }
            if(!$(set.sliderSelector).attr('rexxScreenSlider')) {
                fn._initSlider.apply(this);
            }
            
            $(set.sliderSelector).find('.s3sliderImage').each(function() {
                $(this).hide();
                $(this).find('img').css('opacity', 0);
            });
            set.current = $(set.sliderSelector).find('.s3sliderImage:first');
 
            $this.data('rexxScreenSliderButton', set);
            
            $(set.sliderSelector).jqmShow();

            fn._slideIn.call(this, set.current);
            
            if($.browser.msie) {
                $('.jqmOverlay').css({
                    position: 'absolute',
                    height: $('#container').height()
                });
            }
            
            fn._centerBox.call(this, set.current);
        },
        hideSlider: function(h) {
            
            h.w.find('span.text').hide();
            
            h.w.hide();
            h.o.remove();
            fn._stopAutoSlide.apply(this);
        },
        _loadSlider: function(show) {
            
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            if(!$(set.sliderSelector).attr('rexxScreenSlider')) {
                fn._initSlider.apply(this);
            }
            // laden und dannach
            $(this).trigger('click');
        },
        _initSlider: function() {
            
            var _this = this;
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            var win = $(set.sliderSelector);
            $(set.sliderSelector).remove();
            $('body').prepend(win);
            
            $(set.sliderSelector).jqm({onHide: function(hash){fn.hideSlider.call(_this, hash);}}).jqmAddClose('.jqmOverlay').jqmAddClose('#paging #close').attr('rexxScreenSlider', true);

            $(set.sliderSelector).find('#paging #prev').click(function(e) {
                e.preventDefault();
                fn._prev.call(_this, {auto: false});
            });
            $(set.sliderSelector).find('#paging #next, #s3SliderContent img').click(function(e) {
                e.preventDefault();
                fn._next.call(_this, {auto: false});
            });
            $(set.sliderSelector).find('#paging #stop').click(function(e) {
                e.preventDefault();
                fn._stopAutoSlide.apply(_this);
            });
            $(set.sliderSelector).find('#paging #play').click(function(e) {
                e.preventDefault();
                fn._autoSlide.apply(_this);
            });
            
            $('#paging #close').css({cursor: 'pointer'});
            
            if(set.auto) {
                fn._autoSlide.apply(this);
                $(set.sliderSelector).find('#paging #stop').show().css({cursor: 'pointer'});
                $(set.sliderSelector).find('#paging #play').hide().css({cursor: 'pointer'});
            } else {
                $(set.sliderSelector).find('#paging #stop').hide().css({cursor: 'pointer'});
                $(set.sliderSelector).find('#paging #play').show().css({cursor: 'pointer'});
            }
        },
        _prev: function(args) {
            
            if(typeof args == 'undefined') {
                args = {};
            }

            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            if(typeof args.auto != 'undefined' && args.auto === false) {
                fn._stopAutoSlide.apply(this);
            }

            if(!set.current || !set.current.length) {
                set.current = $(set.sliderSelector).find('.s3sliderImage:first');
            }

            var prev = set.current.prev();
            
            if(!prev || !prev.length) {
                prev = $(set.sliderSelector).find('.s3sliderImage:last');
            }
            
            fn._slide.call(this, {outElement: set.current, inElement: prev});
            set.current = prev;
        },
        _next: function(args) {

            if(typeof args == 'undefined') {
                args = {};
            }

            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            if(typeof args.auto != 'undefined' && args.auto === false) {
                fn._stopAutoSlide.apply(this);
            }
            
            if(!set.current || !set.current.length) {
                set.current = $(set.sliderSelector).find('.s3sliderImage:first');
            }

            var next = set.current.next();
            
            if(!next || !next.length) {
                next = $(set.sliderSelector).find('.s3sliderImage:first');
            }
            
            fn._slide.call(this, {outElement: set.current, inElement: next});
        },
        _slide: function(args) {

            var _this = this;
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            if(args.outElement.is(':hidden') || args.inElement.is(':visible')) {
                return;
            }
            var outElementSpan = args.outElement.find('span.text');
            
            fn._fadeTextOut.call(_this, outElementSpan, function() {
                fn._fadeImgOut.call(_this, args.outElement, function() {
                    fn._slideIn.call(_this, args.inElement);
                });
            });
            
//            if(outElementSpan.css('bottom') == 0) {
//                $(outElementSpan).slideDown((set.timeOut/2), function() {
//                    $(args.outElement).fadeOut((set.timeOut/2), function() {
//                        fn._slideIn.call(_this, args.inElement);
//                    });
//                });
//            } else {
//                $(outElementSpan).slideUp((set.timeOut/2), function() {
//                    $(args.outElement).fadeOut((set.timeOut/2), function() {
//                        fn._slideIn.call(_this, args.inElement);
//                    });
//                });
//            }
        },
        _slideIn: function(inElement) {
            
            var _this = this;
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            var inElementSpan  = inElement.find('span.text');
            inElementSpan.hide();
            
            $(set.sliderSelector).width(inElement.width());
            $(set.sliderSelector).find('#paging #imgNr #current').html(inElement.attr('imgnr'));

            fn._log.call(_this, inElement);
            fn._centerBox.call(_this, inElement);
            fn._fadeImgIn.call(_this, inElement, function() {
                fn._fadeTextIn.call(_this, inElementSpan, function() {
                    set.current = inElement;
                    $this.data('rexxScreenSliderButton', set);
                    if(set.auto) {
                        window.setTimeout(function() {fn._next.apply(_this);}, set.autoSlideTime);
                    }
                });
            });
            
//            $(inElement).fadeIn((set.timeOut/2), function() {    
//                if($(inElementSpan).css('bottom') == 0) {
//                    $(inElementSpan).slideUp((set.timeOut/2), function() {
//                        set.current = inElement;
//                        $this.data('rexxScreenSliderButton', set);
//                        if(set.auto) {
//                            window.setTimeout(function() {fn._next.apply(_this);}, set.timeOut);
//                        }
//                    });
//                } else {
//                    $(inElementSpan).slideDown((set.timeOut/2), function() {
//                        set.current = inElement;
//                        $this.data('rexxScreenSliderButton', set);
//                        if(set.auto) {
//                            window.setTimeout(function() {fn._next.apply(_this);}, set.timeOut);
//                        }
//                    });
//                }
//            });
        },
        _autoSlide: function() {
            
            var _this = this;
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            $(set.sliderSelector).find('#paging #stop').show();
            $(set.sliderSelector).find('#paging #play').hide();

            set.auto = true;
            $this.data('rexxScreenSliderButton', set);
            
            fn._next.apply(_this);
        },
        _stopAutoSlide: function() {
            
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            $(set.sliderSelector).find('#paging #stop').hide();
            $(set.sliderSelector).find('#paging #play').show();

            set.auto = false;
            $this.data('rexxScreenSliderButton', set);
        },
        _centerBox: function(current) {
            
            var docHeight = $(window).height();
            var docWidth  = $(window).width();

            var boxHeight = current.height();
            var boxWidth  = current.width();
            
            var top = (docHeight - boxHeight - 30) /2;
            var left = (docWidth - boxWidth) /2;
            
            if(top < 20) {
                top = 20;
            }
            
            if(left < 20) {
                left = 20;
            }
            
            var position;
            if($.browser.msie) {
                position: 'absolute';
            } else {
                position: 'fixed'
            }
            
            $(set.sliderSelector).css({
                position: position,
                top: top,
                left: left,
                'margin-left': 0
            });
        },
        _fadeImgIn: function(elm, f) {
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            $(elm).parent().find('li').hide();
            
            $(elm).find('img').css({
                opacity: 0
            }).show();
            var width = parseInt($(elm).attr('width'));
            if($.browser.msie) {
                width += parseInt($(elm).css('padding-left'))+parseInt($(elm).css('padding-right'));
            }
            $(elm).show().width(width);

            $(elm).find('img').animate({opacity: '1'}, (set.timeOut/2), 'linear', f);
        },
        _fadeImgOut: function(elm, f) {
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            $(elm).find('img').animate({opacity: '0'}, (set.timeOut/2), 'linear', function() {
                $(elm).hide();
                f();
            });
        },
        _fadeTextIn: function(elm, f) {
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');
            
            $(elm).find('span').css('display', 'block');
            
            var height;
            if(typeof $(elm).attr('txtHeight') == 'undefined' || $(elm).attr('txtHeight').length <=0 ) {
                if($(elm).is('.right') || $(elm).is('.left')) {
                    height = parseInt($(elm).parent().height());
                } else {
                    height = parseInt($(elm).height());
                    if($.browser.msie) {
                        height += parseInt($(elm).css('padding-top')) + parseInt($(elm).css('padding-bottom'));
                    }
                }
                $(elm).attr('txtHeight', height);
            } else {
                height = $(elm).attr('txtHeight');
            }
            
            $(elm).css({
                height: '1px',
                display: 'block'
            });

            $(elm).animate({height: height}, (set.timeOut/2), 'linear', f);
        },
        _fadeTextOut: function(elm, f) {
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            $(elm).animate({height: '1px'}, (set.timeOut/2), 'linear', function() {
                $(elm).css({display: 'none'});
                f();
            });
        },
        _log: function(elm) {
            var $this = $(this);
            set = $this.data('rexxScreenSliderButton');

            $.ajax({
                type: 'POST',
                url: '/ajax/log_slider.php',
                dataType: 'json',
                data: {
                    sid:  rexxData.sid,
                    nr:   elm.attr('imgnr'),
                    img:  elm.find('img').attr('src'),
                    lang: $('#languageLinks .active').attr('id'),
                    page: document.URL
                }
            });
        }
    }

    $.fn.rexxScreenSliderButton = function() {
        
        var args = arguments;

        this.each(function() {
            fn.sliderButton.apply(this, args);
        });
    }
})(jQuery);



$(document).ready(function() {
    $('#sliderTeaser a, #smallSliderTeaser').css({cursor: 'pointer'}).rexxScreenSliderButton({
        auto: false
    });
});
