/* * ****************************************************************************** * jquery.mb.components * file: jquery.mb.YTPlayer.js * * Copyright (c) 2001-2013. Matteo Bicocchi (Pupunzi); * Open lab srl, Firenze - Italy * email: matteo@open-lab.com * site: http://pupunzi.com * blog: http://pupunzi.open-lab.com * http://open-lab.com * * Licences: MIT, GPL * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * last modified: 24/01/13 20.54 * ***************************************************************************** */ /*Browser detection patch*/ (function(){if(!(8>jQuery.fn.jquery.split(".")[1])){jQuery.browser={};jQuery.browser.mozilla=!1;jQuery.browser.webkit=!1;jQuery.browser.opera=!1;jQuery.browser.msie=!1;var a=navigator.userAgent;jQuery.browser.name=navigator.appName;jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion);jQuery.browser.majorVersion=parseInt(navigator.appVersion,10);var c,b;if(-1!=(b=a.indexOf("Opera"))){if(jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=a.substring(b+6),-1!=(b= a.indexOf("Version")))jQuery.browser.fullVersion=a.substring(b+8)}else if(-1!=(b=a.indexOf("MSIE")))jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer",jQuery.browser.fullVersion=a.substring(b+5);else if(-1!=(b=a.indexOf("Chrome")))jQuery.browser.webkit=!0,jQuery.browser.name="Chrome",jQuery.browser.fullVersion=a.substring(b+7);else if(-1!=(b=a.indexOf("Safari"))){if(jQuery.browser.webkit=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=a.substring(b+7),-1!=(b=a.indexOf("Version")))jQuery.browser.fullVersion= a.substring(b+8)}else if(-1!=(b=a.indexOf("Firefox")))jQuery.browser.mozilla=!0,jQuery.browser.name="Firefox",jQuery.browser.fullVersion=a.substring(b+8);else if((c=a.lastIndexOf(" ")+1)<(b=a.lastIndexOf("/")))jQuery.browser.name=a.substring(c,b),jQuery.browser.fullVersion=a.substring(b+1),jQuery.browser.name.toLowerCase()==jQuery.browser.name.toUpperCase()&&(jQuery.browser.name=navigator.appName);if(-1!=(a=jQuery.browser.fullVersion.indexOf(";")))jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0, a);if(-1!=(a=jQuery.browser.fullVersion.indexOf(" ")))jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,a);jQuery.browser.majorVersion=parseInt(""+jQuery.browser.fullVersion,10);isNaN(jQuery.browser.majorVersion)&&(jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10));jQuery.browser.version=jQuery.browser.majorVersion}})(jQuery); /******************************************************************************* * jQuery.mb.components: jquery.mb.CSSAnimate ******************************************************************************/ jQuery.fn.CSSAnimate=function(a,b,k,l,f){return this.each(function(){var c=jQuery(this);if(0!==c.length&&a){"function"==typeof b&&(f=b,b=jQuery.fx.speeds._default);"function"==typeof k&&(f=k,k=0);"function"==typeof l&&(f=l,l="cubic-bezier(0.65,0.03,0.36,0.72)");if("string"==typeof b)for(var j in jQuery.fx.speeds)if(b==j){b=jQuery.fx.speeds[j];break}else b=null;if(jQuery.support.transition){var e="",h="transitionEnd";jQuery.browser.webkit?(e="-webkit-",h="webkitTransitionEnd"):jQuery.browser.mozilla? (e="-moz-",h="transitionend"):jQuery.browser.opera?(e="-o-",h="otransitionend"):jQuery.browser.msie&&(e="-ms-",h="msTransitionEnd");j=[];for(d in a){var g=d;"transform"===g&&(g=e+"transform",a[g]=a[d],delete a[d]);"transform-origin"===g&&(g=e+"transform-origin",a[g]=a[d],delete a[d]);j.push(g);c.css(g)||c.css(g,0)}d=j.join(",");c.css(e+"transition-property",d);c.css(e+"transition-duration",b+"ms");c.css(e+"transition-delay",k+"ms");c.css(e+"transition-timing-function",l);c.css(e+"backface-visibility", "hidden");setTimeout(function(){c.css(a)},0);setTimeout(function(){c.called||!f?c.called=!1:f()},b+20);c.on(h,function(a){c.off(h);c.css(e+"transition","");a.stopPropagation();"function"==typeof f&&(c.called=!0,f());return!1})}else{for(var d in a)"transform"===d&&delete a[d],"transform-origin"===d&&delete a[d],"auto"===a[d]&&delete a[d];if(!f||"string"===typeof f)f="linear";c.animate(a,b,f)}}})}; jQuery.fn.CSSAnimateStop=function(){var a="",b="transitionEnd";jQuery.browser.webkit?(a="-webkit-",b="webkitTransitionEnd"):jQuery.browser.mozilla?(a="-moz-",b="transitionend"):jQuery.browser.opera?(a="-o-",b="otransitionend"):jQuery.browser.msie&&(a="-ms-",b="msTransitionEnd");jQuery(this).css(a+"transition","");jQuery(this).off(b)}; jQuery.support.transition=function(){var a=(document.body||document.documentElement).style;return void 0!==a.transition||void 0!==a.WebkitTransition||void 0!==a.MozTransition||void 0!==a.MsTransition||void 0!==a.OTransition}(); /* * Metadata - jQuery plugin for parsing metadata from elements * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function(c){c.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(b,c){this.defaults.type=b;this.defaults.name=c},get:function(b,f){var d=c.extend({},this.defaults,f);d.single.length||(d.single="metadata");var a=c.data(b,d.single);if(a)return a;a="{}";if("class"==d.type){var e=d.cre.exec(b.className);e&&(a=e[1])}else if("elem"==d.type){if(!b.getElementsByTagName)return;e=b.getElementsByTagName(d.name);e.length&&(a=c.trim(e[0].innerHTML))}else void 0!= b.getAttribute&&(e=b.getAttribute(d.name))&&(a=e);0>a.indexOf("{")&&(a="{"+a+"}");a=eval("("+a+")");c.data(b,d.single,a);return a}}});c.fn.metadata=function(b){return c.metadata.get(this[0],b)}})(jQuery); /***************************************************************************************/ String.prototype.getVideoID = function () { var movieURL; if (this.substr(0, 16) == "http://youtu.be/") { movieURL = this.replace("http://youtu.be/", ""); } else if (this.indexOf("http") > -1) { movieURL = this.match(/[\\?&]v=([^]*)/)[1]; } else { movieURL = this } return movieURL; }; var isDevice = 'ontouchstart' in window; function onYouTubePlayerAPIReady() { if (jQuery.mbYTPlayer.YTAPIReady) return; jQuery(document).trigger("YTAPIReady"); jQuery.mbYTPlayer.YTAPIReady = true; } (function (jQuery) { jQuery.mbYTPlayer = { name : "jquery.mb.YTPlayer", version : "2.2", author : "Matteo Bicocchi", defaults : { containment : "body", ratio : "16/9", showYTLogo : false, videoURL : null, startAt : 0, autoPlay : true, addRaster : false, opacity : 1, quality : "default", mute : false, loop : true, showControls : true, printUrl : true, onReady : function (event) {}, onStateChange : function (event) {}, onPlaybackQualityChange: function (event) {}, onError : function (event) {} }, //todo: use @font-face instead controls : { play : "", pause : "", mute : "", unmute: "", onlyYT: "", ytLogo: "" }, rasterImg : "", rasterImgRetina: "", buildPlayer: function (options) { if (isDevice) return; document.YTP = {}; return this.each(function () { var YTPlayer = this; var $YTPlayer = jQuery(YTPlayer); YTPlayer.loop = 0; YTPlayer.opt = {}; var property = {}; if (jQuery.metadata) { jQuery.metadata.setType("class"); property = $YTPlayer.metadata(); } if (jQuery.isEmptyObject(property)) property = $YTPlayer.data("property") ? eval('(' + $YTPlayer.data("property") + ')') : {}; jQuery.extend(YTPlayer.opt, jQuery.mbYTPlayer.defaults, options, property); if (!$YTPlayer.attr("id")) $YTPlayer.attr("id", "id_" + new Date().getTime()); YTPlayer.opt.id = YTPlayer.id; YTPlayer.isAlone = false; /*to maintain back compatibility * ***********************************************************/ if (YTPlayer.opt.isBgndMovie) YTPlayer.opt.containment = "body"; if (YTPlayer.opt.isBgndMovie && YTPlayer.opt.isBgndMovie.mute != undefined) YTPlayer.opt.mute = YTPlayer.opt.isBgndMovie.mute; if (!YTPlayer.opt.videoURL) YTPlayer.opt.videoURL = $YTPlayer.attr("href"); /************************************************************/ var playerID = "mbYTP_" + YTPlayer.id; var videoID = this.opt.videoURL ? this.opt.videoURL.getVideoID() : $YTPlayer.attr("href") ? $YTPlayer.attr("href").getVideoID() : false; // 'start':this.opt.startAt,'modestbranding':1, 'allowfullscreen':true, 'wmode':"transparent" var playerVars = { 'autoplay': 0, 'modestbranding': 1, 'controls': 0, 'showinfo': 0, 'rel': 0, 'enablejsapi': 1, 'version': 3, 'playerapiid': playerID, 'origin': '*', 'allowfullscreen': true, 'wmode': "transparent"}; var canPlayHTML5 = false; var v = document.createElement('video'); if (v.canPlayType) { canPlayHTML5 = true; } if (canPlayHTML5 && !jQuery.browser.msie) jQuery.extend(playerVars, {'html5': 1}); var playerBox = jQuery("
").attr("id", playerID).addClass("playerBox"); var overlay = jQuery("").css({position: YTPlayer.isBackground ? "fixed" : "absolute", top: 0, left: 0, width: "100%", height: "100%"}).addClass("YTPOverlay"); YTPlayer.opt.containment = YTPlayer.opt.containment == "self" ? jQuery(this) : jQuery(YTPlayer.opt.containment); YTPlayer.isBackground = YTPlayer.opt.containment.get(0).tagName.toLowerCase() == "body"; if (YTPlayer.opt.addRaster) { var retina = (window.retina || window.devicePixelRatio > 1); overlay.css({backgroundImage: "url(" + (retina ? jQuery.mbYTPlayer.rasterImgRetina : jQuery.mbYTPlayer.rasterImg) + ")"}); } var wrapper = jQuery("").addClass("mbYTP_wrapper").attr("id", "wrapper_" + playerID); wrapper.css({position: "absolute", zIndex: 1, minWidth: "100%", minHeight: "100%", overflow: "hidden", opacity: 0, top:0, left:0}); playerBox.css({position: "absolute", zIndex: 0, width: "100%", height: "100%", top: 0, left: 0, overflow: "hidden", opacity: this.opt.opacity}); wrapper.append(playerBox); if (YTPlayer.isBackground && document.YTP.isInit) return; YTPlayer.opt.containment.children().each(function () { if (jQuery(this).css("position") == "static") jQuery(this).css("position", "relative"); }); if (YTPlayer.isBackground) { jQuery("body").css({position: "relative", minWidth: "100%", minHeight: "100%", zIndex: 1, boxSizing: "border-box"}); wrapper.css({position: "fixed", top: 0, left: 0, zIndex: 0}); $YTPlayer.hide(); YTPlayer.opt.containment.prepend(wrapper); } else YTPlayer.opt.containment.prepend(wrapper); YTPlayer.wrapper = wrapper; playerBox.css({opacity: 1}); playerBox.after(overlay); // add YT API to the header var tag = document.createElement('script'); tag.src = "http://www.youtube.com/player_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); jQuery(document).on("YTAPIReady", function () { if ((YTPlayer.isBackground && document.YTP.isInit) || YTPlayer.opt.isInit) return; if (YTPlayer.isBackground) document.YTP.isInit = true; YTPlayer.opt.isInit = true; YTPlayer.opt.vol = YTPlayer.opt.vol ? YTPlayer.opt.vol : 100; jQuery(document).on("getVideoInfo_" + YTPlayer.opt.id, function () { var player = new YT.Player(playerID, { videoId : videoID, playerVars: playerVars, events : { 'onReady': function (event) { YTPlayer.player = event.target; YTPlayer.playerEl = YTPlayer.player.getIframe(); $YTPlayer.optimizeDisplay(); jQuery(window).resize(function () { $YTPlayer.optimizeDisplay(); }); if (YTPlayer.opt.showControls) jQuery(YTPlayer).buildYTPControls(); YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality); if (YTPlayer.opt.startAt >= 0) YTPlayer.player.seekTo(parseFloat(YTPlayer.opt.startAt), true); if (YTPlayer.opt.mute) { jQuery(YTPlayer).muteYTPVolume(); //setTimeout(function(){jQuery(YTPlayer).muteYTPVolume();},3000) } if (!YTPlayer.opt.autoPlay) { YTPlayer.checkForStartAt = setInterval(function () { if (YTPlayer.player.getCurrentTime() >= YTPlayer.opt.startAt) { clearInterval(YTPlayer.checkForStartAt); $YTPlayer.pauseYTP(); /* setTimeout(function(){ jQuery(YTPlayer.playerEl).CSSAnimate({opacity:1},2000); YTPlayer.wrapper.CSSAnimate({opacity:YTPlayer.opt.opacity},2000); },1000); */ } }, 1); } else { $YTPlayer.playYTP(); } //jQuery(YTPlayer.playerEl).CSSAnimate({opacity:1},2000); if (typeof YTPlayer.opt.onReady == "function") YTPlayer.opt.onReady($YTPlayer); }, 'onStateChange' : function (event) { /* -1 (unstarted) 0 (ended) 1 (playing) 2 (paused) 3 (buffering) 5 (video cued). */ if (typeof event.target.getPlayerState != "function") return; var state = event.target.getPlayerState(); var playerBox = jQuery(YTPlayer.playerEl); var controls = jQuery("#controlBar_" + YTPlayer.id); playerBox.css({opacity: 1}); var data = YTPlayer.opt; if (state == 0) { if (YTPlayer.state == state) return; YTPlayer.state = state; YTPlayer.player.pauseVideo(); var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1; if (data.loop) { YTPlayer.wrapper.css({opacity: 0}); YTPlayer.player.seekTo(startAt); $YTPlayer.playYTP(); } else if (!YTPlayer.isBackground) { YTPlayer.player.seekTo(startAt, true); $YTPlayer.playYTP(); setTimeout(function () { $YTPlayer.pauseYTP(); }, 10); } if (!data.loop && YTPlayer.isBackground) YTPlayer.wrapper.CSSAnimate({opacity: 0}, 2000); else if (data.loop) { YTPlayer.wrapper.css({opacity: 0}); YTPlayer.loop++; } controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play); jQuery(YTPlayer).trigger("YTPEnd"); } if (state == 3) { if (YTPlayer.state == state) return; YTPlayer.state = state; controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play); jQuery(YTPlayer).trigger("YTPBuffering"); } if (state == -1) { if (YTPlayer.state == state) return; YTPlayer.state = state; jQuery(YTPlayer).trigger("YTPUnstarted"); } if (state == 1) { if (YTPlayer.state == state) return; YTPlayer.state = state; if (YTPlayer.opt.autoPlay && YTPlayer.loop == 0) { YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}, 2000); } else { YTPlayer.wrapper.css({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}); } controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.pause); $YTPlayer.css({background: "transparent"}); jQuery(YTPlayer).trigger("YTPStart"); } if (state == 2) { if (YTPlayer.state == state) return; YTPlayer.state = state; controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play); jQuery(YTPlayer).trigger("YTPPause"); } }, 'onPlaybackQualityChange': function () {}, 'onError' : function () {} } }); }); //Get video info from FEEDS API //todo: add video title and other info if (!jQuery.browser.msie) { //YTPlayer.opt.ratio == "auto" && jQuery.getJSON('http://gdata.youtube.com/feeds/api/videos/' + videoID + '?v=2&alt=jsonc', function (data, status, xhr) { var videoData = data.data; if (YTPlayer.opt.ratio == "auto") if (videoData.aspectRatio && videoData.aspectRatio === "widescreen") YTPlayer.opt.ratio = "16/9"; else YTPlayer.opt.ratio = "4/3"; if (!YTPlayer.isBackground) { var bgndURL = videoData.thumbnail.hqDefault; $YTPlayer.css({background: "url(" + bgndURL + ") center center", backgroundSize: "cover"}); } jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id); }); } else { YTPlayer.opt.ratio == "auto" ? YTPlayer.opt.ratio = "16/9" : YTPlayer.opt.ratio; jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id); } }) }); }, changeMovie: function (url, opt) { var YTPlayer = jQuery(this).get(0); var data = YTPlayer.opt; if (opt) { jQuery.extend(data, opt); } data.movieURL = url.getVideoID(); jQuery(YTPlayer).getPlayer().loadVideoByUrl("http://www.youtube.com/v/" + data.movieURL, 0); jQuery(YTPlayer).optimizeDisplay(); }, getPlayer: function () { return jQuery(this).get(0).player; }, playerDestroy: function () { var playerBox = this.get(0).opt.wrapper; playerBox.remove(); jQuery("#controlBar_" + this.get(0).id).remove(); }, playYTP: function () { var YTPlayer = jQuery(this).get(0); var data = YTPlayer.opt; var controls = jQuery("#controlBar_" + YTPlayer.id); var playBtn = controls.find(".mb_YTVPPlaypause"); playBtn.html(jQuery.mbYTPlayer.controls.pause); YTPlayer.player.playVideo(); }, stopYTP: function () { var YTPlayer = jQuery(this).get(0); var controls = jQuery("#controlBar_" + YTPlayer.id); var playBtn = controls.find(".mb_YTVPPlaypause"); playBtn.html(jQuery.mbYTPlayer.controls.play); YTPlayer.player.stopVideo(); }, pauseYTP: function () { var YTPlayer = jQuery(this).get(0); var data = YTPlayer.opt; var controls = jQuery("#controlBar_" + YTPlayer.id); var playBtn = controls.find(".mb_YTVPPlaypause"); playBtn.html(jQuery.mbYTPlayer.controls.play); YTPlayer.player.pauseVideo(); }, setYTPVolume: function (val) { var YTPlayer = jQuery(this).get(0); if (!val && !YTPlayer.opt.vol && player.getVolume() == 0) jQuery(YTPlayer).unmuteYTPVolume(); else if ((!val && YTPlayer.player.getVolume() > 0) || (val && YTPlayer.player.getVolume() == val)) jQuery(YTPlayer).muteYTPVolume(); else YTPlayer.opt.vol = val; YTPlayer.player.setVolume(YTPlayer.opt.vol); }, muteYTPVolume: function () { var YTPlayer = jQuery(this).get(0); YTPlayer.opt.vol = YTPlayer.player.getVolume() || 50; YTPlayer.player.mute(); YTPlayer.player.setVolume(0); var controls = jQuery("#controlBar_" + YTPlayer.id); var muteBtn = controls.find(".mb_YTVPMuteUnmute"); muteBtn.html(jQuery.mbYTPlayer.controls.unmute); }, unmuteYTPVolume: function () { var YTPlayer = jQuery(this).get(0); YTPlayer.player.unMute(); YTPlayer.player.setVolume(YTPlayer.opt.vol); var controls = jQuery("#controlBar_" + YTPlayer.id); var muteBtn = controls.find(".mb_YTVPMuteUnmute"); muteBtn.html(jQuery.mbYTPlayer.controls.mute); }, manageYTPProgress: function () { var YTPlayer = jQuery(this).get(0); var data = YTPlayer.opt; var controls = jQuery("#controlBar_" + YTPlayer.id); var progressBar = controls.find(".mb_YTVPProgress"); var loadedBar = controls.find(".mb_YTVPLoaded"); var timeBar = controls.find(".mb_YTVTime"); var totW = progressBar.outerWidth(); var currentTime = Math.floor(YTPlayer.player.getCurrentTime()); var totalTime = Math.floor(YTPlayer.player.getDuration()); var timeW = (currentTime * totW) / totalTime; var startLeft = 0; var loadedW = YTPlayer.player.getVideoLoadedFraction() * 100; loadedBar.css({left: startLeft, width: loadedW + "%"}); timeBar.css({left: 0, width: timeW}); return {totalTime: totalTime, currentTime: currentTime}; }, buildYTPControls: function () { var YTPlayer = jQuery(this).get(0); var data = YTPlayer.opt; var controlBar = jQuery("").attr("id", "controlBar_" + YTPlayer.id).addClass("mb_YTVPBar").css({whiteSpace: "noWrap", position: YTPlayer.isBackground ? "fixed" : "absolute", zIndex: YTPlayer.isBackground ? 10000 : 1000}).hide(); var buttonBar = jQuery("").addClass("buttonBar"); var playpause = jQuery("" + jQuery.mbYTPlayer.controls.play + "").addClass("mb_YTVPPlaypause").click(function () { if (YTPlayer.player.getPlayerState() == 1) jQuery(YTPlayer).pauseYTP(); else jQuery(YTPlayer).playYTP(); }); var MuteUnmute = jQuery("" + jQuery.mbYTPlayer.controls.mute + "").addClass("mb_YTVPMuteUnmute").click(function () { if (YTPlayer.player.isMuted()) { jQuery(YTPlayer).unmuteYTPVolume(); } else { jQuery(YTPlayer).muteYTPVolume(); } }); var idx = jQuery("").addClass("mb_YTVPTime"); var viewOnYT = jQuery(jQuery.mbYTPlayer.controls.ytLogo).on("click", function () {window.open(data.videoURL, "viewOnYT")}); var viewOnlyYT = jQuery(jQuery.mbYTPlayer.controls.onlyYT).on("click", function () { if(!YTPlayer.isAlone){ jQuery(YTPlayer.wrapper).css({zIndex: 10000}).CSSAnimate({opacity: 1}, 1000, 0); YTPlayer.isAlone = true; }else{ jQuery(YTPlayer.wrapper).CSSAnimate({opacity: YTPlayer.opt.opacity}, 500, function () { jQuery(YTPlayer.wrapper).css({zIndex: -1}); YTPlayer.isAlone = false; }); } }); var movieUrl = jQuery("").addClass("mb_YTVPUrl").append(viewOnYT); var onlyVideo = jQuery("").addClass("mb_OnlyYT").append(viewOnlyYT); var progressBar = jQuery("").addClass("mb_YTVPProgress").css("position", "absolute").click(function (e) { timeBar.css({width: (e.clientX - timeBar.offset().left)}); YTPlayer.timeW = e.clientX - timeBar.offset().left; controlBar.find(".mb_YTVPLoaded").css({width: 0}); var totalTime = Math.floor(YTPlayer.player.getDuration()); YTPlayer.goto = (timeBar.outerWidth() * totalTime) / progressBar.outerWidth(); YTPlayer.player.seekTo(parseFloat(YTPlayer.goto), true); controlBar.find(".mb_YTVPLoaded").css({width: 0}); }); var loadedBar = jQuery("").addClass("mb_YTVPLoaded").css("position", "absolute"); var timeBar = jQuery("").addClass("mb_YTVTime").css("position", "absolute"); progressBar.append(loadedBar).append(timeBar); buttonBar.append(playpause).append(MuteUnmute).append(idx); if (data.printUrl && data.videoURL.indexOf("http") >= 0) buttonBar.append(movieUrl); if (YTPlayer.isBackground) buttonBar.append(onlyVideo); controlBar.append(buttonBar).append(progressBar); if (!YTPlayer.isBackground) { controlBar.addClass("inlinePlayer"); YTPlayer.wrapper.before(controlBar); } else { jQuery("body").after(controlBar); } controlBar.fadeIn(); clearInterval(YTPlayer.getState); var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1; YTPlayer.getState = setInterval(function () { var prog = jQuery(YTPlayer).manageYTPProgress(); controlBar.find(".mb_YTVPTime").html(jQuery.mbYTPlayer.formatTime(prog.currentTime) + " / " + jQuery.mbYTPlayer.formatTime(prog.totalTime)); if (data.loop && parseFloat(YTPlayer.player.getDuration() - 1) < YTPlayer.player.getCurrentTime() && YTPlayer.player.getPlayerState() == 1) { YTPlayer.player.seekTo(startAt); YTPlayer.player.play(); jQuery(YTPlayer).trigger("YTPEnd"); //jQuery(YTPlayer).playYTP(); } }, 1); }, formatTime : function (s) { var min = Math.floor(s / 60); var sec = Math.floor(s - (60 * min)); return (min < 9 ? "0" + min : min) + " : " + (sec < 9 ? "0" + sec : sec); } }; jQuery.fn.toggleVolume = function () { var YTPlayer = this.get(0); if (!YTPlayer) return; if (YTPlayer.player.isMuted()) { jQuery(YTPlayer).unmuteYTPVolume(); return true; } else { jQuery(YTPlayer).muteYTPVolume(); return false; } }; jQuery.fn.optimizeDisplay = function () { var YTPlayer = this.get(0); var data = YTPlayer.opt; var playerBox = jQuery(YTPlayer.playerEl); var win = {}; var el = !YTPlayer.isBackground ? data.containment : jQuery(window); win.width = el.width(); win.height = el.height(); var margin = 24; var vid = {}; vid.width = win.width + ((win.width * margin) / 100); vid.height = data.ratio == "16/9" ? Math.ceil((9 * win.width) / 16) : Math.ceil((3 * win.width) / 4); vid.marginTop = -((vid.height - win.height) / 2); vid.marginLeft = -((win.width * (margin / 2)) / 100); if (vid.height < win.height) { vid.height = win.height + ((win.height * margin) / 100); vid.width = data.ratio == "16/9" ? Math.floor((16 * win.height) / 9) : Math.floor((4 * win.height) / 3); vid.marginTop = -((win.height * (margin / 2)) / 100); vid.marginLeft = -((vid.width - win.width) / 2); } playerBox.css({width: vid.width, height: vid.height, marginTop: vid.marginTop, marginLeft: vid.marginLeft}); }; jQuery.fn.mb_YTPlayer = jQuery.mbYTPlayer.buildPlayer; jQuery.fn.changeMovie = jQuery.mbYTPlayer.changeMovie; jQuery.fn.getPlayer = jQuery.mbYTPlayer.getPlayer; jQuery.fn.playerDestroy = jQuery.mbYTPlayer.playerDestroy; jQuery.fn.buildYTPControls = jQuery.mbYTPlayer.buildYTPControls; jQuery.fn.playYTP = jQuery.mbYTPlayer.playYTP; jQuery.fn.stopYTP = jQuery.mbYTPlayer.stopYTP; jQuery.fn.pauseYTP = jQuery.mbYTPlayer.pauseYTP; jQuery.fn.muteYTPVolume = jQuery.mbYTPlayer.muteYTPVolume; jQuery.fn.unmuteYTPVolume = jQuery.mbYTPlayer.unmuteYTPVolume; jQuery.fn.setYTPVolume = jQuery.mbYTPlayer.setYTPVolume; jQuery.fn.manageYTPProgress = jQuery.mbYTPlayer.manageYTPProgress; jQuery.mbYTPlayer.YTAPIReady = false; })(jQuery);