jQuery(function(e) {

    var videoType; 
    var pinWidth = PinnedVideoWidth; //Pinned video container width
    var pinHeight = PinnedVideoHeight; //Pinned video container height
    var pTop = PositionVerticalOffset; //Pinned video top offset
    var pRight = PositionSideOffset; //Pinned video right offset
    var verPos = VerPosition;//top,bottom
    var horPos = HorPosition;//left,right
    var YT_enabled = EnableOnYT;//EnableOnYT
    var enable_on_mobile = EnableOnMobile;//EnableOnMobile;
    var enable_BCiframe = enableBCiframe;//enableBCiframe;
    var enable_BCHTML5 = enableBCHTML5;//enableBCHTML5;
    var pip_enabled = true;
    var jump = 500;
    window.scrollHeight = 0;
    var HideControls = '.vjs-share-control, .rdm-video-autoplay-switch-container, .vjs-thumbs-up-button, .vjs-thumbs-down-button, .vjs-captions-button, .vjs-subs-caps-button';

    jQuery("head").append('<style type="text/css">' + (!enable_on_mobile ? "@media (min-width: 768px) {":"") + '#featured-videoYT.is-sticky, #featured-video.is-sticky {position: fixed; ' + verPos + ': ' + pTop + 'px; ' + horPos + ': ' + pRight + 'px; max-width: ' + pinWidth + 'px; max-height: ' + pinHeight + 'px; width: ' + pinWidth + 'px; height: ' + pinHeight + 'px !important; z-index: 1001;' +(!enable_on_mobile ? "}":"")+ '}</style>');

    if (window.innerWidth < 767 && enable_on_mobile === false) {
       pip_enabled = false;
    }
    
    jQuery(window).resize(function() {
        if (window.innerWidth < 767 && enable_on_mobile === false) {
            pip_enabled = false;
        }
    });

    jQuery(window).on("load resize scroll",function(e){//Check for new videos every 500px scroll
       var diff = jQuery(this).scrollTop() - window.scrollHeight;
        if (diff >= jump || window.scrollHeight == 0) {
            window.scrollHeight = jQuery(this).scrollTop();   
            //console.log('Checking for videos - '+ jQuery(this).scrollTop());

            if(jQuery('.bc-video').length && !jQuery(".bc-video-iframe").length && pip_enabled === true && enable_BCHTML5 === 'yes') { //BRIGHTCOVE STUFF
                videoType = 'HTML5';

                var checkExist = setInterval(function(){
                    if ( typeof(videojs) !== "undefined") {
                        //console.log("videojs loaded!.........");
                        clearInterval(checkExist);

                    if (jQuery('div[autoplay^="true"]').length && jQuery('div[autoplay^="true"]').parents().parents('.bc-video').length == 1){
                        jQuery('div[autoplay^="true"]').parent().attr('id', 'featured-video');
                        jQuery('div[autoplay^="true"]').parent().parent().attr('id', 'featured-media'); 
                        pinnedVideo(jQuery('div[autoplay^="true"]').attr('id'));
                    }
           
                        var players = [];
                        for (x = 0; x < Object.keys(videojs.players).length; x++) {
                            var setPlayer = Object.keys(videojs.players)[x];
                            videojs(setPlayer).ready(function () {
                                player = this;
                                player.on('play', onPlay);
                                player.on('pause', onPause);
                                players.push(player);
                            });
                        }
            
                        function onPlay(e) {
                            var id = e.target.id;
                            //console.log('onPlay ' + id)
                            
                                for (var i = 0; i < players.length; i++) {
                                    if (players[i].id() != id) {
                                        videojs(players[i].id()).pause();
                                    }
                                }
                            jQuery('#' + id).parent().attr('id', 'featured-video');
                            jQuery('#' + id).parent().parent().attr('id', 'featured-media'); 
                            pinnedVideo(id);
                        }

                        function onPause(e) {
                            var id = e.target.id;
                            //console.log('onPause ' + id);
                            if(!jQuery('#featured-video').hasClass('is-sticky')){
                                jQuery('#' + id).parent().css("padding-top", '56.25%').removeAttr('id').removeClass('is-sticky');
                                jQuery('#' + id).parent().parent().removeAttr('id');
                            }
                        }
                    }
                }, 400); // check for videojs every xxx ms
            } else
            if(jQuery('.bc-video').length && jQuery(".bc-video-iframe").length && pip_enabled === true && enableBCiframe === 'yes') {//brightcove iframe stuff

                videoType = 'iframeBC';
                jQuery('iframe[class*=rdm-brightcove-videojs-iframe]').each( function (k, v) {
                    if(!this.id) { this.id = 'bc-iframe-id-' + k + Math.floor(Math.random()*100) + 1}//adding id to all iframes
                });

                function PinControlVideo(evt){
                    if(evt.data === "playVideo" || evt.data === "ads-ad-started" || evt.data === "ads-play") {
                        
                        var frame_id = evt.source.frameElement.id;
                        jQuery('iframe[class*=rdm-brightcove-videojs-iframe]').each( function (k, v) { //pause all videos but one
                            if (this.id !== frame_id && this.id !== '' && frame_id !== '') {
                                var iframeEl = document.getElementById(this.id);
                                var sendMessage = function(msg) {
                                    iframeEl.contentWindow.postMessage(msg, '*');
                                };
                                sendMessage('pauseVideo');
                                if(!jQuery('#' + frame_id).parent().hasClass('is-sticky') || (evt.data === "ads-ad-started" && !jQuery('#' + frame_id).parent().hasClass('is-sticky'))){

                                    jQuery("#pipclose").remove(); 
                                    jQuery('div[id*=featured-video]').removeAttr('id').removeClass('is-sticky');
                                    jQuery('div[id*=featured-media]').removeAttr('id');
                                } 
                            }
                        });
                        
                        if(!jQuery('#' + frame_id).parent().hasClass('is-sticky')) {
                            jQuery('#' + frame_id).parent().attr('id', 'featured-video');
                            jQuery('#' + frame_id).parent().parent().attr('id', 'featured-media');      
                        }
                        pinnedVideo(frame_id);

                    } else if (evt.data === 'pauseVideo' /*|| evt.data === "ads-pause"*/) {

                        var frame_id = evt.source.frameElement.id;

                        if(!jQuery('#featured-video').hasClass('is-sticky')){
                            jQuery('#' + frame_id).parent().css("padding-top", '56.25%').removeAttr('id').removeClass('is-sticky');
                            jQuery('#' + frame_id).parent().parent().removeAttr('id');
                        }
                    }
                };
                window.addEventListener("message",PinControlVideo); //listen to Brightcove videojs.eventracker.js plugin
            } 
        }
    }); 
            //YOUTUBE STUFF STARTS
            if(jQuery('iframe[src*=youtube]').length && YT_enabled === 'yes' && pip_enabled === true) { 

                //API YOUTUBE get player state
                var tag = document.createElement('script');
                tag.src = '//www.youtube.com/iframe_api';
                var firstScriptTag = document.getElementsByTagName('script')[0];
                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

                var videoTypeYT = 'iframeYT';
                if(jQuery("iframe[src*=youtube]").parent(".content-media--video").length === 0){
                    jQuery("iframe[src*=youtube]" ).wrap( "<div class='content-media--video' style='position: absolute;'><div></div></div>" );
                }

                window.onYouTubeIframeAPIReady = function() {

                    var ytplayers = [];
                    jQuery('iframe[src*=youtube]').each( function (k, v) {
                            if(!this.id) { this.id = 'yt-id-' + k + Math.floor(Math.random()*100) + 1}//adding id if missing

                            if(this.src.indexOf("enablejsapi") == -1) { //adding enablejsapi if missing
                                if(this.src.indexOf("?") != -1) {
                                    jQuery("#" + this.id).attr("src", jQuery("#" + this.id).attr('src') + '&enablejsapi=1');
                                }else{
                                    jQuery("#" + this.id).attr("src", jQuery("#" + this.id).attr('src') + '?enablejsapi=1');
                                }
                            }
                        ytplayers.push(new YT.Player(this.id, {
                            events: {
                                'onStateChange': function(event) {
                                    var myid = '#' + event.target.getIframe().id;   

                                    if(event.data == YT.PlayerState.PLAYING) {

                                        e.each(ytplayers, function(k, v) { //pause all videos but one
                                            if (this.getIframe().id != event.target.getIframe().id) {
                                                this.pauseVideo();
                                                jQuery('div[id*=featured-video]').removeAttr('id').removeClass('is-sticky');
                                                jQuery('div[id*=featured-media]').removeAttr('id');
                                            }
                                        });
                                        
                                        jQuery(myid).parent().attr('id', 'featured-video');
                                        jQuery(myid).parent().parent().attr('id', 'featured-media'); 
                                        pinnedVideoYT(event.target.getIframe().id);
                                    }

                                    if(event.data == YT.PlayerState.PAUSED) {
                                        if(!$('#featured-video').hasClass('is-sticky')){
                                            jQuery(myid).parent().removeAttr('id').removeClass('is-sticky');
                                            jQuery(myid).parent().parent().removeAttr('id');
                                            jQuery("#pipclose").remove();
                                        }
                                    }

                                    if(event.data == YT.PlayerState.ENDED) {
                                        /*jQuery(myid).parent().removeAttr('id');
                                        jQuery(myid).parent().parent().removeAttr('id');
                                        jQuery("#pipclose").remove();*/
                                    }
                                }
                            }
                        }))
                    });    
                }; 
            }//YOUTUBE ENDS 

            function pinnedVideo(player_id) {
                var w = jQuery(window),
                top = jQuery('#' + player_id).closest(".bc-video").offset().top,
                offset = Math.floor(top + jQuery("#featured-media").outerHeight() / 2),
                el_offset = Math.round(jQuery(window).height() - (jQuery("#featured-media").outerHeight() / 2));
                

                    var bcWidth = jQuery("#featured-media").outerWidth(); //original iframe player width
                    var bcHeight = jQuery("#featured-media").outerHeight(); //original iframe player height

                w.on("resize", function() {

                    bcWidth = jQuery("#featured-media").outerWidth(); //original iframe player width
                    bcHeight = jQuery("#featured-media").outerHeight(); //original iframe player height
                    top = jQuery('#' + player_id).closest(".bc-video").offset().top,
                    offset = Math.floor(top + jQuery("#featured-media").outerHeight() / 2),
                    el_offset = Math.round(jQuery(window).height() - (jQuery("#featured-media").outerHeight() / 2))
                }).on("scroll", debounce(function() {
                    //console.log("ID - " + player_id +" bcWidth - " + bcWidth +"  bcHeight - " + bcHeight + "  el_offset - " + el_offset);
                    
                    jQuery('#' + player_id).closest("#featured-video").toggleClass("is-sticky", ((w.scrollTop() > offset) || ((w.scrollTop() + el_offset) < top)))

                    if(jQuery("#featured-video").hasClass("is-sticky")){
                        if(jQuery("#pipclose").length == 0) {
                            jQuery("#featured-video").prepend('<div id="pipclose">Close</div>');
                        }
                            //jQuery("#featured-media").css("width", Math.round(bcWidth));
                            jQuery("#featured-media").css("height", Math.round(bcHeight));
                            jQuery("#featured-video").css("padding-top", "");

                        if(videoType == 'HTML5') {
                            jQuery(HideControls).hide();
                        }

                        if(videoType == 'iframeBC' ) {
                            jQuery('#' + player_id).contents().find(HideControls).hide();
                        }

                        jQuery('#pipclose').on('click', function() {//PIP close button

                            if(videoType == 'HTML5') {//pause BC HTML5
                                if(jQuery("#" + player_id).hasClass("vjs-ad-playing") && typeof(videojs(player_id).ima3.adsManager) !== "undefined" && videojs(player_id).ima3.adsManager !== null) {  
                                    videojs(player_id).ima3.adsManager.pause();                
                                }else {
                                    videojs(player_id).pause(); 
                                }
                                jQuery("#featured-video").css("padding-top", '56.25%');
                                jQuery("#featured-media").css("height", ''); 
                                jQuery(HideControls).show();
                                jQuery('#' + player_id + ' > video').width('100%').height('100%').attr("width", bcWidth).attr("height", bcHeight);
                            }

                            if(videoType == 'iframeBC') {//pause bc iframe

                                var iframeEl = document.getElementById(player_id);
                                var sendMessage = function(msg) {
                                    iframeEl.contentWindow.postMessage(msg, '*');
                                };
                                sendMessage('pauseVideo');
                                jQuery('#' + player_id).css({"width": '100%', "height": '100%'});
                            }

                            jQuery('#' + player_id).parent().removeClass('is-sticky').removeAttr('id');
                            jQuery('#' + player_id).parent().parent().removeAttr('id');
                            //jQuery("#featured-media").css("height", '');                   
                            jQuery("#pipclose").remove();                        
                        });

                    }else{

                        jQuery("#pipclose").remove();
                        jQuery("#featured-video").css("padding-top", '56.25%');
                        //jQuery("#" + player_id).attr("width", bcWidth).attr("height", bcHeight);
                        jQuery("#featured-media").css("height", '');
                        if(videoType == 'HTML5') {
                            jQuery(HideControls).show();
                            jQuery('#' + player_id + ' > video').width('100%').height('100%').attr("width", bcWidth).attr("height", bcHeight);; 
                        }

                        if(videoType == 'iframeBC') {
                            jQuery('#' + player_id).css({"width": '100%', "height": '100%'});
                            jQuery('#' + player_id).contents().find(HideControls).show();                   
                        }
                    }
                }, 10));
            }

            function pinnedVideoYT(player_id) {//YOUTUBE STUFF STARTS
            
                    var w = jQuery(window),
                    top = jQuery("#" + player_id).last().offset().top,
                    offset = Math.floor(top + jQuery("#" + player_id).outerHeight() / 2),
                    el_offset = jQuery(window).height() - (jQuery("#" + player_id).outerHeight() / 2);
                
                w.on("resize", function() {
                    top = jQuery("#" + player_id).last().offset().top,
                    offset = Math.floor(top + jQuery("#" + player_id).outerHeight() / 2),
                    el_offset = jQuery(window).height() - (jQuery("#" + player_id).outerHeight() / 2)
                }).on("scroll", debounce(function() {
                    //console.log("top - " + top +"  offset - " + offset + "  el_offset - " + el_offset);
                    jQuery('#' + player_id).closest("#featured-video").toggleClass("is-sticky", ((w.scrollTop() > offset) || ((w.scrollTop() + el_offset) < top)))
                    if(jQuery("#featured-video").hasClass("is-sticky")){

                        if(jQuery("#pipclose").length == 0) {
                            jQuery("#featured-video").prepend('<div id="pipclose">Close</div>');
                        }
                        jQuery('#' + player_id).width('100%').height('100%');
                        jQuery('#pipclose').on('click', function() {//PIP close button
                            //pause Youtube
                            jQuery('#'+ player_id)[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
                            jQuery('#'+ player_id).parent().removeAttr('id').removeClass('is-sticky');
                            jQuery('#'+ player_id).parent().parent().removeAttr('id');
                            jQuery("#pipclose").remove();
                        });
                    }else{
                        jQuery("#pipclose").remove();       
                    }
                }, 10));
            }//YOUTUBE ENDS  

   var debounce = function(func, delay) {
        var inDebounce = undefined;
        return function() {
            var context = this,
            args = arguments;
            clearTimeout(inDebounce);
            return inDebounce = setTimeout(function() {
                return func.apply(context, args);
            }, delay);
        }
    }

/*   
    //pause videos 
    function pauseVideos(player_id) {
        //HTML5 pause
        if(jQuery('.bc-video').length){
            jQuery('video').each(function(){
                console.log("id: " + jQuery(this).attr('id'));
                if(jQuery(this).attr('id') !== player_id){
                    jQuery(this)[0].pause();
                }
            })
        }
        //BC iframe pause
        if(jQuery('.bc-video-iframe').length){
            jQuery('iframe[class*=rdm-brightcove-videojs-iframe]').each( function (k, v) { //pause all videos but one
                if (this.id !== player_id && this.id !== '' && player_id !== '') {
                    var iframeEl = document.getElementById(this.id);
                    var sendMessage = function(msg) {
                    iframeEl.contentWindow.postMessage(msg, '*');
                    };
                    sendMessage('pauseVideo');
                }
            })
        }
        //Youtube pause
        if(jQuery('iframe[src*=youtube]').length){
            jQuery('iframe[src*=youtube]').each( function (k, v) {
                if (this.id !== player_id && this.id !== '' && player_id !== '') {
                    jQuery('#'+this.id)[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
                }
            })
        }
    };*/
});
