/********************************************
* REVOLUTION 5.2.5.1 EXTENSION - VIDEO FUNCTIONS
* @version: 1.8 (05.04.2016)
* @requires jquery.themepunch.revolution.js
* @author ThemePunch
*********************************************/
(function($) {
var _R = jQuery.fn.revolution,
_ISM = _R.is_mobile();
///////////////////////////////////////////
// EXTENDED FUNCTIONS AVAILABLE GLOBAL //
///////////////////////////////////////////
jQuery.extend(true,_R, {
preLoadAudio : function(li,opt) {
li.find('.tp-audiolayer').each(function() {
var element = jQuery(this),
obj = {};
if (element.find('audio').length===0) {
obj.src = element.data('videomp4') !=undefined ? element.data('videomp4') : '',
obj.pre = element.data('videopreload') || '';
if (element.attr('id')===undefined) element.attr('audio-layer-'+Math.round(Math.random()*199999));
obj.id = element.attr('id');
obj.status = "prepared";
obj.start = jQuery.now();
obj.waittime = element.data('videopreloadwait')*1000 || 5000;
if (obj.pre=="auto" || obj.pre=="canplaythrough" || obj.pre=="canplay" || obj.pre=="progress") {
if (opt.audioqueue===undefined) opt.audioqueue = [];
opt.audioqueue.push(obj);
_R.manageVideoLayer(element,opt);
}
}
});
},
preLoadAudioDone : function(nc,opt,event) {
if (opt.audioqueue && opt.audioqueue.length>0)
jQuery.each(opt.audioqueue,function(i,obj) {
if (nc.data('videomp4') === obj.src && (obj.pre === event || obj.pre==="auto")) {
obj.status = "loaded";
}
});
},
resetVideo : function(_nc,opt) {
switch (_nc.data('videotype')) {
case "youtube":
var player=_nc.data('player');
try{
if (_nc.data('forcerewind')=="on") { //Removed Force Rewind Protection for Handy here !!!
var s = getStartSec(_nc.data('videostartat'));
s= s==-1 ? 0 : s;
if (_nc.data('player')!=undefined) {
_nc.data('player').seekTo(s);
_nc.data('player').pauseVideo();
}
}
} catch(e) {}
if (_nc.find('.tp-videoposter').length==0)
punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
break;
case "vimeo":
var f = $f(_nc.find('iframe').attr("id"));
try{
if (_nc.data('forcerewind')=="on") { //Removed Force Rewind Protection for Handy here !!!
var s = getStartSec(_nc.data('videostartat')),
ct = 0;
s= s==-1 ? 0 : s;
f.api("seekTo",s);
f.api("pause");
}
} catch(e) {}
if (_nc.find('.tp-videoposter').length==0)
punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
break;
case "html5":
if (_ISM && _nc.data('disablevideoonmobile')==1) return false;
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0];
punchgs.TweenLite.to(jvideo,0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
if (_nc.data('forcerewind')=="on" && !_nc.hasClass("videoisplaying")) {
try{
var s = getStartSec(_nc.data('videostartat'));
video.currentTime = s == -1 ? 0 : s;
} catch(e) {}
}
if (_nc.data('volume')=="mute" || _R.lastToggleState(_nc.data('videomutetoggledby')) || opt.globalmute===true)
video.muted = true;
break;
}
},
isVideoMuted : function(_nc,opt) {
var muted = false;
switch (_nc.data('videotype')) {
case "youtube":
try{
var player=_nc.data('player');
muted = player.isMuted();
} catch(e) {}
break;
case "vimeo":
try{
var f = $f(_nc.find('iframe').attr("id"));
if (_nc.data('volume')=="mute")
muted = true;
} catch(e) {}
break;
case "html5":
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0];
if (video.muted)
muted = true;
break;
}
return muted;
},
muteVideo : function(_nc,opt) {
switch (_nc.data('videotype')) {
case "youtube":
try{
var player=_nc.data('player');
player.mute();
} catch(e) {}
break;
case "vimeo":
try{
var f = $f(_nc.find('iframe').attr("id"));
_nc.data('volume',"mute");
f.api('setVolume',0);
} catch(e) {}
break;
case "html5":
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0];
video.muted = true;
break;
}
},
unMuteVideo : function(_nc,opt) {
if (opt.globalmute===true) return;
switch (_nc.data('videotype')) {
case "youtube":
try{
var player=_nc.data('player');
player.unMute();
} catch(e) {}
break;
case "vimeo":
try{
var f = $f(_nc.find('iframe').attr("id"));
_nc.data('volume',"1");
f.api('setVolume',1);
} catch(e) {}
break;
case "html5":
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0];
video.muted = false;
break;
}
},
stopVideo : function(_nc,opt) {
if (!opt.leaveViewPortBasedStop)
opt.lastplayedvideos = [];
opt.leaveViewPortBasedStop = false;
switch (_nc.data('videotype')) {
case "youtube":
try{
var player=_nc.data('player');
player.pauseVideo();
} catch(e) {}
break;
case "vimeo":
try{
var f = $f(_nc.find('iframe').attr("id"));
f.api("pause");
} catch(e) {}
break;
case "html5":
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0];
if (jvideo!=undefined && video!=undefined) video.pause();
break;
}
},
playVideo : function(_nc,opt) {
clearTimeout(_nc.data('videoplaywait'));
switch (_nc.data('videotype')) {
case "youtube":
if (_nc.find('iframe').length==0) {
_nc.append(_nc.data('videomarkup'));
addVideoListener(_nc,opt,true);
} else {
if (_nc.data('player').playVideo !=undefined) {
var s = getStartSec(_nc.data('videostartat')),
ct = _nc.data('player').getCurrentTime();
if (_nc.data('nextslideatend-triggered')==1) {
ct=-1;
_nc.data('nextslideatend-triggered',0);
}
if (s!=-1 && s>ct) _nc.data('player').seekTo(s);
_nc.data('player').playVideo();
} else {
_nc.data('videoplaywait',setTimeout(function() {
_R.playVideo(_nc,opt);
},50));
}
}
break;
case "vimeo":
if (_nc.find('iframe').length==0) {
_nc.append(_nc.data('videomarkup'));
addVideoListener(_nc,opt,true);
} else {
if (_nc.hasClass("rs-apiready")) {
var id = _nc.find('iframe').attr("id"),
f = $f(id);
if (f.api("play")==undefined) {
_nc.data('videoplaywait',setTimeout(function() {
_R.playVideo(_nc,opt);
},50));
} else {
setTimeout(function() {
f.api("play");
var s = getStartSec(_nc.data('videostartat')),
ct = _nc.data('currenttime');
if (_nc.data('nextslideatend-triggered')==1) {
ct=-1;
_nc.data('nextslideatend-triggered',0);
}
if (s!=-1 && s>ct) f.api("seekTo",s);
},510);
}
} else {
_nc.data('videoplaywait',setTimeout(function() {
_R.playVideo(_nc,opt);
},50));
}
}
break;
case "html5":
if (_ISM && _nc.data('disablevideoonmobile')==1) return false;
var tag = _nc.data('audio')=="html5" ? "audio" : "video",
jvideo = _nc.find(tag),
video = jvideo[0],
html5vid = jvideo.parent();
if (html5vid.data('metaloaded') != 1) {
addEvent(video,'loadedmetadata',function(_nc) {
_R.resetVideo(_nc,opt);
video.play();
var s = getStartSec(_nc.data('videostartat')),
ct = video.currentTime;
if (_nc.data('nextslideatend-triggered')==1) {
ct=-1;
_nc.data('nextslideatend-triggered',0);
}
if (s!=-1 && s>ct) video.currentTime = s;
}(_nc));
} else {
video.play();
var s = getStartSec(_nc.data('videostartat')),
ct = video.currentTime;
if (_nc.data('nextslideatend-triggered')==1) {
ct=-1;
_nc.data('nextslideatend-triggered',0);
}
if (s!=-1 && s>ct) video.currentTime = s;
}
break;
}
},
isVideoPlaying : function(_nc,opt) {
var ret = false;
if (opt.playingvideos != undefined) {
jQuery.each(opt.playingvideos,function(i,nc) {
if (_nc.attr('id') == nc.attr('id'))
ret = true;
});
}
return ret;
},
removeMediaFromList : function(_nc,opt) {
remVidfromList(_nc,opt);
},
prepareCoveredVideo : function(asprat,opt,nextcaption) {
var ifr = nextcaption.find('iframe, video'),
wa = asprat.split(':')[0],
ha = asprat.split(':')[1],
li = nextcaption.closest('.tp-revslider-slidesli'),
od = li.width()/li.height(),
vd = wa/ha,
nvh = (od/vd)*100,
nvw = (vd/od)*100;
if (od>vd)
punchgs.TweenLite.to(ifr,0.001,{height:nvh+"%", width:"100%", top:-(nvh-100)/2+"%",left:"0px",position:"absolute"});
else
punchgs.TweenLite.to(ifr,0.001,{width:nvw+"%", height:"100%", left:-(nvw-100)/2+"%",top:"0px",position:"absolute"});
if (!ifr.hasClass("resizelistener")) {
ifr.addClass("resizelistener");
jQuery(window).resize(function() {
clearTimeout(ifr.data('resizelistener'));
ifr.data('resizelistener',setTimeout(function() {
_R.prepareCoveredVideo(asprat,opt,nextcaption);
},30));
})
}
},
checkVideoApis : function(_nc,opt,addedApis) {
var httpprefix = location.protocol === 'https:' ? "https" : "http";
if ((_nc.data('ytid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('youtube')>0)) opt.youtubeapineeded = true;
if ((_nc.data('ytid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('youtube')>0) && addedApis.addedyt==0) {
opt.youtubestarttime = jQuery.now();
addedApis.addedyt=1;
var s = document.createElement("script");
s.src = "https://www.youtube.com/iframe_api"; /* Load Player API*/
var before = document.getElementsByTagName("script")[0],
loadit = true;
jQuery('head').find('*').each(function(){
if (jQuery(this).attr('src') == "https://www.youtube.com/iframe_api")
loadit = false;
});
if (loadit) before.parentNode.insertBefore(s, before);
}
if ((_nc.data('vimeoid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('vimeo')>0)) opt.vimeoapineeded = true;
if ((_nc.data('vimeoid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('vimeo')>0) && addedApis.addedvim==0) {
opt.vimeostarttime = jQuery.now();
addedApis.addedvim=1;
var f = document.createElement("script"),
before = document.getElementsByTagName("script")[0],
loadit = true;
f.src = "https://secure-a.vimeocdn.com/js/froogaloop2.min.js"; /* Load Player API*/
jQuery('head').find('*').each(function(){
if (jQuery(this).attr('src') == "https://secure-a.vimeocdn.com/js/froogaloop2.min.js")
loadit = false;
});
if (loadit)
before.parentNode.insertBefore(f, before);
}
return addedApis;
},
manageVideoLayer : function(_nc,opt,recalled,internrecalled) {
// YOUTUBE AND VIMEO LISTENRES INITIALISATION
var vida = _nc.data("videoattributes"),
vidytid = _nc.data('ytid'),
vimeoid = _nc.data('vimeoid'),
videopreload = _nc.data('videopreload') === "auto" || _nc.data('videopreload') === "canplay" || _nc.data('videopreload') === "canplaythrough" || _nc.data('videopreload') === "progress" ? "auto" : _nc.data('videopreload'),
videomp = _nc.data('videomp4'),
videowebm = _nc.data('videowebm'),
videoogv = _nc.data('videoogv'),
videoafs = _nc.data('allowfullscreenvideo'),
videocontrols = _nc.data('videocontrols'),
httpprefix = "http",
videoloop = _nc.data('videoloop')=="loop" ? "loop" : _nc.data('videoloop')=="loopandnoslidestop" ? "loop" : "",
videotype = (videomp!=undefined || videowebm!=undefined) ? "html5" :
(vidytid!=undefined && String(vidytid).length>1) ? "youtube" :
(vimeoid!=undefined && String(vimeoid).length>1) ? "vimeo" : "none",
tag = _nc.data('audio')=="html5" ? "audio" : "video",
newvideotype = (videotype=="html5" && _nc.find(tag).length==0) ? "html5" :
(videotype=="youtube" && _nc.find('iframe').length==0) ? "youtube" :
(videotype=="vimeo" && _nc.find('iframe').length==0) ? "vimeo" : "none";
// VideLoop reset if Next Slide at End is set !
videoloop = _nc.data('nextslideatend') === true ? "" : videoloop;
_nc.data('videotype',videotype);
// ADD HTML5 VIDEO IF NEEDED
switch (newvideotype) {
case "html5":
if (videocontrols!="controls") videocontrols="";
var tag = "video"
//_nc.data('audio',"html5");
if (_nc.data('audio')=="html5") {
tag = "audio";
_nc.addClass("tp-audio-html5");
}
var apptxt = '<'+tag+' style="object-fit:cover;background-size:cover;visible:hidden;width:100%; height:100%" class="" '+videoloop+' preload="'+videopreload+'">';
if (videopreload=="auto") opt.mediapreload = true;
//if (_nc.data('videoposter')!=undefined) apptxt = apptxt + 'poster="'+_nc.data('videoposter')+'">';
if (videowebm!=undefined && _R.get_browser().toLowerCase()=="firefox") apptxt = apptxt + '