/* ########## elayer (copyright e2see.de) ##########
<script>
    $(document).ready(function(){
        $.elayer({
                closeText : 'schließen',
                prevText  : 'zurück',
                nextText  : 'vor',
                selector  : 'ul a',
                });


        $('ul.elayer li a').each(function(){
            elayerFunc.addElem($(this));
        });
    


    });




</script>
*/

$.elayer = function(options){


    var elayerSettings = $.extend({
        imageMimes:   'webp,png,jpg,jpeg,gif,bmp,ogg,xvid,avi',
        videoMimes:   'mp4,xvid,avi',
        audioMimes:   'mp3,wav,ogg',
        excludeMimes: 'ini,woff,otf,ttf,zip,7z,rar,iso,lnk',
        prevText:     'prev',
        nextText:     'next',
        zoomText:     'Zum Vergrößern doppelklicken',
        closeText:    'close',
        zoomFactor:   2.5,
        selector:     'a.elayer, .elayer a',
    }, options );

    $('body').children('#elayer').remove();

    $('body').attr('data-elayer','closed').append('<div id="elayer">\
    <div id="elayer_control-container">\
        <div id="elayer_control">\
            <a href="#prev">'+elayerSettings.prevText+'</a><a href="#next">'+elayerSettings.nextText+'</a><a href="#close">'+elayerSettings.closeText+'</a>\
        </div>\
        <div id="elayer_progress" style="width: 70%;height: 70%;"></div>\
    </div>\
    <div id="elayer_main">\
        <div id="elayer_content_close"></div>\
        <div id="elayer_content">\
            <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="elayer image" />\
        </div>\
    </div>\
    </div>').addClass('elayer-desc-on');

    elayerOBs = {
        body: $('body'),
        self: $('#elayer')
    };
    elayerOBs.prev     = elayerOBs.self.find('a[href="#prev"]');
    elayerOBs.next     = elayerOBs.self.find('a[href="#next"]');
    elayerOBs.info     = elayerOBs.self.find('a[href="#info"]');
    elayerOBs.download = elayerOBs.self.find('a[href="#download"]');
    elayerOBs.close    = elayerOBs.self.find('a[href="#close"]');
    elayerOBs.progress = elayerOBs.self.find('#elayer_progress');

    elayerOBs.main     = elayerOBs.self.find('#elayer_main');
    elayerOBs.content  = elayerOBs.main.find('#elayer_content');
    elayerOBs.contentClose  = elayerOBs.main.find('#elayer_content_close');

    elayerOBs.acItem     = false;
    elayerOBs.prevItem   = false;
    elayerOBs.nextItem   = false;
    elayerOBs.targetItem = false;
    elayerOBs.timerDT    = false;


    elayerFunc = {
        savePlayed: function(){


                if(elayerOBs.targetItem && elayerOBs.targetItem.is('video, audio') && elayerOBs.acItem){

                    var time = elayerOBs.targetItem[0].currentTime;
                    if(time < 4){
                        time = 0;
                    }

                    elayerOBs.acItem.attr('data-elayer-played', parseFloat(time).toFixed(1));
                }
            },
        readPlayed: function(){
                if(elayerOBs.targetItem && elayerOBs.targetItem.is('video, audio') && elayerOBs.acItem.is('[data-elayer-played]')){
                    elayerOBs.targetItem[0].currentTime = parseFloat(elayerOBs.acItem.attr('data-elayer-played')) - 2;
                }

            },


        close: function(time){


                elayerFunc.savePlayed();
                elayerOBs.body.attr('data-elayer', 'closed').attr('data-elayer-zoom', '');
                elayerOBs.body.removeAttr('data-elayer-media-type');

                var cacheItm = elayerOBs.acItem;
                elayerOBs.acItem = false;
                setTimeout(function(){
                    if(!cacheItm.is(elayerOBs.acItem)){
                        cacheItm.attr('data-elayer', '');
                    }
                },400);

                elayerOBs.targetItem.remove();
                elayerOBs.targetItem = false;


            },
        zoomIn: function(){


                var boxW  = parseInt(elayerOBs.content[0].clientWidth) - ( parseInt(elayerOBs.content.css('padding-left')) +  parseInt(elayerOBs.content.css('padding-right')));
                var boxH  = parseInt(elayerOBs.content[0].clientHeight) - ( parseInt(elayerOBs.content.css('padding-top')) +  parseInt(elayerOBs.content.css('padding-bottom')));
                var elemW = parseInt(elayerOBs.targetItem[0].offsetWidth) * elayerSettings.zoomFactor;
                var elemH = parseInt(elayerOBs.targetItem[0].offsetHeight) * elayerSettings.zoomFactor;

                elayerOBs.body.attr('data-elayer-zoom', 'loading');

                elayerOBs.targetItem.attr('style', 'height:' + elemH + 'px; width:' + elemW +'px; max-height: none; max-width: none;' );
                setTimeout(function(){
                    elayerOBs.content.scrollLeft( (elemW - boxW) / 2);
                    elayerOBs.content.scrollTop( (elemH - boxH) / 2);
                    elayerOBs.body.attr('data-elayer-zoom', 'in');
                },5);
                setTimeout(function(){
                    elayerOBs.content.scrollLeft( (elemW - boxW) / 2);
                    elayerOBs.content.scrollTop( (elemH - boxH) / 2);

                },20);


            },
        zoomOut: function(){

                elayerOBs.body.attr('data-elayer-zoom', 'loading');
                elayerOBs.targetItem.removeAttr('style');
                setTimeout(function(){
                    elayerOBs.body.attr('data-elayer-zoom', 'out');
                },5);

            },
        showZoominfo: function(){

                if (typeof localStorage !== 'undefined') {
                    // zoom info fenster
                    var d = new Date();
                    var nowTime  = d.getTime();
                    var lastTime = false;
                    if (typeof localStorage.getItem('elayer_zoominfotime') !== 'undefined'){
                        lastTime = localStorage.getItem('elayer_zoominfotime');
                    }
                    if(lastTime == false || nowTime - lastTime > (5 * 60 * 1000)){
                        elayerOBs.main.prepend('<div id="elayer_zoom-info">'+elayerSettings.zoomText+'</div>');
                        var infoLayer = elayerOBs.main.children('#elayer_zoom-info').eq(0);
                        setTimeout(function(){
                            infoLayer.remove();
                        }, 3000);
                        localStorage.setItem('elayer_zoominfotime', nowTime);
                    }
                }
            },
        generateSelector: function(seperatet){

                        var ret = false;

                        var prefix  = '[href*=".';
                        var suffix = '"]';
                        var res  = seperatet.toLowerCase().split(',');
                        var resU = seperatet.toUpperCase().split(',');

                        if (res.length > 0){
                            ret = prefix + res.join(suffix +','+ prefix) + suffix;
                            ret = ret + ',' +prefix + resU.join(suffix +','+ prefix) + suffix;
                        }

                        return ret;


            },
        openItem: function(itm){

                        elayerFunc.savePlayed();

                        if(elayerOBs.targetItem){
                            // war offen;
                            elayerOBs.targetItem.remove();
                            elayerOBs.targetItem = false;

                        }

                        elayerOBs.acItem = itm;
                        elayerOBs.acItem.attr('data-elayer', 'loading');
                        elayerOBs.body.attr('data-elayer', 'loading').removeAttr('data-elayer-zoom');

                        var mediaType = 'data';
                        var isInline  = false;
                        if (elayerOBs.acItem.is('[href^="data:image"]')){
                            mediaType = 'image';
                            isInline  = true;
                        } else {
                            var selector = elayerFunc.generateSelector(elayerSettings.imageMimes);
                            if (selector && elayerOBs.acItem.is(selector)){
                                mediaType = 'image';
                            } else {
                                var selector = elayerFunc.generateSelector(elayerSettings.audioMimes);
                                if (selector && elayerOBs.acItem.is(selector)){
                                    mediaType = 'audio';
                                } else {
                                    var selector = elayerFunc.generateSelector(elayerSettings.videoMimes);
                                    if (selector && elayerOBs.acItem.is(selector)){
                                        mediaType = 'video';
                                    }
                                }
                            }
                        }

                        elayerOBs.body.attr('data-elayer-media-type', mediaType);

                        var clickedMediaUrl = elayerOBs.acItem.attr('href');
                        var t_start = Date.now();


                        elayerOBs.prevItem    = false;
                        elayerOBs.nextItem    = false;
                        stopPrev        = false;
                        startNext       = false;

                        if (elayerOBs.acItem.is('[data-elayer-group]')){
                            var groupName = elayerOBs.acItem.attr('data-elayer-group');
                            var itms = elayerOBs.body[0].querySelectorAll('a[data-elayer-group="'+groupName+'"]');

                        } else if (elayerOBs.acItem.closest('[data-elayer-group=""]').length == 1){
                            var $cont = elayerOBs.acItem.closest('[data-elayer-group=""]');
                            var itms  = $cont[0].querySelectorAll('a[data-elayer]');

                        }


                        if(itms !== undefined && itms.length > 1){

                             var index = 0;
                             for( index = 0; index < itms.length; index++ ) {
                                var $el = $(itms[index]);

                                $el.attr('data-elayer', '');
                                if (elayerOBs.acItem.is($el)){
                                    stopPrev = true;
                                    startNext = true;
                                    myI = index;
                                } else if (stopPrev == false && elayerOBs.acItem.is($el) == false){
                                    elayerOBs.prevItem = $el;
                                } else if (startNext == true && elayerOBs.acItem.is($el) == false){
                                    elayerOBs.nextItem = $el;
                                    startNext = false;
                                }
                             }
                             var perc = (myI + 1) / itms.length * 100;

                             elayerOBs.progress.show().css('width', perc+'%').css('height', perc+'%');

                        } else {
                            elayerOBs.progress.hide();
                        }


                        if (elayerOBs.prevItem == false){
                            elayerOBs.prev.attr('data-elayer-status', 'inactive');
                        } else {
                            elayerOBs.prev.attr('data-elayer-status', 'loading');
                        }

                        if (elayerOBs.nextItem == false){
                            elayerOBs.next.attr('data-elayer-status', 'inactive');
                        } else {
                            elayerOBs.next.attr('data-elayer-status', 'loading');
                        }


                        setTimeout(function(){
                            if (elayerOBs.prevItem != false){
                                elayerOBs.prev.attr('data-elayer-status', '');
                            }
                            if (elayerOBs.nextItem != false){
                                elayerOBs.next.attr('data-elayer-status', '');
                            }
                        }, 100);


                        if (mediaType == 'audio'){
                            elayerOBs.content.html('<audio src="'+ clickedMediaUrl +'" controls autoplay></audio>');

                        } else if (mediaType == 'video'){
                            elayerOBs.content.html('<video src="'+ clickedMediaUrl +'" controls autoplay></video>');

                        } else if(mediaType == 'image') {
                            elayerOBs.content.html('<img src="'+ clickedMediaUrl +'">');

                            elayerFunc.showZoominfo();


                        } else {

                            var isYt = clickedMediaUrl.includes('youtube.com/watch?v=');

                            if(isYt){
                                elayerOBs.content.html('<iframe width="560px" height="315px" src="'+ clickedMediaUrl.replace('youtube.com/watch?v=', 'youtube.com/embed/') +'" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>');
                            } else {
                                elayerOBs.content.html('<iframe src="'+ clickedMediaUrl +'"></iframe>');
                            }

                        }

                        var minimumWait = 250;


                        elayerOBs.targetItem = elayerOBs.content.children('*').eq(0);

                        if (mediaType == 'video' || mediaType == 'audio'){

                            elayerFunc.fadeInItem( minimumWait );

                            elayerOBs.targetItem.off('ended.elayer').on('ended.elayer', function(){
                                $(this)[0].currentTime = 0;
                            });


                        } else if(mediaType == 'image') {


                            elayerOBs.targetItem.off('load.elayer').on('load.elayer', function(){

                                    var t_end       = Date.now();
                                    var t_duration  = parseInt(t_end  - t_start);

                                    if (t_duration < minimumWait){
                                        var time = minimumWait - t_duration;
                                    } else {
                                        var time = 20;
                                    }

                                    elayerFunc.fadeInItem(time);

                            });
                        } else {
                            elayerFunc.fadeInItem( minimumWait );
                        }
                        return false;
            },
        fadeInItem: function(time){

                    // kommt nur rein wenn das lement auch geladen wurde

                    setTimeout(function(){

                        elayerFunc.readPlayed();

                        elayerOBs.body.attr('data-elayer', 'show');
                        elayerOBs.acItem.attr('data-elayer', 'show');

                        /*downloadlink*/
                        var li = elayerOBs.acItem.closest('li');
                        if (li.length == 1){
                            var aDown = li.find('a[download]');
                            if (aDown.length == 1){
                                elayerOBs.download.attr('href', aDown.attr('href')).attr('download', aDown.attr('download')).attr('data-elayer-status', '');
                            }
                        }
                    },time);

            },
        addElem: function($el){

                    if ($el.is('a[href]') && !$el.is('[download]')){
                        $el.attr('data-elayer', '').off('click.elayer').on('click.elayer',function(){
                                elayerFunc.openItem($(this));
                                return false;
                        });
                    }

            }


    };

    elayerOBs.content.on('click.elayer touchend.elayer', function(){

        if(elayerOBs.body.is('[data-elayer-zoom="loading"]')){

        } else {

            var dt  = false;
            var now = new Date().getTime();
            var timesince = now - elayerOBs.timerDT;
            if((timesince < 440) && (timesince > 4)){
                dt = true;
            }

            elayerOBs.timerDT = new Date().getTime();

            if(dt && elayerOBs.body.is('[data-elayer-zoom="in"]')){
                elayerFunc.zoomOut();
                elayerOBs.timerDT = false;
            } else if(dt) {
                elayerFunc.zoomIn();
                elayerOBs.timerDT = false;
            }
        }
        return false;
    });

    elayerOBs.prev.on('click.elayer', function(){
        if (elayerOBs.prevItem != false && elayerOBs.prev.is('[data-elayer-status=""]')){
            elayerOBs.prevItem.trigger('click');
        }
        return false;
    });

    elayerOBs.next.on('click.elayer', function(){
        if (elayerOBs.nextItem != false && elayerOBs.next.is('[data-elayer-status=""]')){
            elayerOBs.nextItem.trigger('click');
        }
        return false;
    });

    elayerOBs.close.on('click.elayer', function(){
        elayerFunc.close();
        return false;
    });

    elayerOBs.contentClose.on('click.elayer', function(){
         elayerFunc.close();
         return false;
    });

    $(document).off('keydown.elayer').on('keydown.elayer', function(event){
        if (elayerOBs.body.is('[data-elayer="show"], [data-elayer="loading"]')){
            if (event.keyCode == 37) {
                elayerOBs.prev.trigger('click');
                return false;
            } else if (event.keyCode == 8) {
                elayerOBs.prev.trigger('click');
                return false;
            }else if (event.keyCode == 39 || event.keyCode == 32) {
                elayerOBs.next.trigger('click');
                return false;
            }else if (event.keyCode == 27) {
                elayerOBs.close.trigger('click');
                return false;
            }
        }
    });


    var selectorExcl = elayerFunc.generateSelector(elayerSettings.excludeMimes);


    var itms = elayerOBs.body[0].querySelectorAll(elayerSettings.selector);
    var index = 0;

    for( index = 0; index < itms.length; index++ ) {
        var $el = $(itms[index]);
        if (selectorExcl == false || !$el.is(selectorExcl)){
            if ($el.is('a[href]') && !$el.is('[download]')){
                elayerFunc.addElem($el);
            }
        }
    }


}





/* cdn 0ms */