!function(a,b){"undefined"!=typeof module&&module.exports?module.exports=b():"function"==typeof define&&define.amd?define([],b):a.canvid=b()}(this,function(){function a(a){function b(a,b){function c(){e--,0===e&&b(null,d)}var d={},e=Object.keys(a).length;if(0===e)return b("You need to define at least one video object.");for(var f in a)d[f]=new Image,d[f].onload=c,d[f].onerror=b,d[f].src=a[f].src}function c(){var a=document.createElement("canvas");return a.width=m.width,a.height=m.height,a.classList.add("canvid"),n.appendChild(a),a.getContext("2d")}function d(){[].forEach.call(n.children,function(a){a.classList.contains("canvid")||(a.style.display="none")})}function e(){[].forEach.call(n.children,function(a){a.classList.contains("canvid")&&n.removeChild(a)})}function f(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return setTimeout(a,1e3/60)}}function g(){var a=document.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))}function h(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function i(){for(var a,b={},c=0;c=p.frames&&(t=0),(c?t!=p.frames-1:t)||w++,p.loops&&w>=p.loops&&(v=!1,p.onEnd&&h(p.onEnd)&&p.onEnd())),u=(u+1)%x,v&&p.frames>1&&i(j)}function n(a){var b=Math.floor(a%p.cols)*q,c=Math.floor(a/p.cols)*r;g.clearRect(0,0,m.width,m.height),g.drawImage(o,b,c,q,r,0,0,m.width,m.height)}l.pause&&l.pause();var o=b[a],p=m.videos[a],q=o.width/p.cols,r=o.height/Math.ceil(p.frames/p.cols),s=f||p.fps||15,t=c?p.frames-1:0,u=0,v=!0,w=0,x=60/s;i(j),l.resume=function(){v=!0,i(j)},l.pause=function(){v=!1,i(j)},l.isPlaying=function(){return v},l.destroy=function(){l.pause(),e()},l.getCurrentFrame=function(){return t},l.setCurrentFrame=function(a){return!(a<0||a>=p.frames)&&(l.isPlaying()||n(a),void(t=a))},k&&(k=!1,d())},h(m.loaded)&&m.loaded(l)});else if(opts.srcGif){var o=new Image;o.src=opts.srcGif,n.appendChild(o)}return l}return window.canvid=a,a});var enableInlineVideo=function(){"use strict";function a(a,b,c,d){function e(c){f=b(e,d),a(c-(g||c)),g=c}var f,g;return{start:function(){f||e(0)},stop:function(){c(f),f=null,g=0}}}function b(b){return a(b,requestAnimationFrame,cancelAnimationFrame)}function c(a,b,c){function d(d){c&&!c(a,b)||d.stopImmediatePropagation()}return a.addEventListener(b,d),d}function d(a,b,c,d){function e(){return c[b]}function f(a){c[b]=a}d&&f(a[b]),Object.defineProperty(a,b,{get:e,set:f})}function e(a,b,c){c.addEventListener(b,function(){return a.dispatchEvent(new Event(b))})}function f(a,b){Promise.resolve().then(function(){a.dispatchEvent(new Event(b))})}function g(a){var b=new Audio;return e(a,"play",b),e(a,"playing",b),e(a,"pause",b),b.crossOrigin=a.crossOrigin,b.src=a.src||a.currentSrc||"data:",b}function h(a,b,c){(q||0)+200=a.video.duration}function j(a){var b=this;b.video.readyState>=b.video.HAVE_FUTURE_DATA?(b.hasAudio||(b.driver.currentTime=b.video.currentTime+a*b.video.playbackRate/1e3,b.video.loop&&i(b)&&(b.driver.currentTime=0)),h(b.video,b.driver.currentTime)):b.video.networkState===b.video.NETWORK_IDLE&&0===b.video.buffered.length&&b.video.load(),b.video.ended&&(delete b.video[t],b.video.pause(!0))}function k(){var a=this,b=a[s];return a.webkitDisplayingFullscreen?void a[u]():("data:"!==b.driver.src&&b.driver.src!==a.src&&(h(a,0,!0),b.driver.src=a.src),void(a.paused&&(b.paused=!1,0===a.buffered.length&&a.load(),b.driver.play(),b.updater.start(),b.hasAudio||(f(a,"play"),b.video.readyState>=b.video.HAVE_ENOUGH_DATA&&f(a,"playing")))))}function l(a){var b=this,c=b[s];c.driver.pause(),c.updater.stop(),b.webkitDisplayingFullscreen&&b[v](),c.paused&&!a||(c.paused=!0,c.hasAudio||f(b,"pause"),b.ended&&!b.webkitDisplayingFullscreen&&(b[t]=!0,f(b,"ended")))}function m(a,c){var d={};a[s]=d,d.paused=!0,d.hasAudio=c,d.video=a,d.updater=b(j.bind(d)),c?d.driver=g(a):(a.addEventListener("canplay",function(){a.paused||f(a,"playing")}),d.driver={src:a.src||a.currentSrc||"data:",muted:!0,paused:!0,pause:function(){d.driver.paused=!0},play:function(){d.driver.paused=!1,i(d)&&h(a,0)},get ended(){return i(d)}}),a.addEventListener("emptied",function(){var b=!d.driver.src||"data:"===d.driver.src;d.driver.src&&d.driver.src!==a.src&&(h(a,0,!0),d.driver.src=a.src,b||!c&&a.autoplay?d.driver.play():d.updater.stop())},!1),a.addEventListener("webkitbeginfullscreen",function(){a.paused?c&&0===d.driver.buffered.length&&d.driver.load():(a.pause(),a[u]())}),c&&(a.addEventListener("webkitendfullscreen",function(){d.driver.currentTime=a.currentTime}),a.addEventListener("seeking",function(){w.indexOf(100*a.currentTime|0)<0&&(d.driver.currentTime=a.currentTime)}))}function n(a){var b=a[t];return delete a[t],!a.webkitDisplayingFullscreen&&!b}function o(a){var b=a[s];a[u]=a.play,a[v]=a.pause,a.play=k,a.pause=l,d(a,"paused",b.driver),d(a,"muted",b.driver,!0),d(a,"playbackRate",b.driver,!0),d(a,"ended",b.driver),d(a,"loop",b.driver,!0),c(a,"seeking",function(a){return!a.webkitDisplayingFullscreen}),c(a,"seeked",function(a){return!a.webkitDisplayingFullscreen}),c(a,"timeupdate",n),c(a,"ended",n)}function p(a,b){if(void 0===b&&(b={}),!a[s]){if(!b.everywhere){if(!r)return;if(!(b.iPad||b.ipad?/iPhone|iPod|iPad/:/iPhone|iPod/).test(navigator.userAgent))return}a.pause();var c=a.autoplay;a.autoplay=!1,m(a,!a.muted),o(a),a.classList.add("IIV"),a.muted&&c&&(a.play(),a.addEventListener("playing",function d(){a.autoplay=!0,a.removeEventListener("playing",d)})),/iPhone|iPod|iPad/.test(navigator.platform)||console.warn("iphone-inline-video is not guaranteed to work in emulated environments")}}var q,r="object"==typeof document&&"object-fit"in document.head.style&&!matchMedia("(-webkit-video-playable-inline)").matches,s="bfred-it:iphone-inline-video",t="bfred-it:iphone-inline-video:event",u="bfred-it:iphone-inline-video:nativeplay",v="bfred-it:iphone-inline-video:nativepause",w=[],x=0;return p}();!function(a,b,c,d,e){"use strict";function f(){var a,b,c="";for(a=0;a"}function g(){function c(){void 0!==a.addEventListener&&a.addEventListener("touchstart",function b(){ra&&f("avp:device_touched:attempting_force_autoplay");for(var a=0;a>qa.length;a+=1)qa[a].play();this.removeEventListener("touchstart",b)})}function e(){var a=d.createElement("video"),b=d.createElement("source");b.src=Aa,a.appendChild(b),a.id="base64_test_video",a.autoplay=!0,a.style.position="fixed",a.style.left="5000px",d.getElementsByTagName("body")[0].appendChild(a),la=d.getElementById("base64_test_video")}function g(){return ra&&f("Detected PC"+!/Android|webOS|iPhone|iPad|iPod|BlackBerry|Opera Mini|UCWeb|UCBrowser/i.test(b.userAgent)),!/Android|webOS|iPhone|iPad|iPod|BlackBerry|Opera Mini|UCWeb|UCBrowser/i.test(b.userAgent)}function h(){var a=["Tv","MediaHub","Console"];return a.indexOf(ka)>=0&&(ta=!0,ra&&f("Detected TV"+b.userAgent+" Device Type: "+ka)),ta}function i(){return ra&&f("Detected Android Device"+!/iP(hone|od|ad)/.test(b.userAgent)||/SAMSUNG/.test(b.userAgent)),!/iP(hone|od|ad)/.test(b.userAgent)||/SAMSUNG/.test(b.userAgent)}function j(){var a=b.userAgent;return a.indexOf("Mozilla/5.0")>-1&&a.indexOf("Android ")>-1&&a.indexOf("AppleWebKit")>-1&&!(a.indexOf("Chrome")>-1)}function k(){return ra&&f("Detected UC Browser"+/UCWeb|UCBrowser/i.test(b.userAgent)),/UCWeb|UCBrowser/i.test(b.userAgent)}function l(){return ra&&f("Detected Opera Browser"+/OPR|Opera/i.test(b.userAgent)),/Opera/i.test(b.userAgent)}function m(){return ra&&f("Detected Apple Device"),/iP(hone|od|ad|Safari)/.test(b.userAgent)&&!/(Windows Phone|SAMSUNG)/.test(b.userAgent)}function n(){if(/iP(hone|od|ad)/.test(b.userAgent)){var a=b.userAgent.match(/OS (\d+)_(\d+)_?(\d+)?/);return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3]||0,10)]}return null}function o(){return!!/iPad/.test(b.userAgent)}function p(){var a=b.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);return!!a&&parseInt(a[2],10)}function q(){return/Chrome/.test(b.userAgent)&&p()>=32||/Opera/i.test(b.userAgent)&&a.opera&&a.opera.version()>=19}function r(){var a=d.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))}function s(){var a=d.getElementById("video");ma=a.attributes["data-webp-canvid"].value,na=a.attributes["data-jpg-canvid"].value,a.parentElement.removeChild(a),D()}function t(a){var b=d.createElement("IMG"),c=a;b.className="fallback_image",q()||sa?(ra&&f("avp:"+c+":loadPlayerFallback:WEBP:"+qa[c].attributes["data-webp"].value),b.src=qa[c].attributes["data-webp"].value+"?rand="+Math.ceil(1e6*Math.random()),qa[c].parentElement.appendChild(b),ha=qa[c].attributes["data-webp"].value):(ra&&f("avp:"+c+":loadPlayerFallback:GIF:"+qa[c].attributes["data-gif"].value),b.src=qa[c].attributes["data-gif"].value,qa[c].parentElement.appendChild(b),ha=qa[c].attributes["data-gif"].value,qa[c].parentElement.removeChild(qa[c]))}function u(){ra&&f("avp:oadPlayerFallback2"+qa.length);for(var a=0;a>> "+d.cookie)}function w(a){for(var b=a+"=",c=decodeURIComponent(d.cookie),e=c.split(";"),g=0;g>"+h.substring(b.length,h.length)),h.substring(b.length,h.length)}return ra&&f("No cookie set"),null}function x(){return"undefined"!=typeof Storage&&(ra&&f("LocalStorage Supported"),!0)}function y(a){return ra&&f("Get sessionStoreage >>>"+sessionStorage.getItem(a)),sessionStorage.getItem(a)}function z(a,b){ra&&f("set session Storage"),sessionStorage.setItem(a,b)}function A(a){xa=a}function B(a){ya=a}function C(){return ya}function D(){if(ra&&f("Play Canvid"),b.userAgent.indexOf("Chrome")>-1||L()){ha=ma;var a=canvid({videos:{clip1:{src:ma,frames:102,cols:6,loops:10,fps:10,onEnd:function(){}}},width:oa,height:pa,loaded:function(){a.play("clip1")}})}else{ha=na;var a=canvid({videos:{clip1:{src:na,frames:102,cols:6,loops:10,fps:10,onEnd:function(){}}},width:oa,height:pa,loaded:function(){a.play("clip1")}})}}function E(){var a=C();null!==a&&"cellular"===a&&(ra&&f("avp:Android:setAutoPlayDetectionTimeout:connectioneType:"+a),va=wa)}function F(){za=x()?y("autoplay_detected"):w("autoplay_detected"),"connection"in b&&"saveData"in b.connection&&(ra&&f("navigator.connection supported"),b.connection.saveData?(ua=!1,x()?z("autoplay_detected",ua):v("autoplay_detected",ua),za="false"):(ua=!0,x()?z("autoplay_detected",ua):v("autoplay_detected",ua),za="true")),"true"!==za&&e(),ra&&f("getAutoPlayDetectedFlag:"+ua)}function G(){ra&&f("setAutoPlayCookie:");var a;for(void 0===la||la.paused||(ua=!0,ra&&f("avp:Android:autoplay:supported:from_test_file")),a=0;a=8){ra&&f("avp:iphone-inline-video is not guaranteed to work in emulated environments");try{var b;for(b=0;b