Your IP : 216.73.216.122


Current Path : /home/ereika83/public_html/wp-content/uploads/pp_projects/3726/js/
Upload File :
Current File : /home/ereika83/public_html/wp-content/uploads/pp_projects/3726/js/sales-page--all.js

/*! Backstretch - v2.0.4 - 2013-06-19
* http://srobbin.com/jquery-plugins/backstretch/
* Copyright (c) 2013 Scott Robbin; Licensed MIT */
(function(a,d,p){a.fn.backstretch=function(c,b){(c===p||0===c.length)&&a.error("No images were supplied for Backstretch");0===a(d).scrollTop()&&d.scrollTo(0,0);return this.each(function(){var d=a(this),g=d.data("backstretch");if(g){if("string"==typeof c&&"function"==typeof g[c]){g[c](b);return}b=a.extend(g.options,b);g.destroy(!0)}g=new q(this,c,b);d.data("backstretch",g)})};a.backstretch=function(c,b){return a("body").backstretch(c,b).data("backstretch")};a.expr[":"].backstretch=function(c){return a(c).data("backstretch")!==p};a.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5E3,fade:0};var r={left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},s={position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxHeight:"none",maxWidth:"none",zIndex:-999999},q=function(c,b,e){this.options=a.extend({},a.fn.backstretch.defaults,e||{});this.images=a.isArray(b)?b:[b];a.each(this.images,function(){a("<img />")[0].src=this});this.isBody=c===document.body;this.$container=a(c);this.$root=this.isBody?l?a(d):a(document):this.$container;c=this.$container.children(".backstretch").first();this.$wrap=c.length?c:a('<div class="backstretch"></div>').css(r).appendTo(this.$container);this.isBody||(c=this.$container.css("position"),b=this.$container.css("zIndex"),this.$container.css({position:"static"===c?"relative":c,zIndex:"auto"===b?0:b,background:"none"}),this.$wrap.css({zIndex:-999998}));this.$wrap.css({position:this.isBody&&l?"fixed":"absolute"});this.index=0;this.show(this.index);a(d).on("resize.backstretch",a.proxy(this.resize,this)).on("orientationchange.backstretch",a.proxy(function(){this.isBody&&0===d.pageYOffset&&(d.scrollTo(0,1),this.resize())},this))};q.prototype={resize:function(){try{var a={left:0,top:0},b=this.isBody?this.$root.width():this.$root.innerWidth(),e=b,g=this.isBody?d.innerHeight?d.innerHeight:this.$root.height():this.$root.innerHeight(),j=e/this.$img.data("ratio"),f;j>=g?(f=(j-g)/2,this.options.centeredY&&(a.top="-"+f+"px")):(j=g,e=j*this.$img.data("ratio"),f=(e-b)/2,this.options.centeredX&&(a.left="-"+f+"px"));this.$wrap.css({width:b,height:g}).find("img:not(.deleteable)").css({width:e,height:j}).css(a)}catch(h){}return this},show:function(c){if(!(Math.abs(c)>this.images.length-1)){var b=this,e=b.$wrap.find("img").addClass("deleteable"),d={relatedTarget:b.$container[0]};b.$container.trigger(a.Event("backstretch.before",d),[b,c]);this.index=c;clearInterval(b.interval);b.$img=a("<img />").css(s).bind("load",function(f){var h=this.width||a(f.target).width();f=this.height||a(f.target).height();a(this).data("ratio",h/f);a(this).fadeIn(b.options.speed||b.options.fade,function(){e.remove();b.paused||b.cycle();a(["after","show"]).each(function(){b.$container.trigger(a.Event("backstretch."+this,d),[b,c])})});b.resize()}).appendTo(b.$wrap);b.$img.attr("src",b.images[c]);return b}},next:function(){return this.show(this.index<this.images.length-1?this.index+1:0)},prev:function(){return this.show(0===this.index?this.images.length-1:this.index-1)},pause:function(){this.paused=!0;return this},resume:function(){this.paused=!1;this.next();return this},cycle:function(){1<this.images.length&&(clearInterval(this.interval),this.interval=setInterval(a.proxy(function(){this.paused||this.next()},this),this.options.duration));return this},destroy:function(c){a(d).off("resize.backstretch orientationchange.backstretch");clearInterval(this.interval);c||this.$wrap.remove();this.$container.removeData("backstretch")}};var l,f=navigator.userAgent,m=navigator.platform,e=f.match(/AppleWebKit\/([0-9]+)/),e=!!e&&e[1],h=f.match(/Fennec\/([0-9]+)/),h=!!h&&h[1],n=f.match(/Opera Mobi\/([0-9]+)/),t=!!n&&n[1],k=f.match(/MSIE ([0-9]+)/),k=!!k&&k[1];l=!((-1<m.indexOf("iPhone")||-1<m.indexOf("iPad")||-1<m.indexOf("iPod"))&&e&&534>e||d.operamini&&"[object OperaMini]"==={}.toString.call(d.operamini)||n&&7458>t||-1<f.indexOf("Android")&&e&&533>e||h&&6>h||"palmGetResource"in d&&e&&534>e||-1<f.indexOf("MeeGo")&&-1<f.indexOf("NokiaBrowser/8.5.0")||k&&6>=k)})(jQuery,window);
/* jQuery tubular plugin
 |* by Sean McCambridge
 |* http://www.seanmccambridge.com/tubular
 |* version: 1.0
 |* updated: October 1, 2012
 |* since 2010
 |* licensed under the MIT License
 |* Enjoy.
 |*
 |* Thanks,
 |* Sean */

(function ($, window) {

    // test for feature support and return if failure

    // defaults
    var defaults = {
        ratio: 16 / 9, // usually either 4/3 or 16/9 -- tweak as needed
        videoId: 'ZCAnLxRvNNc', // toy robot in space is a good default, no?
        mute: true,
        repeat: true,
        width: $(window).width(),
        wrapperZIndex: 99,
        playButtonClass: 'tubular-play',
        pauseButtonClass: 'tubular-pause',
        muteButtonClass: 'tubular-mute',
        volumeUpClass: 'tubular-volume-up',
        volumeDownClass: 'tubular-volume-down',
        increaseVolumeBy: 10,
        start: 0
    };

    // methods

    var tubular = function (node, options) { // should be called on the wrapper div
        options = $.extend({}, defaults, options),
            $body = $('body'); // cache body node
        $node = $(node); // cache wrapper node

        // build container
        var tubularContainer = '<div id="tubular-container" style="overflow: hidden; position: fixed; z-index: 1; width: 100%; height: 100%"><div id="tubular-player" style="position: absolute"></div></div><div id="tubular-shield" style="width: 100%; height: 100%; z-index: 2; position: absolute; left: 0; top: 0;"></div>';

        // set up css prereq's, inject tubular container and set up wrapper defaults
        $('html,body').css({'width': '100%', 'height': '100%'});
        $body.prepend(tubularContainer);
        $node.css({position: 'relative', 'z-index': options.wrapperZIndex});

        // set up iframe player, use global scope so YT api can talk
        window.player;
        window.onYouTubeIframeAPIReady = function () {
            player = new YT.Player('tubular-player', {
                width: options.width,
                height: Math.ceil(options.width / options.ratio),
                videoId: options.videoId,
                playerVars: {
                    controls: 0,
                    showinfo: 0,
                    modestbranding: 1,
                    wmode: 'transparent'
                },
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        };

        window.onPlayerReady = function (e) {
            resize();
            if (options.mute) e.target.mute();
            e.target.seekTo(options.start);
            e.target.playVideo();
        };

        window.onPlayerStateChange = function (state) {
            if (state.data === 0 && options.repeat) { // video ended and repeat option is set true
                player.seekTo(options.start); // restart
            }
        };

        // resize handler updates width, height and offset of player after resize/init
        var resize = function () {
            var width = $(window).width(),
                pWidth, // player width, to be defined
                height = $(window).height(),
                pHeight, // player height, tbd
                $tubularPlayer = $('#tubular-player');

            // when screen aspect ratio differs from video, video must center and underlay one dimension

            if (width / options.ratio < height) { // if new video height < window height (gap underneath)
                pWidth = Math.ceil(height * options.ratio); // get new player width
                $tubularPlayer.width(pWidth).height(height).css({left: (width - pWidth) / 2, top: 0}); // player width is greater, offset left; reset top
            } else { // new video width < window width (gap to right)
                pHeight = Math.ceil(width / options.ratio); // get new player height
                $tubularPlayer.width(width).height(pHeight).css({left: 0, top: (height - pHeight) / 2}); // player height is greater, offset top; reset left
            }

        };

        // events
        $(window).on('resize.tubular', function () {
            resize();
        });

        $body.on('click', '.' + options.playButtonClass, function (e) { // play button
            e.preventDefault();
            player.playVideo();
        }).on('click', '.' + options.pauseButtonClass, function (e) { // pause button
            e.preventDefault();
            player.pauseVideo();
        }).on('click', '.' + options.muteButtonClass, function (e) { // mute button
            e.preventDefault();
            (player.isMuted()) ? player.unMute() : player.mute();
        }).on('click', '.' + options.volumeDownClass, function (e) { // volume down button
            e.preventDefault();
            var currentVolume = player.getVolume();
            if (currentVolume < options.increaseVolumeBy) currentVolume = options.increaseVolumeBy;
            player.setVolume(currentVolume - options.increaseVolumeBy);
        }).on('click', '.' + options.volumeUpClass, function (e) { // volume up button
            e.preventDefault();
            if (player.isMuted()) player.unMute(); // if mute is on, unmute
            var currentVolume = player.getVolume();
            if (currentVolume > 100 - options.increaseVolumeBy) currentVolume = 100 - options.increaseVolumeBy;
            player.setVolume(currentVolume + options.increaseVolumeBy);
        })
    };

    // load yt iframe js api
    var load_yt_api = function () {
        var tag = document.createElement('script');
        tag.src = "//www.youtube.com/iframe_api";
        tag.id = 'yt_api_script';
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    };
    load_yt_api();

    // create plugin
    $.fn.tubular = function (options) {
        if (typeof options == 'string') {
            if (options == 'remove') {

            }
        } else if (typeof options == 'object')
            return this.each(function () {
                if (!$.data(this, 'tubular_instantiated')) { // let's only run one
                    $.data(this, 'tubular_instantiated', tubular(this, options));
                }
            });
    }

})(jQuery, window);
/*
 * ******************************************************************************
 *  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: 18/03/13 22.42
 *  *****************************************************************************
 */

/*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);

/***************************************************************************************/
if(typeof ytp != "object")
	ytp ={};

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.3.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,
			showAnnotations        : false,
			printUrl               : true,
			onReady                : function (event) {},
			onStateChange          : function (event) {},
			onPlaybackQualityChange: function (event) {},
			onError                : function (event) {}
		},
		//todo: use @font-face instead
		controls       : {
			play  : "<img src='images/play.png'>",
			pause : "<img src='images/pause.png'>",
			mute  : "<img src='images/mute.png'>",
			unmute: "<img src='images/unmute.png'>",
			onlyYT: "<img src='images/onlyVideo.png'>",
			ytLogo: "<img src='images/YTLogo.png'>"
		},
		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;

				YTPlayer.opt.showAnnotations = (YTPlayer.opt.showAnnotations) ? '0' : '3';
				var playerVars = { 'autoplay': 0, 'modestbranding': 1, 'controls': 0, 'showinfo': 0, 'rel': 0, 'enablejsapi': 1, 'version': 3, 'playerapiid': playerID, 'origin': '*', 'allowfullscreen': true, 'wmode': "transparent", 'iv_load_policy': YTPlayer.opt.showAnnotations};

				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("<div/>").attr("id", playerID).addClass("playerBox");
				var overlay = jQuery("<div/>").css({position: "absolute", top: 0, left: 0, width: "100%", height: "100%"}).addClass("YTPOverlay"); //YTPlayer.isBackground ? "fixed" :

				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("<div/>").addClass("mbYTP_wrapper").attr("id", "wrapper_" + playerID);
				wrapper.css({position: "absolute", zIndex: 1, minWidth: "100%", minHeight: "100%", overflow: "hidden", opacity: 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);


				if(!YTPlayer.isBackground){
					overlay.on("mouseenter",function(){
						$YTPlayer.find(".mb_YTVPBar").addClass("visible");
					}).on("mouseleave",function(){
								$YTPlayer.find(".mb_YTVPBar").removeClass("visible");
							})
				}

				// 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 && ytp && ytp.stopMovieOnClick)
						jQuery(document).off("mousedown.ytplayer").on("mousedown,.ytplayer",function(e){
							var target = jQuery(e.target);
							if(target.is("a") || target.parents().is("a")){
								player.pauseYTP();
								YTPlayer.wrapper.css({opacity:0});
							}
						});

					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();

									$(window).on("resize.YTP",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.autoPlay) {
										YTPlayer.checkForStartAt = setInterval(function () {
											if (YTPlayer.player.getCurrentTime() >= YTPlayer.opt.startAt) {
												clearInterval(YTPlayer.checkForStartAt);
												$YTPlayer.pauseYTP();

/*
												if (YTPlayer.opt.mute) {
													jQuery(YTPlayer).muteYTPVolume();
												}else{
													jQuery(YTPlayer).unmuteYTPVolume();
												}
*/
											}
										}, 1);
									} else {
										$YTPlayer.playYTP();
										YTPlayer.player.setVolume(YTPlayer.opt.vol);

/*
										if (YTPlayer.opt.mute) {
											jQuery(YTPlayer).muteYTPVolume();
										}else{
											jQuery(YTPlayer).unmuteYTPVolume();
										}
*/
									}

									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.mute){
											$YTPlayer.muteYTPVolume();
											YTPlayer.opt.mute = false;
										}

										if (YTPlayer.opt.autoPlay && YTPlayer.loop == 0) {
											YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}, 2000);
										} else if(! YTPlayer.isBackground) {
											YTPlayer.wrapper.css({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity});
										}else{
											setTimeout(function () {
												jQuery(YTPlayer.playerEl).CSSAnimate({opacity: 1}, 2000);
												YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 2000);
											}, 1000);
										}

										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();
		},

		toggleLoops: function () {
			var YTPlayer = jQuery(this).get(0);
			var data = YTPlayer.opt;
			if (data.loop == 1) {
				data.loop = 0;
			} else {
				if(data.startAt) {
					YTPlayer.player.seekTo(data.startAt);
				} else {
					YTPlayer.player.playVideo();
				}
				data.loop = 1;
			}
		},

		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("<span/>").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("<div/>").addClass("buttonBar");
			var playpause = jQuery("<span>" + jQuery.mbYTPlayer.controls.play + "</span>").addClass("mb_YTVPPlaypause").click(function () {
				if (YTPlayer.player.getPlayerState() == 1)
					jQuery(YTPlayer).pauseYTP();
				else
					jQuery(YTPlayer).playYTP();
			});

			var MuteUnmute = jQuery("<span>" + jQuery.mbYTPlayer.controls.mute + "</span>").addClass("mb_YTVPMuteUnmute").click(function () {
				if (YTPlayer.player.getVolume()==0) {
					jQuery(YTPlayer).unmuteYTPVolume();
				} else {
					jQuery(YTPlayer).muteYTPVolume();
				}
			});

			var idx = jQuery("<span/>").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("<span/>").addClass("mb_YTVPUrl").append(viewOnYT);
			var onlyVideo = jQuery("<span/>").addClass("mb_OnlyYT").append(viewOnlyYT);

			var progressBar = jQuery("<div/>").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("<div/>").addClass("mb_YTVPLoaded").css("position", "absolute");
			var timeBar = jQuery("<div/>").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.toggleLoops = jQuery.mbYTPlayer.toggleLoops;
	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);

var vpa_heartbeat = new function () {
    this.interval = 10000;
    this.server_url = '';

    this.queue = [];
    this.state = 'STOPPED'; // DOING_AJAX / IDLE / STOPPED
    var that = this;

    this.set = function (settings) {
        for (var i in settings)
            this[i] = settings[i];
    }

    this.add = function (beat, add_method) {
        add_method = add_method || 'append';
        if (add_method == 'replace') {
            for (var i in this.queue) {
                if (this.queue[i].event_type == 'video_checkpoint') {
                    this.queue.splice(i, 1);
                }
            }
        }
        this.queue.push(beat);
    }

    this.stop = function () {
        this.state = 'STOPPED';
    }

    this.refresh = function () {
        setTimeout(function () {
            that.push();
        }, that.interval);
    }

    this.push = function (queue) {
        if (typeof queue == 'undefined') {
            if (this.state == 'DOING_AJAX')
                return;
            queue = this.queue;
            if (queue.length < 1) {
                this.refresh();
                return;
            }
            this.queue = [];
            this.state = 'DOING_AJAX';
        }

        $.ajax({
            type: "GET",
            url: this.server_url,
            data: {
                stats: JSON.stringify(queue)
            },
            dataType: "jsonp",
            timeout: 9000,
            success: function (result) {
                console.log('beat sent!');
            },
            error: function () {
                console.log('bead not sent.');
            },
            complete: function () {
                if (that.state == 'STOPPED')
                    return;

                that.refresh();

                that.state = 'IDLE';
            }

        });
    }
};
var ModulesSalesPage =
{
    'sales-area_arrows_delay': {
        listener: function (event, currentTime) {
            if (currentTime >= parseInt(js_options['sales-area_arrows_delay'], 10)) {
                $('.option__sales-area_arrows').css('visibility', 'visible');
            }
        },
        activate: function () {
            if (js_options['sales-area_arrows'] !== 'delayed')
                return;
            $('#video-events').on('timeupdate', this.listener);
        },
        deactivate: function () {
            $('#video-events').off('timeupdate', this.listener);
        }
    },
    'modal-form' : {
        activate: function () {
            var that = this;
            if (is_editable) {
                return;
            }
            switch(js_options['modal-form_element-click']) {
                case 'button':
                    $('.call-modal-form-button ').on('click', function(e) {
                        e.preventDefault();
                        that.show_overlay();
                    })
                    break;
                case 'overlay':
                    $('.call-modal-form-overlay').on('click', function(e) {
                        e.preventDefault();
                        that.show_overlay();
                    })
                    ModulesVideoOnly['overlay-button'].activate();
                    break;
            }
        },
        deactivate: function () {

        },
        show_overlay: function () {
            $('.simplemodal-container').fadeIn(300)
        },
        hide_overlay: function () {
            $('.simplemodal-container').fadeOut(200)
        }
    }

};

jQuery(document).ready(function () {

    for (var i in js_options) {
        if (typeof ModulesSalesPage[i] !== 'undefined' && js_options[i]) {
            ModulesSalesPage[i].activate();
        }
    }
});
jQuery(document).ready(function ($) {
    var success_redirect = false;
    $('body').on('focus', 'form.form-optin :input', function () {
        $(this).removeClass('erreur');
    });
    $('form.form-optin').submit(function (event) {
        //validate first
        var $form = $(this);
        var _bail = false;
        $(this).find(":input:text").each(function () {
            if (jQuery.trim($(this).val()) == '') {
                $(this).addClass('erreur');
                _bail = true;
            }
        });

        if (_bail)
            return false;

        $(this).plainOverlay('show', {
            color: '#000000',
            opacity: 0.85,
            progress: function () {
                return $('<i style="color:#FFF" class="fa fa-spinner fa-spin"></i>');
            }
        });

        if ($(this).data('submit-type') != 'browser') {
            event.preventDefault();
            var post_data = $(this).serializeArray();
            post_data.push({name: 'g2w', value: $(this).data('g2w')});
            $.ajax({
                url: site_url + '/endpoint/save-lead/' + project_id + '/' + $(this).data('service') + '/' + $(this).data('list'),
                dataType: 'jsonp',
                data: post_data,
                success: function (data) {
                    form_submitted_cb($form);
                }
            });
        } else {
            $('#optin_submit_iframe').data('blank-src', 0).data('form', $(this));
        }

        if ($form.data('after-submit-form') == 'page' && $form.data('open-in') == 'new') {
            window.open($form.data('target-url'), '_blank');
        }

    });



    $('#optin_submit_iframe').load(function () {
        if ($(this).data('blank-src') != 0)
            return;
        form_submitted_cb($(this).data('form'));
        $(this).removeData('form');

    });

    function form_submitted_cb($form) {

        $form.plainOverlay('hide');
        try {
            vpa_heartbeat.add({
                project_id: project_id,
                event_type: page_type + '_optin',
                is_conversion: 1
            });
        } catch (err) {
        }

        if ($form.data('overlay') === true) {
            ModulesVideoOnly['overlay-optin'].hide_overlay();
            cookie.set('overlay_user_subscribed_' + project_id, true);
            if ($form.data('after-submit-form') == 'page' && $form.data('open-in') == 'same') {
                window.top.location.href = $form.data('target-url');
            }

            //redirect to URL in case it's set
            if ($form.data('redirect-url')) {
                window.top.location.href = $form.data('redirect-url');
            }
            return true;
        } else {
            var $parent = $form.closest('.optin__wrapper');
            $parent.find('.optin-success').show();
            $parent.find('.form__wrapper').hide();

            //redirect to URL in case it's set
            if ($form.data('redirect-url')) {
                window.top.location.href = $form.data('redirect-url');
            }
        }
    }

    $('.simplemodal-container .modalCloseImg').on('click', function() {
        ModulesSalesPage['modal-form'].hide_overlay();
    })
});
!function () {
    var project_type;
    if (typeof page_type === 'undefined')
        project_type = 'video-only';
    else
        project_type = page_type;

    function visibility_callback(el) {
        var scope;
        if (project_type == 'video-only') {
            scope = el.contentWindow;
        } else if (project_type == 'sales-page') {
            scope = window;
        }
        if (element_is_in_viewport(el)) {
            scope.postMessage('pp_video_is_visible', "*");
        } else {
            scope.postMessage('pp_video_not_visible', "*");
        }
    }

    function element_is_in_viewport(el) {
        var rect = el.getBoundingClientRect();
        return (
        rect.top > -rect.height
            /*&&
             rect.left >= 0 &&
             rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
             rect.right <= (window.innerWidth || document.documentElement.clientWidth)*/
        );
    }

    var check_element_visibility = function () {
        var videos;
        if (project_type == 'video-only')
            videos = document.querySelectorAll("iframe.pressplay-video");
        else if (project_type == 'sales-page')
            videos = document.querySelectorAll(".video-holder");
        for (var i = 0, els = videos.length; i < els; i++) {
            visibility_callback(videos[i]);
        }
    };

    var events = ['DOMContentLoaded', 'load', 'resize', 'scroll'];

    for (var i in events) {
        window.addEventListener(events[i], check_element_visibility, false);
    }
}();
/* global videojs, YT */
/* jshint browser: true */

(function () {
    /**
     * @fileoverview YouTube Media Controller - Wrapper for YouTube Media API
     */

    /**
     * YouTube Media Controller - Wrapper for YouTube Media API
     * @param {videojs.Player|Object} player
     * @param {Object=} options
     * @param {Function=} ready
     * @constructor
     */

    function addEventListener(element, event, cb) {
        if (!element.addEventListener) {
            element.attachEvent(event, cb);
        } else {
            element.addEventListener(event, cb, true);
        }
    }

    videojs.Youtube = videojs.MediaTechController.extend({
        /** @constructor */
        init: function (player, options, ready) {
            // No event is triggering this for YouTube
            this['featuresProgressEvents'] = false;
            this['featuresTimeupdateEvents'] = false;

            videojs.MediaTechController.call(this, player, options, ready);

            this.isIos = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
            this.isAndroid = /(Android)/g.test(navigator.userAgent);
            //used to prevent play events on IOS7 and Android > 4.2 until the user has clicked the player
            this.playVideoIsAllowed = !(this.isIos || this.isAndroid);

            // Copy the JavaScript options if they exists
            if (typeof options['source'] !== 'undefined') {
                for (var key in options['source']) {
                    if (options['source'].hasOwnProperty(key)) {
                        player.options()[key] = options['source'][key];
                    }
                }
            }

            this.userQuality = videojs.Youtube.convertQualityName(player.options()['quality']);

            // Save those for internal usage
            this.player_ = player;
            this.playerEl_ = document.getElementById(player.id());
            this.playerEl_.className += ' vjs-youtube';

            // Create the Quality button
            this.qualityButton = document.createElement('div');
            this.qualityButton.setAttribute('class', 'vjs-quality-button vjs-menu-button vjs-control');
            this.qualityButton.setAttribute('tabindex', 0);

            var qualityContent = document.createElement('div');
            this.qualityButton.appendChild(qualityContent);

            this.qualityTitle = document.createElement('span');
            qualityContent.appendChild(this.qualityTitle);

            if (player.options()['quality'] !== 'undefined') {
                setInnerText(this.qualityTitle, player.options()['quality'] || 'auto');
            }

            var qualityMenu = document.createElement('div');
            qualityMenu.setAttribute('class', 'vjs-menu');
            this.qualityButton.appendChild(qualityMenu);

            this.qualityMenuContent = document.createElement('ul');
            this.qualityMenuContent.setAttribute('class', 'vjs-menu-content');
            qualityMenu.appendChild(this.qualityMenuContent);

            this.id_ = this.player_.id() + '_youtube_api';

            this.el_ = videojs.Component.prototype.createEl('iframe', {
                id: this.id_,
                className: 'vjs-tech',
                scrolling: 'no',
                marginWidth: 0,
                marginHeight: 0,
                frameBorder: 0
            });

            this.el_.setAttribute('allowFullScreen', '');

            this.playerEl_.insertBefore(this.el_, this.playerEl_.firstChild);

            if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
                var ieVersion = Number(RegExp.$1);
                this.addIframeBlocker(ieVersion);
            } else if (!/(iPad|iPhone|iPod|android)/g.test(navigator.userAgent)) {
                // the pointer-events: none block the mobile player
                this.el_.className += ' onDesktop';
                this.addIframeBlocker();
            }

            this.parseSrc(player.options()['src']);

            this.playOnReady = this.player_.options()['autoplay'] || false;
            this.forceSSL = !!(
            typeof this.player_.options()['forceSSL'] === 'undefined' ||
            this.player_.options()['forceSSL'] === true
            );
            this.forceHTML5 = !!(
            typeof this.player_.options()['forceHTML5'] === 'undefined' ||
            this.player_.options()['forceHTML5'] === true
            );

            this.updateIframeSrc();

            var self = this;

            player.ready(function () {
                var controlBar = self.playerEl_.querySelectorAll('.vjs-control-bar')[0];
                controlBar.appendChild(self.qualityButton);

                if (self.playOnReady && !self.player_.options()['ytcontrols']) {
                    if (typeof self.player_.loadingSpinner !== 'undefined') {
                        self.player_.loadingSpinner.show();
                    }
                    if (typeof self.player_.bigPlayButton !== 'undefined') {
                        self.player_.bigPlayButton.hide();
                    }
                }

                player.trigger('loadstart');
            });

            this.on('dispose', function () {
                if (this.ytplayer) {
                    this.ytplayer.destroy();
                }

                if (!this.player_.options()['ytcontrols']) {
                    this.player_.off('waiting', this.bindedWaiting);
                }

                // Remove the poster
                this.playerEl_.querySelectorAll('.vjs-poster')[0].style.backgroundImage = 'none';

                // If still connected to the DOM, remove it.
                if (this.el_.parentNode) {
                    this.el_.parentNode.removeChild(this.el_);
                }

                // Get rid of the created DOM elements
                if (this.qualityButton.parentNode) {
                    this.qualityButton.parentNode.removeChild(this.qualityButton);
                }

                if (typeof this.player_.loadingSpinner !== 'undefined') {
                    this.player_.loadingSpinner.hide();
                }
                if (typeof this.player_.bigPlayButton !== 'undefined') {
                    this.player_.bigPlayButton.hide();
                }

                if (this.iframeblocker) {
                    this.playerEl_.removeChild(this.iframeblocker);
                }
            });
        }
    });

    videojs.Youtube.prototype.updateIframeSrc = function () {
        var params = {
            enablejsapi: 1,
            /*jshint -W106 */
            iv_load_policy: 1,
            /*jshint +W106 */
            playerapiid: this.id(),
            disablekb: 1,
            wmode: 'transparent',
            controls: (this.player_.options()['ytcontrols']) ? 1 : 0,
            html5: (this.player_.options()['forceHTML5']) ? 1 : null,
            playsinline: (this.player_.options()['playsInline']) ? 1 : 0,
            showinfo: 0,
            modestbranding: 1,
            rel: 0,
            autoplay: (this.playOnReady) ? 1 : 0,
            loop: (this.player_.options()['loop']) ? 1 : 0,
            list: this.playlistId,
            vq: this.userQuality,
            origin: window.location.protocol + '//' + window.location.host,
            fs: 0
        };

        // When running with no Web server, we can't specify the origin or it will break the YouTube API messages
        if (window.location.protocol === 'file:') {
            delete params.origin;
        }

        // Delete unset properties
        for (var prop in params) {
            if (params.hasOwnProperty(prop) &&
                ( typeof params[prop] === 'undefined' || params[prop] === null )
            ) {
                delete params[prop];
            }
        }
        var self = this;

        if (this.videoId === null) {
            this.el_.src = 'about:blank';
            setTimeout(function () {
                self.triggerReady();
            }, 500);
        } else {
            this.el_.src = (
                (this.forceSSL || window.location.protocol === 'file:') ?
                    'https:'
                    : window.location.protocol
            ) + '//www.youtube.com/embed/' + this.videoId + '?' + videojs.Youtube.makeQueryString(params);

            if (this.player_.options()['ytcontrols']) {
                // Disable the video.js controls if we use the YouTube controls
                this.player_.controls(false);
            } else if (typeof this.player_.poster() === 'undefined') {
                // Don't use player.poster(), it will fail here because the tech is still null in constructor
                setTimeout(function () {
                    var posterEl = self.playerEl_.querySelectorAll('.vjs-poster')[0];
                    posterEl.style.backgroundImage = 'url(https://img.youtube.com/vi/' + self.videoId + '/0.jpg)';
                    posterEl.style.display = '';
                }, 100);
            }

            this.bindedWaiting = function () {
                self.onWaiting();
            };

            this.player_.on('waiting', this.bindedWaiting);

            if (videojs.Youtube.apiReady) {
                this.loadYoutube();
            } else {
                // Add to the queue because the YouTube API is not ready
                videojs.Youtube.loadingQueue.push(this);

                // Load the YouTube API if it is the first YouTube video
                if (!videojs.Youtube.apiLoading) {
                    var tag = document.createElement('script');
                    tag.onerror = function (e) {
                        self.onError(e);
                    };
                    tag.src = ( !this.forceSSL && window.location.protocol !== 'file:' ) ?
                        '//www.youtube.com/iframe_api'
                        : 'https://www.youtube.com/iframe_api';
                    var firstScriptTag = document.getElementsByTagName('script')[0];
                    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
                    videojs.Youtube.apiLoading = true;
                }
            }
        }
    };

    videojs.Youtube.prototype.onWaiting = function (/*e*/) {
        // Make sure to hide the play button while the spinner is there
        this.player_.bigPlayButton.hide();
        this.player_.posterImage.hide();
    };

    videojs.Youtube.prototype.addIframeBlocker = function (ieVersion) {
        this.iframeblocker = videojs.Component.prototype.createEl('div');

        this.iframeblocker.className = 'iframeblocker';

        this.iframeblocker.style.position = 'absolute';
        this.iframeblocker.style.left = 0;
        this.iframeblocker.style.right = 0;
        this.iframeblocker.style.top = 0;
        this.iframeblocker.style.bottom = 0;
        this.iframeblocker.style.zIndex = 9996;

        // Odd quirk for IE8 (doesn't support rgba)
        if (ieVersion && ieVersion < 9) {
            this.iframeblocker.style.opacity = 0.01;
        } else {
            this.iframeblocker.style.background = 'rgba(255, 255, 255, 0.01)';
        }

        var self = this;
        addEventListener(this.iframeblocker, 'mousemove', function (e) {
            if (!self.player_.userActive()) {
                self.player_.userActive(true);
            }

            e.stopPropagation();
            e.preventDefault();
        });

        addEventListener(this.iframeblocker, 'click', function (/*e*/) {
            if (self.paused()) {
                self.play();
            } else {
                self.pause();
            }
        });

        this.playerEl_.insertBefore(this.iframeblocker, this.el_.nextSibling);
    };

    videojs.Youtube.prototype.parseSrc = function (src) {
        this.srcVal = src;

        if (src) {
            // Regex to parse the video ID
            var regId = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
            var match = src.match(regId);

            if (match && match[2].length === 11) {
                this.videoId = match[2];
            } else {
                this.videoId = null;
            }

            // Regex to parse the playlist ID
            var regPlaylist = /[?&]list=([^#\&\?]+)/;
            match = src.match(regPlaylist);

            if (match !== null && match.length > 1) {
                this.playlistId = match[1];
            } else {
                // Make sure their is no playlist
                if (this.playlistId) {
                    delete this.playlistId;
                }
            }

            // Parse video quality option
            var regVideoQuality = /[?&]vq=([^#\&\?]+)/;
            match = src.match(regVideoQuality);

            if (match !== null && match.length > 1) {
                this.userQuality = match[1];
                setInnerText(this.qualityTitle, videojs.Youtube.parseQualityName(this.userQuality));
            }
        }
    };

    videojs.Youtube.prototype.src = function (src) {
        if (typeof src !== 'undefined') {
            this.parseSrc(src);

            if (this.el_.src === 'about:blank') {
                this.updateIframeSrc();
                return;
            }

            delete this.defaultQuality;

            if (this.videoId !== null) {
                if (this.player_.options()['autoplay'] && this.playVideoIsAllowed) {
                    this.ytplayer.loadVideoById({
                        videoId: this.videoId,
                        suggestedQuality: this.userQuality
                    });
                } else {
                    this.ytplayer.cueVideoById({
                        videoId: this.videoId,
                        suggestedQuality: this.userQuality
                    });
                }

                // Update the poster
                this.playerEl_.querySelectorAll('.vjs-poster')[0].style.backgroundImage =
                    'url(https://img.youtube.com/vi/' + this.videoId + '/0.jpg)';
                this.player_.poster('https://img.youtube.com/vi/' + this.videoId + '/0.jpg');
            }
            /* else Invalid URL */
        }

        return this.srcVal;
    };

    videojs.Youtube.prototype.load = function () {
    };

    videojs.Youtube.prototype.play = function () {
        if (this.videoId !== null) {

            // Make sure to not display the spinner for mobile
            if (!this.player_.options()['ytcontrols']) {
                // Display the spinner until the video is playing by YouTube
                this.player_.trigger('waiting');
            }

            if (this.isReady_) {
                // Sync the player volume with YouTube
                this.ytplayer.setVolume(this.player_.volume() * 100);

                if (this.volumeVal > 0) {
                    this.ytplayer.unMute();
                } else {
                    this.ytplayer.mute();
                }

                if (this.playVideoIsAllowed) {
                    this.ytplayer.playVideo();
                }
            } else {
                this.playOnReady = true;
            }
        }
    };

    videojs.Youtube.prototype.pause = function () {
        this.ytplayer.pauseVideo();
    };
    videojs.Youtube.prototype.paused = function () {
        return (this.ytplayer) ?
            (this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING)
            : true;
    };
    videojs.Youtube.prototype.currentTime = function () {
        return (this.ytplayer && this.ytplayer.getCurrentTime) ? this.ytplayer.getCurrentTime() : 0;
    };
    videojs.Youtube.prototype.setCurrentTime = function (seconds) {
        this.ytplayer.seekTo(seconds, true);
        this.player_.trigger('timeupdate');
    };
    videojs.Youtube.prototype.duration = function () {
        return (this.ytplayer && this.ytplayer.getDuration) ? this.ytplayer.getDuration() : 0;
    };
    videojs.Youtube.prototype.currentSrc = function () {
        return this.srcVal;
    };

    videojs.Youtube.prototype.volume = function () {
        if (this.ytplayer && isNaN(this.volumeVal)) {
            this.volumeVal = this.ytplayer.getVolume() / 100.0;
            this.player_.volume(this.volumeVal);
        }

        return this.volumeVal;
    };

    videojs.Youtube.prototype.setVolume = function (percentAsDecimal) {
        if (typeof(percentAsDecimal) !== 'undefined' && percentAsDecimal !== this.volumeVal) {
            this.ytplayer.setVolume(percentAsDecimal * 100.0);
            this.volumeVal = percentAsDecimal;
            this.player_.trigger('volumechange');
        }
    };

    videojs.Youtube.prototype.muted = function () {
        return this.mutedVal;
    };
    videojs.Youtube.prototype.setMuted = function (muted) {
        if (muted) {
            this.ytplayer.mute();
            this._stored_volume = this.volumeVal;
            this.player_.volume(0);
        } else {
            this.ytplayer.unMute();
            this.player_.volume(this._stored_volume);
        }

        this.mutedVal = muted;

        this.player_.trigger('volumechange');
    };

    videojs.Youtube.prototype.buffered = function () {
        if (this.ytplayer && this.ytplayer.getVideoBytesLoaded) {
            var loadedBytes = this.ytplayer.getVideoBytesLoaded();
            var totalBytes = this.ytplayer.getVideoBytesTotal();
            if (!loadedBytes || !totalBytes) {
                return 0;
            }

            var duration = this.ytplayer.getDuration();
            var secondsBuffered = (loadedBytes / totalBytes) * duration;
            var secondsOffset = (this.ytplayer.getVideoStartBytes() / totalBytes) * duration;

            return videojs.createTimeRange(secondsOffset, secondsOffset + secondsBuffered);
        } else {
            return videojs.createTimeRange(0, 0);
        }
    };

    videojs.Youtube.prototype.supportsFullScreen = function () {
        return true;
    };

    // YouTube is supported on all platforms
    videojs.Youtube.isSupported = function () {
        return true;
    };

    // You can use video/youtube as a media in your HTML5 video to specify the source
    videojs.Youtube.canPlaySource = function (srcObj) {
        return (srcObj.type === 'video/youtube');
    };

    // Always can control the volume
    videojs.Youtube.canControlVolume = function () {
        return true;
    };

    ////////////////////////////// YouTube specific functions //////////////////////////////

    // All videos created before YouTube API is loaded
    videojs.Youtube.loadingQueue = [];

    // Create the YouTube player
    videojs.Youtube.prototype.loadYoutube = function () {
        this.ytplayer = new YT.Player(this.id_, {
            events: {
                onReady: function (e) {
                    e.target.vjsTech.onReady();
                },
                onStateChange: function (e) {
                    e.target.vjsTech.onStateChange(e.data);
                },
                onPlaybackQualityChange: function (e) {
                    e.target.vjsTech.onPlaybackQualityChange('hd720');
                },
                onError: function (e) {
                    e.target.vjsTech.onError(e.data);
                }
            }
        });
        this.player_['ytplayer'] = this.ytplayer;
        this.ytplayer.vjsTech = this;
    };

    // Transform a JavaScript object into URL params
    videojs.Youtube.makeQueryString = function (args) {
        var array = [];
        for (var key in args) {
            if (args.hasOwnProperty(key)) {
                array.push(key + '=' + args[key]);
            }
        }

        return array.join('&');
    };

    // Called when YouTube API is ready to be used
    window.onYouTubeIframeAPIReady = function () {
        var yt;
        while ((yt = videojs.Youtube.loadingQueue.shift())) {
            yt.loadYoutube();
        }
        videojs.Youtube.loadingQueue = [];
        videojs.Youtube.apiReady = true;
    };

    videojs.Youtube.prototype.onReady = function () {
        this.isReady_ = true;
        this.triggerReady();

        this.player_.trigger('loadedmetadata');

        // The duration is loaded so we might as well fire off the timeupdate and duration events
        // this allows for the duration of the video (timeremaining) to be displayed if styled
        // to show the control bar initially. This gives the user the ability to see how long the video
        // is before clicking play
        this.player_.trigger('durationchange');
        this.player_.trigger('timeupdate');

        // Let the player take care of itself as soon as the YouTube is ready
        // The loading spinner while waiting for the tech would be impossible otherwise
        if (typeof this.player_.loadingSpinner !== 'undefined') {
            this.player_.loadingSpinner.hide();
        }

        if (this.player_.options()['muted']) {
            this.setMuted(true);
        }

        // Play ASAP if they clicked play before it's ready
        if (this.playOnReady) {
            this.playOnReady = false;
            this.play();
        }
    };

    videojs.Youtube.prototype.updateQualities = function () {

        function setupEventListener(el) {
            addEventListener(el, 'click', function () {
                var quality = this.getAttribute('data-val');
                self.ytplayer.setPlaybackQuality(quality);

                self.userQuality = quality;
                setInnerText(self.qualityTitle, videojs.Youtube.parseQualityName(quality));

                var selected = self.qualityMenuContent.querySelector('.vjs-selected');
                if (selected) {
                    videojs.Youtube.removeClass(selected, 'vjs-selected');
                }

                videojs.Youtube.addClass(this, 'vjs-selected');
            });
        }

        var qualities = this.ytplayer.getAvailableQualityLevels();
        var self = this;

        if (qualities.indexOf(this.userQuality) < 0) {
            setInnerText(self.qualityTitle, videojs.Youtube.parseQualityName(this.defaultQuality));
        }

        if (qualities.length === 0) {
            this.qualityButton.style.display = 'none';
        } else {
            this.qualityButton.style.display = '';

            while (this.qualityMenuContent.hasChildNodes()) {
                this.qualityMenuContent.removeChild(this.qualityMenuContent.lastChild);
            }

            for (var i = 0; i < qualities.length; ++i) {
                var el = document.createElement('li');
                el.setAttribute('class', 'vjs-menu-item');
                setInnerText(el, videojs.Youtube.parseQualityName(qualities[i]));
                el.setAttribute('data-val', qualities[i]);
                if (qualities[i] === this.quality) {
                    videojs.Youtube.addClass(el, 'vjs-selected');
                }
                setupEventListener(el);


                this.qualityMenuContent.appendChild(el);
            }
        }
    };

    videojs.Youtube.prototype.onStateChange = function (state) {
        if (state !== this.lastState) {
            switch (state) {
                case -1:
                    this.player_.trigger('durationchange');
                    break;

                case YT.PlayerState.ENDED:
                    // Replace YouTube play button by our own
                    if (!this.player_.options()['ytcontrols']) {
                        this.playerEl_.querySelectorAll('.vjs-poster')[0].style.display = 'block';
                        if (typeof this.player_.bigPlayButton !== 'undefined') {
                            this.player_.bigPlayButton.show();
                        }
                    }

                    this.player_.trigger('ended');
                    break;

                case YT.PlayerState.PLAYING:
                    this.playVideoIsAllowed = true;
                    this.updateQualities();
                    this.player_.trigger('timeupdate');
                    this.player_.trigger('durationchange');
                    this.player_.trigger('playing');
                    this.player_.trigger('play');
                    break;

                case YT.PlayerState.PAUSED:
                    this.player_.trigger('pause');
                    break;

                case YT.PlayerState.BUFFERING:
                    this.player_.trigger('timeupdate');

                    // Make sure to not display the spinner for mobile
                    if (!this.player_.options()['ytcontrols']) {
                        this.player_.trigger('waiting');
                    }
                    break;

                case YT.PlayerState.CUED:
                    break;
            }

            this.lastState = state;
        }
    };

    videojs.Youtube.convertQualityName = function (name) {
        switch (name) {
            case '144p':
                return 'tiny';

            case '240p':
                return 'small';

            case '360p':
                return 'medium';

            case '480p':
                return 'large';

            case '720p':
                return 'hd720';

            case '1080p':
                return 'hd1080';
        }

        return 'auto';
    };

    videojs.Youtube.parseQualityName = function (name) {
        switch (name) {
            case 'tiny':
                return '144p';

            case 'small':
                return '240p';

            case 'medium':
                return '360p';

            case 'large':
                return '480p';

            case 'hd720':
                return '720p';

            case 'hd1080':
                return '1080p';
        }

        return 'auto';
    };

    videojs.Youtube.prototype.onPlaybackQualityChange = function (quality) {
        if (typeof this.defaultQuality === 'undefined') {
            this.defaultQuality = quality;

            if (typeof this.userQuality !== 'undefined') {
                return;
            }
        }

        this.quality = quality;
        setInnerText(this.qualityTitle, videojs.Youtube.parseQualityName(quality));

        switch (quality) {
            case 'medium':
                this.player_.videoWidth = 480;
                this.player_.videoHeight = 360;
                break;

            case 'large':
                this.player_.videoWidth = 640;
                this.player_.videoHeight = 480;
                break;

            case 'hd720':
                this.player_.videoWidth = 960;
                this.player_.videoHeight = 720;
                break;

            case 'hd1080':
                this.player_.videoWidth = 1440;
                this.player_.videoHeight = 1080;
                break;

            case 'highres':
                this.player_.videoWidth = 1920;
                this.player_.videoHeight = 1080;
                break;

            case 'small':
                this.player_.videoWidth = 320;
                this.player_.videoHeight = 240;
                break;

            case 'tiny':
                this.player_.videoWidth = 144;
                this.player_.videoHeight = 108;
                break;

            default:
                this.player_.videoWidth = 0;
                this.player_.videoHeight = 0;
                break;
        }

        this.player_.trigger('ratechange');
    };

    videojs.Youtube.prototype.onError = function (error) {
        this.player_.error(error);

        if (error === 100 || error === 101 || error === 150) {
            this.player_.bigPlayButton.hide();
            this.player_.loadingSpinner.hide();
            this.player_.posterImage.hide();
        }
    };

    /**
     * Add a CSS class name to an element
     * @param {Element} element    Element to add class name to
     * @param {String} classToAdd Classname to add
     */
    videojs.Youtube.addClass = function (element, classToAdd) {
        if ((' ' + element.className + ' ').indexOf(' ' + classToAdd + ' ') === -1) {
            element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;
        }
    };

    /**
     * Remove a CSS class name from an element
     * @param {Element} element    Element to remove from class name
     * @param {String} classToRemove Classname to remove
     */
    videojs.Youtube.removeClass = function (element, classToRemove) {
        var classNames, i;

        if (element.className.indexOf(classToRemove) === -1) {
            return;
        }

        classNames = element.className.split(' ');

        // no arr.indexOf in ie8, and we don't want to add a big shim
        for (i = classNames.length - 1; i >= 0; i--) {
            if (classNames[i] === classToRemove) {
                classNames.splice(i, 1);
            }
        }

        element.className = classNames.join(' ');
    };

    // Cross-browsers support (IE8 wink wink)
    function setInnerText(element, text) {
        if (typeof element === 'undefined') {
            return false;
        }

        var textProperty = ('innerText' in element) ? 'innerText' : 'textContent';
        try {
            element[textProperty] = text;
        } catch (anException) {
            //IE<9 FIX
            element.setAttribute('innerText', text);
        }
    }


// Stretch the YouTube poster
    var style = document.createElement('style');
    var def = ' ' +
        '.vjs-youtube .vjs-poster { background-size: cover !important; }' +
        '.vjs-youtube .vjs-poster, ' +
        '.vjs-youtube .vjs-loading-spinner, ' +
        '.vjs-youtube .vjs-text-track-display{' +
        '    pointer-events: none !important;' +
        ' }' +
        '.vjs-youtube.vjs-user-active .iframeblocker { display: none; }' +
        '.vjs-youtube.vjs-user-inactive .vjs-tech.onDesktop { pointer-events: none; }' +
        '.vjs-quality-button > div:first-child > span:first-child { position:relative;top:7px }';

    style.setAttribute('type', 'text/css');
    document.getElementsByTagName('head')[0].appendChild(style);

    if (style.styleSheet) {
        style.styleSheet.cssText = def;
    } else {
        style.appendChild(document.createTextNode(def));
    }

    // IE8 fix for indexOf
    if (!Array.prototype.indexOf) {
        Array.prototype.indexOf = function (elt /*, from*/) {
            var len = this.length >>> 0; // jshint ignore:line

            var from = Number(arguments[1]) || 0;
            from = (from < 0) ?
                Math.ceil(from)
                : Math.floor(from);
            if (from < 0) {
                from += len;
            }

            for (; from < len; from++) {
                if (from in this && this[from] === elt) {
                    return from;
                }
            }
            return -1;
        };
    }
})();

var VimeoState = {
    UNSTARTED: -1,
    ENDED: 0,
    PLAYING: 1,
    PAUSED: 2,
    BUFFERING: 3
};

videojs.Vimeo = videojs.MediaTechController.extend({
    init: function(player, options, ready){
        videojs.MediaTechController.call(this, player, options, ready);

        // Copy the JavaScript options if they exists
        if (typeof options['source'] != 'undefined') {
            for (var key in options['source']) {
                player.options()[key] = options['source'][key];
            }
        }

        this.player_ = player;
        this.player_el_ = document.getElementById(this.player_.id());


        // Copy the JavaScript options if they exists
        if (typeof options['source'] != 'undefined') {
            for (var key in options['source']) {
                player.options()[key] = options['source'][key];
            }
        }

        // Disable lockShowing because we always use Vimeo controls
        this.player_.controls(false);

        this.id_ = this.player_.id() + '_vimeo_api';
        this.player_el_.className += ' vjs-youtube';

        this.el_ = videojs.Component.prototype.createEl('iframe', {
            id: this.id_,
            className: 'vjs-tech',
            scrolling: 'no',
            marginWidth: 0,
            marginHeight: 0,
            frameBorder: 0,
            webkitAllowFullScreen: 'true',
            mozallowfullscreen: 'true',
            allowFullScreen: 'true'
        });

        this.player_el_.insertBefore(this.el_, this.player_el_.firstChild);

        this.baseUrl = '//player.vimeo.com/video/';

        this.vimeo = {};
        this.vimeoInfo = {};

        var self = this;
        this.el_.onload = function() { self.onLoad(); };

        this.startMuted = player.options()['muted'];

        this.src(player.options()['src']);
    }
});

videojs.Vimeo.prototype.dispose = function(){
    this.vimeo.api('unload');
    delete this.vimeo;
    this.el_.parentNode.removeChild(this.el_);

    videojs.MediaTechController.prototype.dispose.call(this);
};

videojs.Vimeo.prototype.src = function(src) {
    this.isReady_ = false;
    // Regex that parse the video ID for any Vimeo URL
    var regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/;
    var match = src.match(regExp);

    if (match){
        this.videoId = match[5];
    }

    var params = {
        api: 1,
        byline: 0,
        portrait: 0,
        show_title: 0,
        show_byline: 0,
        show_portait: 0,
        fullscreen: 1,
        color: this.player_.options()['color'], //'F70B0B',
        player_id: this.id_,
        autoplay: (this.player_.options()['autoplay'])? 1 : 0,
        loop: (this.player_.options()['loop']) ? 1 : 0
    };

    this.el_.src = this.baseUrl + this.videoId + '?' + videojs.Vimeo.makeQueryString(params);
};

videojs.Vimeo.prototype.load = function(){};
videojs.Vimeo.prototype.play = function(){ this.vimeo.api('play'); };
videojs.Vimeo.prototype.pause = function(){ this.vimeo.api('pause'); };
videojs.Vimeo.prototype.paused = function(){
    return this.vimeoInfo.state !== VimeoState.PLAYING &&
        this.vimeoInfo.state !== VimeoState.BUFFERING;
};

videojs.Vimeo.prototype.currentTime = function(){ return this.vimeoInfo.time || 0; };

videojs.Vimeo.prototype.setCurrentTime = function(seconds){
    this.vimeo.api('seekTo', seconds);
    this.player_.trigger('timeupdate');
};

videojs.Vimeo.prototype.duration = function(){ return this.vimeoInfo.duration || 0; };
videojs.Vimeo.prototype.buffered = function(){ return videojs.createTimeRange(0, (this.vimeoInfo.buffered*this.vimeoInfo.duration) || 0); };

videojs.Vimeo.prototype.volume = function() { return (this.vimeoInfo.muted)? this.vimeoInfo.muteVolume : this.vimeoInfo.volume; };
videojs.Vimeo.prototype.setVolume = function(percentAsDecimal){
    this.vimeo.api('setvolume', percentAsDecimal);
    this.vimeoInfo.volume = percentAsDecimal;
    this.player_.trigger('volumechange');
};

videojs.Vimeo.prototype.muted = function() { return this.vimeoInfo.muted || false; };
videojs.Vimeo.prototype.setMuted = function(muted) {
    if (muted) {
        this.vimeoInfo.muteVolume = this.vimeoInfo.volume;
        this.setVolume(0);
    } else {
        this.setVolume(this.vimeoInfo.muteVolume);
    }

    this.vimeoInfo.muted = muted;
    this.player_.trigger('volumechange');
};

videojs.Vimeo.prototype.onReady = function(){
    this.isReady_ = true;

    this.triggerReady();
    this.player_.trigger('loadedmetadata');
    if (this.startMuted) {
        this.setMuted(true);
        this.startMuted = false;
    }

};

videojs.Vimeo.prototype.onLoad = function(){
    if (this.vimeo.api) {
        this.vimeo.api('unload');
        delete this.vimeo;
    }

    this.vimeo = $f(this.el_);

    this.vimeoInfo = {
        state: VimeoState.UNSTARTED,
        volume: 1,
        muted: false,
        muteVolume: 1,
        time: 0,
        duration: 0,
        buffered: 0,
        url: this.baseUrl + this.videoId,
        error: null
    };

    var self = this;
    this.vimeo.addEvent('ready', function(id){
        self.onReady();

        self.vimeo.addEvent('loadProgress', function(data, id){ self.onLoadProgress(data); });
        self.vimeo.addEvent('playProgress', function(data, id){ self.onPlayProgress(data); });
        self.vimeo.addEvent('play', function(id){ self.onPlay(); });
        self.vimeo.addEvent('pause', function(id){ self.onPause(); });
        self.vimeo.addEvent('finish', function(id){ self.onFinish(); });
        self.vimeo.addEvent('seek', function(data, id){ self.onSeek(data); });


    });
};

videojs.Vimeo.prototype.onLoadProgress = function(data){
    var durationUpdate = !this.vimeoInfo.duration;
    this.vimeoInfo.duration = data.duration;
    this.vimeoInfo.buffered = data.percent;
    this.player_.trigger('progress');
    if (durationUpdate) this.player_.trigger('durationchange');
};

videojs.Vimeo.prototype.onPlayProgress = function(data){
    this.vimeoInfo.time = data.seconds;
    this.player_.trigger('timeupdate');
    this.player_.trigger('durationchange');
};

videojs.Vimeo.prototype.onPlay = function(){
    this.vimeoInfo.state = VimeoState.PLAYING;
    this.player_.trigger('play');
};

videojs.Vimeo.prototype.onPause = function(){
    this.vimeoInfo.state = VimeoState.PAUSED;
    this.player_.trigger('pause');
};

videojs.Vimeo.prototype.onFinish = function(){
    this.vimeoInfo.state = VimeoState.ENDED;
    this.player_.trigger('ended');
};

videojs.Vimeo.prototype.onSeek = function(data){
    this.vimeoInfo.time = data.seconds;
    this.player_.trigger('timeupdate');
    this.player_.trigger('seeked');
};

videojs.Vimeo.prototype.onError = function(error){
    this.player_.error = error;
    this.player_.trigger('error');
};

videojs.Vimeo.isSupported = function(){
    return true;
};

videojs.Vimeo.prototype.supportsFullScreen = function() {
    return false;
};

videojs.Vimeo.canPlaySource = function(srcObj){
    return (srcObj.type == 'video/vimeo');
};

videojs.Vimeo.makeQueryString = function(args){
    var array = [];
    for (var key in args){
        if (args.hasOwnProperty(key)){
            array.push(encodeURIComponent(key) + '=' + encodeURIComponent(args[key]));
        }
    }

    return array.join('&');
};

// Froogaloop API -------------------------------------------------------------

// From https://github.com/vimeo/player-api/blob/master/javascript/froogaloop.js
var Froogaloop = (function(){
    // Define a local copy of Froogaloop
    function Froogaloop(iframe) {
        // The Froogaloop object is actually just the init constructor
        return new Froogaloop.fn.init(iframe);
    }

    var eventCallbacks = {},
        hasWindowEvent = false,
        isReady = false,
        slice = Array.prototype.slice,
        playerDomain = '';

    Froogaloop.fn = Froogaloop.prototype = {
        element: null,

        init: function(iframe) {
            if (typeof iframe === "string") {
                iframe = document.getElementById(iframe);
            }

            this.element = iframe;

            // Register message event listeners
            playerDomain = getDomainFromUrl(this.element.getAttribute('src'));

            return this;
        },

        /*
         * Calls a function to act upon the player.
         *
         * @param {string} method The name of the Javascript API method to call. Eg: 'play'.
         * @param {Array|Function} valueOrCallback params Array of parameters to pass when calling an API method
         *                                or callback function when the method returns a value.
         */
        api: function(method, valueOrCallback) {
            if (!this.element || !method) {
                return false;
            }

            var self = this,
                element = self.element,
                target_id = element.id !== '' ? element.id : null,
                params = !isFunction(valueOrCallback) ? valueOrCallback : null,
                callback = isFunction(valueOrCallback) ? valueOrCallback : null;

            // Store the callback for get functions
            if (callback) {
                storeCallback(method, callback, target_id);
            }

            postMessage(method, params, element);
            return self;
        },

        /*
         * Registers an event listener and a callback function that gets called when the event fires.
         *
         * @param eventName (String): Name of the event to listen for.
         * @param callback (Function): Function that should be called when the event fires.
         */
        addEvent: function(eventName, callback) {
            if (!this.element) {
                return false;
            }

            var self = this,
                element = self.element,
                target_id = element.id !== '' ? element.id : null;


            storeCallback(eventName, callback, target_id);

            // The ready event is not registered via postMessage. It fires regardless.
            if (eventName != 'ready') {
                postMessage('addEventListener', eventName, element);
            }
            else if (eventName == 'ready' && isReady) {
                callback.call(null, target_id);
            }

            return self;
        },

        /*
         * Unregisters an event listener that gets called when the event fires.
         *
         * @param eventName (String): Name of the event to stop listening for.
         */
        removeEvent: function(eventName) {
            if (!this.element) {
                return false;
            }

            var self = this,
                element = self.element,
                target_id = element.id !== '' ? element.id : null,
                removed = removeCallback(eventName, target_id);

            // The ready event is not registered
            if (eventName != 'ready' && removed) {
                postMessage('removeEventListener', eventName, element);
            }
        }
    };

    /**
     * Handles posting a message to the parent window.
     *
     * @param method (String): name of the method to call inside the player. For api calls
     * this is the name of the api method (api_play or api_pause) while for events this method
     * is api_addEventListener.
     * @param params (Object or Array): List of parameters to submit to the method. Can be either
     * a single param or an array list of parameters.
     * @param target (HTMLElement): Target iframe to post the message to.
     */
    function postMessage(method, params, target) {
        if (!target.contentWindow.postMessage) {
            return false;
        }

        var url = target.getAttribute('src').split('?')[0],
            data = JSON.stringify({
                method: method,
                value: params
            });

        if (url.substr(0, 2) === '//') {
            url = window.location.protocol + url;
        }

        target.contentWindow.postMessage(data, url);
    }

    /**
     * Event that fires whenever the window receives a message from its parent
     * via window.postMessage.
     */
    function onMessageReceived(event) {
        var data, method;

        try {
            data = JSON.parse(event.data);
            method = data.event || data.method;
        }
        catch(e)  {
            //fail silently... like a ninja!
        }

        if (method == 'ready' && !isReady) {
            isReady = true;
        }

        // Handles messages from moogaloop only
        if (event.origin != playerDomain) {
            return false;
        }

        var value = data.value,
            eventData = data.data,
            target_id = target_id === '' ? null : data.player_id,

            callback = getCallback(method, target_id),
            params = [];

        if (!callback) {
            return false;
        }

        if (value !== undefined) {
            params.push(value);
        }

        if (eventData) {
            params.push(eventData);
        }

        if (target_id) {
            params.push(target_id);
        }

        return params.length > 0 ? callback.apply(null, params) : callback.call();
    }


    /**
     * Stores submitted callbacks for each iframe being tracked and each
     * event for that iframe.
     *
     * @param eventName (String): Name of the event. Eg. api_onPlay
     * @param callback (Function): Function that should get executed when the
     * event is fired.
     * @param target_id (String) [Optional]: If handling more than one iframe then
     * it stores the different callbacks for different iframes based on the iframe's
     * id.
     */
    function storeCallback(eventName, callback, target_id) {
        if (target_id) {
            if (!eventCallbacks[target_id]) {
                eventCallbacks[target_id] = {};
            }
            eventCallbacks[target_id][eventName] = callback;
        }
        else {
            eventCallbacks[eventName] = callback;
        }
    }

    /**
     * Retrieves stored callbacks.
     */
    function getCallback(eventName, target_id) {
        if (target_id) {
            return eventCallbacks[target_id][eventName];
        }
        else {
            return eventCallbacks[eventName];
        }
    }

    function removeCallback(eventName, target_id) {
        if (target_id && eventCallbacks[target_id]) {
            if (!eventCallbacks[target_id][eventName]) {
                return false;
            }
            eventCallbacks[target_id][eventName] = null;
        }
        else {
            if (!eventCallbacks[eventName]) {
                return false;
            }
            eventCallbacks[eventName] = null;
        }

        return true;
    }

    /**
     * Returns a domain's root domain.
     * Eg. returns http://vimeo.com when http://vimeo.com/channels is sbumitted
     *
     * @param url (String): Url to test against.
     * @return url (String): Root domain of submitted url
     */
    function getDomainFromUrl(url) {
        if (url.substr(0, 2) === '//') {
            url = window.location.protocol + url;
        }

        var url_pieces = url.split('/'),
            domain_str = '';

        for(var i = 0, length = url_pieces.length; i < length; i++) {
            if(i<3) {domain_str += url_pieces[i];}
            else {break;}
            if(i<2) {domain_str += '/';}
        }

        return domain_str;
    }

    function isFunction(obj) {
        return !!(obj && obj.constructor && obj.call && obj.apply);
    }

    function isArray(obj) {
        return toString.call(obj) === '[object Array]';
    }

    // Give the init function the Froogaloop prototype for later instantiation
    Froogaloop.fn.init.prototype = Froogaloop.fn;

    // Listens for the message event.
    // W3C
    if (window.addEventListener) {
        window.addEventListener('message', onMessageReceived, false);
    }
    // IE
    else {
        window.attachEvent('onmessage', onMessageReceived);
    }

    // Stretch the Vimeo poster
    var style = document.createElement('style');
    var def = ' ' +
        '.vjs-vimeo .vjs-poster { background-size: cover !important; }' +
        '.vjs-vimeo .vjs-poster {' +
        '    pointer-events: none !important;' +
        ' }';

    style.setAttribute('type', 'text/css');
    document.getElementsByTagName('head')[0].appendChild(style);

    if (style.styleSheet) {
        style.styleSheet.cssText = def;
    } else {
        style.appendChild(document.createTextNode(def));
    }

    // Expose froogaloop to the global object
    return (window.Froogaloop = window.$f = Froogaloop);

})();
/**
 * Created by snayps on 11/6/14.
 */
(function() {
    var defaults = {
            xpos: 0,
            ypos: 0
        },
        extend = function() {
            var args, target, i, object, property;
            args = Array.prototype.slice.call(arguments);
            target = args.shift() || {};
            for (i in args) {
                object = args[i];
                for (property in object) {
                    if (object.hasOwnProperty(property)) {
                        if (typeof object[property] === 'object') {
                            target[property] = extend(target[property], object[property]);
                        } else {
                            target[property] = object[property];
                        }
                    }
                }
            }
            return target;
        },

        _timer = function(sec) {
            this.hours  = sec / 3600 ^ 0;
            this.minute = (sec - this.hours * 3600) / 60 ^ 0;
            this.second = sec - this.hours * 3600 - this.minute * 60;
        },
        add_zero = function(num) {
            return  (num < 10) ? '0' + num : num;
        }

    /**
     * register countdown plugin
     */
    videojs.plugin('countdown', function(options) {

        var settings, video, div, player;
        settings = extend(defaults, options);
        player = this;

        /* Grab the necessary DOM elements */

        video = player.el();
        // create the countdown element
        div = document.createElement('div');
        div.className = 'vjs-countdown';
        if ((settings.ypos == 0) && (settings.xpos == 0)) // Top left
        {
            div.style.top  = "0";
            div.style.left = "0";
        }
        else if ((settings.ypos == 0) && (settings.xpos == 100)) // Top right
        {
            div.style.top   = "0";
            div.style.right = "0";
        }
        else if ((settings.ypos == 100) && (settings.xpos == 100)) // Bottom right
        {
            div.style.bottom = "0";
            div.style.right  = "0";
        }
        else if ((settings.ypos == 100) && (settings.xpos == 0)) // Bottom left
        {
            div.style.bottom = "0";
            div.style.left   = "0";
        }
        else if ((settings.ypos == 50) && (settings.xpos == 50)) // Center
        {
            div.style.top        = '50%';
            div.style.left       = '50%';
            div.style.marginLeft = '-35px';
        }

        // add the countdown to the player
        video.appendChild(div);

        //update time
        player.on('timeupdate', function () {
            var current_time = player.currentTime() ? player.currentTime() : 1;
            var duration     = player.duration();
            var sec          = 0;
            if (current_time && duration) {
                sec = Math.floor(duration - current_time);
            }
            var timer = new _timer(sec);
            div.innerHTML = add_zero(timer.hours) + ' : ' + add_zero(timer.minute) + ' : ' + add_zero(timer.second)
        });
    });
})();


// videojs-speed-plugin

videojs.plugin('speed', function(options) {
    var player = this,
        items = [],
        selectedItem;

    function changeSpeed(item) {

        var opt = item.options();
        item.selected(true);
        console.log(player);
        try {
            if (player.ytplayer) {
                player.ytplayer.setPlaybackRate(opt.rate)
            } else {
                player.playbackRate(opt.rate);
            }
        } catch(err) {
            console.log('player speed error:' + err.message);
        }

        var nodes = player.controlBar.speedButton.el().firstChild.children;
        for (var i = 0, l = nodes.length; i < l; i++) {
            if (nodes[i].className == 'vjs-current-speed') {
                nodes[i].innerHTML = opt.label;
            }
        }
    }

    videojs.SpeedMenuItem = videojs.MenuItem.extend({
        init: function(player, options) {
            videojs.MenuItem.call(this, player, options);
            this.on('click', this.onClick);
        }
    });
    videojs.SpeedMenuItem.prototype.onClick = function(e) {
        for (var i = 0, l = items.length; i < l; i++) {
            items[i].selected(false);
        }
        changeSpeed(this);
    }

    videojs.SpeedButton = videojs.MenuButton.extend({
        init: function(player, options){
            videojs.MenuButton.call(this, player, options);
        }
    });
    videojs.SpeedButton.prototype.createItems = function() {
        var item;
        options.forEach(function(opt) {
            item = new videojs.SpeedMenuItem(player, { label: opt.text, rate: opt.rate });
            item.className = item.className + " speed-item";
            if (opt.selected) {
                selectedItem = item;
            }
            items.push(item);
        });
        return items;
    }

    player.ready(function() {
        var button = new videojs.SpeedButton(player, {
            el: videojs.Component.prototype.createEl(null, {
                className: 'vjs-res-button vjs-menu-button vjs-control',
                innerHTML: '<div class="vjs-control-content" style="font-size: 11px; line-height: 28px;"><span class="vjs-current-speed"></span></div>',
                role: 'button'
            })
        });
        player.controlBar.speedButton = player.controlBar.addChild(button);
        changeSpeed(selectedItem);

        try {
            if (player.c.P.id.indexOf('html5') == -1) { // FIXME player.c.P
                button.hide();
            }
        } catch (err) {
            console.log("can't detect tech.");
        }
    });
});


(function(vjs) {
  var
  extend = function(obj) {
    var arg, i, k;
    for (i = 1; i < arguments.length; i++) {
      arg = arguments[i];
      for (k in arg) {
        if (arg.hasOwnProperty(k)) {
          obj[k] = arg[k];
        }
      }
    }
    return obj;
  },

  defaults = {
      type: 'text', // Annotation, text
      Annotation_url: '',
      text_block: 'my text block',
      color_text: '#FFFFFF',
      click_url: '#',
      start_time: null,
      end_time: null,
      opacity: 0.7,
      height: 20,
      width: 40,
      left: 50,
      top: 20,
      background: '#00FF00'
  },

  annotationOverlay = function(options) {

    var player = this,
        settings = extend({}, defaults, options || {}),
        showingAnnotation = false,
        isClose = false;

    if (settings.start_time === null)
      settings.start_time = 0;

    if (settings.end_time === null)
      settings.end_time = player.duration() + 1;
    overlay = {
      checkOverlay: function() {
        if ((player.currentTime() >= settings.start_time) && (player.currentTime() < settings.end_time) && !isClose) {
          overlay.showAnnotation();
        } else {
          overlay.hideAnnotation();
        }
      },
      showAnnotation: function() {
        if (showingAnnotation) {
          return;
        }
        showingAnnotation = true;
        var holderDiv = document.createElement('div');
        holderDiv.id = 'vjs-annotation-overlay-holder';
        holderDiv.style.height = settings.height + '%';
        holderDiv.style.width  = (settings.width > 100 ? 100 : settings.width) + '%';
        holderDiv.style.left   = ((settings.left + settings.width) > 100 ? ( 100 - settings.width) : settings.left)  + '%';
        holderDiv.style.top    = ((settings.top + settings.height) > 100 ? ( 100 - settings.height) : settings.top)  + '%';
        holderDiv.style.color  = settings.color_text;

        var closeLink = document.createElement('a');
        closeLink.className = 'boxclose';
        holderDiv.appendChild(closeLink);

          closeLink.onclick = function(e) {
              e.preventDefault();
              overlay.hideAnnotation();
              isClose = true;
          };

        switch(settings.type) {
            case 'text':
                var innerBlock = document.createElement('div');
                innerBlock.innerHTML = '<div class="annotation-text">' + settings.text_block + '</div>';
                break;
            case 'image':
                var innerBlock = document.createElement('img');
                innerBlock.src = settings.Annotation_url;
                break;

        }
        innerBlock.onclick = function() {
            player.pause();
            window.open(settings.click_url);
        };
        innerBlock.style.opacity = settings.opacity;
        innerBlock.style.backgroundColor = settings.background;
        innerBlock.style.borderRadius = '7px';
        holderDiv.appendChild(innerBlock);
        player.el().appendChild(holderDiv);
      },
      hideAnnotation: function() {
        if (!showingAnnotation) {
          return;
        }
        showingAnnotation = false;
        player.el().removeChild(document.getElementById('vjs-annotation-overlay-holder'));
      }
    };

    player.on('timeupdate', overlay.checkOverlay);
  };

  vjs.plugin('annotationOverlay', annotationOverlay);
}(window.videojs));

/*
    A simple jQuery modal (http://github.com/kylefox/jquery-modal)
    Version 0.5.5
*/
!function(a){var b=null;a.modal=function(c,d){a.modal.close();var e,f;if(this.$body=a("body"),this.options=a.extend({},a.modal.defaults,d),this.options.doFade=!isNaN(parseInt(this.options.fadeDuration,10)),c.is("a"))if(f=c.attr("href"),/^#/.test(f)){if(this.$elm=a(f),1!==this.$elm.length)return null;this.open()}else this.$elm=a("<div>"),this.$body.append(this.$elm),e=function(a,b){b.elm.remove()},this.showSpinner(),c.trigger(a.modal.AJAX_SEND),a.get(f).done(function(d){b&&(c.trigger(a.modal.AJAX_SUCCESS),b.$elm.empty().append(d).on(a.modal.CLOSE,e),b.hideSpinner(),b.open(),c.trigger(a.modal.AJAX_COMPLETE))}).fail(function(){c.trigger(a.modal.AJAX_FAIL),b.hideSpinner(),c.trigger(a.modal.AJAX_COMPLETE)});else this.$elm=c,this.open()},a.modal.prototype={constructor:a.modal,open:function(){var b=this;this.options.doFade?(this.block(),setTimeout(function(){b.show()},this.options.fadeDuration*this.options.fadeDelay)):(this.block(),this.show()),this.options.escapeClose&&a(document).on("keydown.modal",function(b){27==b.which&&a.modal.close()}),this.options.clickClose&&this.blocker.click(a.modal.close)},close:function(){this.unblock(),this.hide(),a(document).off("keydown.modal")},block:function(){var b=this.options.doFade?0:this.options.opacity;this.$elm.trigger(a.modal.BEFORE_BLOCK,[this._ctx()]),this.blocker=a('<div class="jquery-modal blocker"></div>').css({top:0,right:0,bottom:0,left:0,width:"100%",height:"100%",position:"fixed",zIndex:this.options.zIndex,background:this.options.overlay,opacity:b}),this.$body.append(this.blocker),this.options.doFade&&this.blocker.animate({opacity:this.options.opacity},this.options.fadeDuration),this.$elm.trigger(a.modal.BLOCK,[this._ctx()])},unblock:function(){this.options.doFade?this.blocker.fadeOut(this.options.fadeDuration,function(){a(this).remove()}):this.blocker.remove()},show:function(){this.$elm.trigger(a.modal.BEFORE_OPEN,[this._ctx()]),this.options.showClose&&(this.closeButton=a('<a href="#close-modal" rel="modal:close" class="close-modal '+this.options.closeClass+'">'+this.options.closeText+"</a>"),this.$elm.append(this.closeButton)),this.$elm.addClass(this.options.modalClass+" current"),this.center(),this.options.doFade?this.$elm.fadeIn(this.options.fadeDuration):this.$elm.show(),this.$elm.trigger(a.modal.OPEN,[this._ctx()])},hide:function(){this.$elm.trigger(a.modal.BEFORE_CLOSE,[this._ctx()]),this.closeButton&&this.closeButton.remove(),this.$elm.removeClass("current"),this.options.doFade?this.$elm.fadeOut(this.options.fadeDuration):this.$elm.hide(),this.$elm.trigger(a.modal.CLOSE,[this._ctx()])},showSpinner:function(){this.options.showSpinner&&(this.spinner=this.spinner||a('<div class="'+this.options.modalClass+'-spinner"></div>').append(this.options.spinnerHtml),this.$body.append(this.spinner),this.spinner.show())},hideSpinner:function(){this.spinner&&this.spinner.remove()},center:function(){this.$elm.css({position:"fixed",top:"50%",left:"50%",marginTop:-(this.$elm.outerHeight()/2),marginLeft:-(this.$elm.outerWidth()/2),zIndex:this.options.zIndex+1})},_ctx:function(){return{elm:this.$elm,blocker:this.blocker,options:this.options}}},a.modal.prototype.resize=a.modal.prototype.center,a.modal.close=function(a){if(b){a&&a.preventDefault(),b.close();var c=b.$elm;return b=null,c}},a.modal.resize=function(){b&&b.resize()},a.modal.isActive=function(){return b?!0:!1},a.modal.defaults={overlay:"#000",opacity:.75,zIndex:1,escapeClose:!0,clickClose:!0,closeText:"Close",closeClass:"",modalClass:"modal",spinnerHtml:null,showSpinner:!0,showClose:!0,fadeDuration:null,fadeDelay:1},a.modal.BEFORE_BLOCK="modal:before-block",a.modal.BLOCK="modal:block",a.modal.BEFORE_OPEN="modal:before-open",a.modal.OPEN="modal:open",a.modal.BEFORE_CLOSE="modal:before-close",a.modal.CLOSE="modal:close",a.modal.AJAX_SEND="modal:ajax:send",a.modal.AJAX_SUCCESS="modal:ajax:success",a.modal.AJAX_FAIL="modal:ajax:fail",a.modal.AJAX_COMPLETE="modal:ajax:complete",a.fn.modal=function(c){return 1===this.length&&(b=new a.modal(this,c)),this},a(document).on("click.modal",'a[rel="modal:close"]',a.modal.close),a(document).on("click.modal",'a[rel="modal:open"]',function(b){b.preventDefault(),a(this).modal()})}(jQuery);

/*
 * jQuery.plainOverlay
 * https://github.com/anseki/jquery-plainoverlay
 *
 * Copyright (c) 2014 anseki
 * Licensed under the MIT license.
 */

;
(function ($, undefined) {
    'use strict';

    var APP_NAME = 'plainOverlay',

    // builtin progress element
        newProgress = (function () {
            function experimental(props, supports, prefix, sep) { // similar to Compass
                sep = sep === undefined ? ';' : sep;
                return $.map(props, function (prop) {
                    return $.map(supports, function (support) {
                        return (prefix || '') + support + prop;
                    }).join(sep);
                }).join(sep);
            }

            var isLegacy, domId = 'jQuery-' + APP_NAME,
                supports = ['-webkit-', '-moz-', '-ms-', '-o-', ''], prefix = domId + '-progress',
                cssText = '.' + prefix + '{' + experimental(['box-sizing:border-box'], ['-webkit-', '-moz-', '']) + ';width:100%;height:100%;border-top:3px solid #17f29b;' + experimental(['border-radius:50%'], supports) + ';-webkit-tap-highlight-color:rgba(0,0,0,0);transform:translateZ(0);box-shadow:0 0 1px rgba(0,0,0,0);' + experimental(['animation-name:' + domId + '-spin', 'animation-duration:1s', 'animation-timing-function:linear', 'animation-iteration-count:infinite'], supports) + '}' + experimental(['keyframes ' + domId + '-spin{from{' + experimental(['transform:rotate(0deg)'], supports) + '}to{' + experimental(['transform:rotate(360deg)'], supports) + '}}'], supports, '@', '') + '.' + prefix + '-legacy{width:100%;height:50%;padding-top:25%;text-align:center;white-space:nowrap;*zoom:1}.' + prefix + '-legacy:after,.' + prefix + '-legacy:before{content:" ";display:table}.' + prefix + '-legacy:after{clear:both}.' + prefix + '-legacy div{width:18%;height:100%;margin:0 1%;background-color:#17f29b;float:left;visibility:hidden}.' + prefix + '-1 div.' + prefix + '-1,.' + prefix + '-2 div.' + prefix + '-1,.' + prefix + '-2 div.' + prefix + '-2,.' + prefix + '-3 div.' + prefix + '-1,.' + prefix + '-3 div.' + prefix + '-2,.' + prefix + '-3 div.' + prefix + '-3{visibility:visible}',

                adjustProgress = function () {
                    var progressWH = Math.min(300, // max w/h
                        (this.isBody ?
                            Math.min(this.jqWin.width(), this.jqWin.height()) :
                            Math.min(this.jqTarget.innerWidth(), this.jqTarget.innerHeight())) * 0.9);
                    this.jqProgress.width(progressWH).height(progressWH);
                    if (!this.showProgress) { // CSS Animations
                        this.jqProgress.children('.' + prefix).css('borderTopWidth',
                            Math.max(3, progressWH / 30)); // min width
                    }
                },
                showProgressLegacy = function (start) {
                    var that = this;
                    if (that.timer) {
                        clearTimeout(that.timer);
                    }
                    if (that.progressCnt) {
                        that.jqProgress.removeClass(prefix + '-' + that.progressCnt);
                    }
                    if (that.isShown) {
                        that.progressCnt = !start && that.progressCnt < 3 ? that.progressCnt + 1 : 0;
                        if (that.progressCnt) {
                            that.jqProgress.addClass(prefix + '-' + that.progressCnt);
                        }
                        that.timer = setTimeout(function () {
                            that.showProgress();
                        }, 500);
                    }
                };

            return function (overlay) {
                var jqProgress, sheet;

                // Graceful Degradation
                if (typeof isLegacy !== 'boolean') {
                    isLegacy = (function () { // similar to Modernizr
                        function contains(str, substr) {
                            return !!~('' + str).indexOf(substr);
                        }

                        var res, feature,
                            modElem = document.createElement('modernizr'),
                            mStyle = modElem.style,
                            omPrefixes = 'Webkit Moz O ms',
                            cssomPrefixes = omPrefixes.split(' '),
                            tests = {},
                            _hasOwnProperty = ({}).hasOwnProperty,
                            hasOwnProp = _hasOwnProperty !== undefined &&
                            _hasOwnProperty.call !== undefined ?
                                function (object, property) {
                                    return _hasOwnProperty.call(object, property);
                                } :
                                function (object, property) {
                                    return (property in object) &&
                                    object.constructor.prototype[property] === undefined;
                                };

                        function testProps(props) {
                            var i;
                            for (i in props) {
                                if (!contains(props[i], '-') && mStyle[props[i]] !== undefined) {
                                    return true;
                                }
                            }
                            return false;
                        }

                        function testPropsAll(prop) {
                            var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
                                props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
                            return testProps(props);
                        }

                        tests.borderradius = function () {
                            return testPropsAll('borderRadius');
                        };
                        tests.cssanimations = function () {
                            return testPropsAll('animationName');
                        };
                        tests.csstransforms = function () {
                            return !!testPropsAll('transform');
                        };

                        res = false;
                        for (feature in tests) {
                            if (hasOwnProp(tests, feature) && !tests[feature]()) {
                                res = true;
                                break;
                            }
                        }
                        mStyle.cssText = '';
                        modElem = null;
                        return res;
                    })();
                }

                if (!overlay.elmDoc.getElementById(domId)) { // Add style rules
                    if (overlay.elmDoc.createStyleSheet) { // IE
                        sheet = overlay.elmDoc.createStyleSheet();
                        sheet.owningElement.id = domId;
                        sheet.cssText = cssText;
                    } else {
                        sheet = (overlay.elmDoc.getElementsByTagName('head')[0] || overlay.elmDoc.documentElement)
                            .appendChild(overlay.elmDoc.createElement('style'));
                        sheet.type = 'text/css';
                        sheet.id = domId;
                        sheet.textContent = cssText;
                    }
                }

                if (isLegacy) {
                    jqProgress = $('<div><div class="' + prefix + '-legacy">' +
                    '<div class="' + prefix + '-3" /><div class="' + prefix + '-2" /><div class="' + prefix + '-1" /><div class="' + prefix + '-2" /><div class="' + prefix + '-3" /></div></div>');
                    overlay.showProgress = showProgressLegacy;
                } else {
                    jqProgress = $('<div><div class="' + prefix + '" /></div>');
                }
                overlay.adjustProgress = adjustProgress;
                return jqProgress;
            };
        })();

    function Overlay(jqTarget, options, curObject) {
        var that = this, elmTarget = jqTarget.get(0);
        that.duration = options.duration;
        that.opacity = options.opacity;
        that.isShown = false;

        that.jqTargetOrg = jqTarget;
        // that.jqWin = that.jqTarget.ownerDocument.defaultView; // Not supported by IE
        if ($.isWindow(elmTarget) || elmTarget.nodeType === 9) { // window or document -> body
            that.jqTarget = $('body');
        } else if (elmTarget.nodeName.toLowerCase() === 'iframe' ||
            elmTarget.nodeName.toLowerCase() === 'frame') { // iframe or frame -> body of it
            // contentDocument not supported by IE
            that.jqWin = $(elmTarget.contentWindow);
            that.elmDoc = elmTarget.contentWindow.document;
            that.jqTarget = $('body', that.elmDoc);
            that.isFrame = true;
        } else {
            that.jqTarget = jqTarget;
        }
        that.jqWin = that.jqWin || $(window);
        that.elmDoc = that.elmDoc || document;
        that.isBody = that.jqTarget.get(0).nodeName.toLowerCase() === 'body';

        if (curObject) {
            // Remove jqProgress that exists always, because it may be replaced.
            if (curObject.jqProgress) {
                if (curObject.timer) {
                    clearTimeout(curObject.timer);
                }
                curObject.jqProgress.remove();
                delete curObject.jqProgress;
            }
            curObject.reset(true); // Restore styles
            curObject.jqOverlay.stop();
        }

        that.jqOverlay = (curObject && curObject.jqOverlay ||
        $('<div class="plainoverlay" />').css({
            position: that.isBody ? 'fixed' : 'absolute',
            left: 0,
            top: 0,
            display: 'none',
            cursor: 'wait'
        }).appendTo(that.jqTarget)
        ).css({backgroundColor: options.fillColor, zIndex: options.zIndex});

        if (that.jqProgress = options.progress === false ? undefined :
                (typeof options.progress === 'function' ?
                    options.progress.call(that.jqTarget, options) : newProgress(that))) {
            that.jqProgress.css({
                position: that.isBody ? 'fixed' : 'absolute',
                display: 'none',
                zIndex: options.zIndex + 1,
                cursor: 'wait'
            }).appendTo(that.jqTarget);
        }

        // Not shared methods for calling per object in event of one element.
        that.callAdjust = (function (that) {
            return that.adjustProgress ? function () {
                that.adjustProgress();
                that.adjust();
            } : function () {
                that.adjust();
            };
        })(that);
        that.avoidFocus = (function (that) {
            return function (e) {
//                $(that.elmDoc.activeElement).blur();
//                e.preventDefault();
//                return false;
            };
        })(that);
        that.avoidScroll = (function (that) {
            return function (e) {
                (function (jqView) {
                    jqView.scrollLeft(that.scrLeft).scrollTop(that.scrTop);
                })(that.isBody ? that.jqWin : that.jqTarget);
                e.preventDefault();
                return false;
            };
        })(that);

        if (curObject) {
            if (curObject.timer) {
                clearTimeout(curObject.timer);
            }
            curObject = undefined; // Erase
        }
    }

    Overlay.prototype.show = function () {
        var that = this, inlineStyles, position, calMarginR, calMarginB, jqActive;
        that.reset(true); // Restore styles
        inlineStyles = that.jqTarget.get(0).style;

        that.orgPosition = inlineStyles.position;
        position = that.jqTarget.css('position');
        if (position !== 'relative' && position !== 'absolute' && position !== 'fixed') {
            that.jqTarget.css('position', 'relative');
        }

        that.orgOverflow = inlineStyles.overflow;
        calMarginR = that.jqTarget.prop('clientWidth');
        calMarginB = that.jqTarget.prop('clientHeight');
        that.jqTarget.css('overflow', 'hidden');
        calMarginR -= that.jqTarget.prop('clientWidth');
        calMarginB -= that.jqTarget.prop('clientHeight');
        that.addMarginR = that.addMarginB = 0;
        if (calMarginR < 0) {
            that.addMarginR = -calMarginR;
        }
        if (calMarginB < 0) {
            that.addMarginB = -calMarginB;
        }
        if (that.isBody) {
            if (that.addMarginR) {
                that.orgMarginR = inlineStyles.marginRight;
                that.jqTarget.css('marginRight', '+=' + that.addMarginR);
            }
            if (that.addMarginB) {
                that.orgMarginB = inlineStyles.marginBottom;
                that.jqTarget.css('marginBottom', '+=' + that.addMarginB);
            }
        } else { // change these in adjust()
            if (that.addMarginR) {
                that.orgMarginR = inlineStyles.paddingRight;
                that.orgWidth = inlineStyles.width;
            }
            if (that.addMarginB) {
                that.orgMarginB = inlineStyles.paddingBottom;
                that.orgHeight = inlineStyles.height;
            }
        }

        that.jqActive = undefined;
        jqActive = $(that.elmDoc.activeElement);
        if (that.isBody && !that.isFrame) {
            that.jqActive = jqActive.blur();
        } // Save activeElement
        else if (that.jqTarget.has(jqActive.get(0)).length) {
            jqActive.blur();
        }
        that.jqTarget.focusin(that.avoidFocus);
        (function (jqView) {
            that.scrLeft = jqView.scrollLeft();
            that.scrTop = jqView.scrollTop();
            jqView.scroll(that.avoidScroll);
        })(that.isBody ? that.jqWin : that.jqTarget);
        that.jqWin.resize(that.callAdjust);
        that.callAdjust();
        that.isShown = true;

        that.jqOverlay.stop().fadeTo(that.duration, that.opacity,
            function () {
                that.jqTargetOrg.trigger('plainoverlayshow');
            });
        if (that.jqProgress) {
            if (that.showProgress) {
                that.showProgress(true);
            }
            that.jqProgress.fadeIn(that.duration);
        }
    };

    Overlay.prototype.hide = function () {
        var that = this;
        if (!that.isShown) {
            return;
        }
        that.jqOverlay.stop().fadeOut(that.duration,
            function () {
                that.reset();
                that.jqTargetOrg.trigger('plainoverlayhide');
            });
        if (that.jqProgress) {
            that.jqProgress.fadeOut(that.duration);
        }
    };

    Overlay.prototype.adjust = function () {
        var calW, calH;
        if (this.isBody) {
            // base of overlay size and progress position is window.
            calW = this.jqWin.width();
            calH = this.jqWin.height();
            this.jqOverlay.width(calW).height(calH);
            if (this.jqProgress) {
                this.jqProgress.css({
                    left: (calW - this.jqProgress.outerWidth()) / 2,
                    top: (calH - this.jqProgress.outerHeight()) / 2
                });
            }
        } else {
            if (this.addMarginR) {
                calW = this.jqTarget.css({paddingRight: this.orgMarginR, width: this.orgWidth})
                    .width(); // original size
                this.jqTarget.css('paddingRight', '+=' + this.addMarginR).width(calW - this.addMarginR);
            }
            if (this.addMarginB) {
                calH = this.jqTarget.css({paddingBottom: this.orgMarginB, height: this.orgHeight})
                    .height(); // original size
                this.jqTarget.css('paddingBottom', '+=' + this.addMarginB).height(calH - this.addMarginB);
            }

            // base of overlay size is element size that includes hidden area.
            calW = Math.max(this.jqTarget.prop('scrollWidth'), this.jqTarget.innerWidth()); // for IE bug
            calH = Math.max(this.jqTarget.prop('scrollHeight'), this.jqTarget.innerHeight());
            this.jqOverlay.width(calW).height(calH);
            if (this.jqProgress) {
                // base of progress position is element size that doesn't include hidden area.
                calW = this.jqTarget.innerWidth();
                calH = this.jqTarget.innerHeight();
                this.jqProgress.css({
                    left: (calW - this.jqProgress.outerWidth()) / 2 + this.scrLeft,
                    top: (calH - this.jqProgress.outerHeight()) / 2 + this.scrTop
                });
            }
        }
    };

    Overlay.prototype.reset = function (forceHide) {
        // default: display of jqOverlay and jqProgress is kept
        var that = this;
        if (forceHide) {
            that.jqOverlay.css('display', 'none');
            if (that.jqProgress) {
                that.jqProgress.css('display', 'none');
            }
        }
        if (!that.isShown) {
            return;
        }
        that.jqTarget.css({position: that.orgPosition, overflow: that.orgOverflow});
        if (that.isBody) {
            if (that.addMarginR) {
                that.jqTarget.css('marginRight', that.orgMarginR);
            }
            if (that.addMarginB) {
                that.jqTarget.css('marginBottom', that.orgMarginB);
            }
        } else {
            if (that.addMarginR) {
                that.jqTarget.css({paddingRight: that.orgMarginR, width: that.orgWidth});
            }
            if (that.addMarginB) {
                that.jqTarget.css({paddingBottom: that.orgMarginB, height: that.orgHeight});
            }
        }
        that.jqTarget.off('focusin', that.avoidFocus);
        if (that.jqActive && that.jqActive.length) {
            that.jqActive.focus();
        } // Restore activeElement
        (function (jqView) {
            jqView.off('scroll', that.avoidScroll).scrollLeft(that.scrLeft).scrollTop(that.scrTop);
        })(that.isBody ? that.jqWin : that.jqTarget);
        that.jqWin.off('resize', that.callAdjust);
        that.isShown = false;
    };

    function init(jq, options) {
        var opt = $.extend({
            duration: 200,
            opacity: 0.6,
            zIndex: 9997
            // Optional: progress, show, hide
        }, options);
        opt.fillColor = opt.fillColor || opt.color /* alias */ || '#888';
        return jq.each(function () {
            var that = $(this);
            that.data(APP_NAME, new Overlay(that, opt, that.data(APP_NAME)));
            if (typeof opt.show === 'function') {
                that.on('plainoverlayshow', opt.show);
            }
            if (typeof opt.hide === 'function') {
                that.on('plainoverlayhide', opt.hide);
            }
        });
    }

    function overlayShow(jq, options) {
        return jq.each(function () {
            var that = $(this), overlay;
            if (options || !(overlay = that.data(APP_NAME))) {
                overlay = init(that, options).data(APP_NAME);
            }
            overlay.show();
        });
    }

    function overlayHide(jq) {
        return jq.each(function () {
            var overlay = $(this).data(APP_NAME);
            if (overlay) {
                overlay.hide();
            }
        });
    }

    $.fn[APP_NAME] = function (action, options) {
        return (
            action === 'show' ? overlayShow(this, options) :
                action === 'hide' ? overlayHide(this) :
                    init(this, action)); // options.
    };

})(jQuery);
function array_unique(e){var t={},n,r=e.length,i=[];for(n=0;n<r;n+=1)t[e[n]]=e[n];for(n in t)i.push(t[n]);return i}
// Copyright (c) 2012 Florian H., https://github.com/js-coder https://github.com/js-coder/cookie.js
!function(e,t){var n=function(){return n.get.apply(n,arguments)},r=n.utils={isArray:Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"},isPlainObject:function(e){return!!e&&Object.prototype.toString.call(e)==="[object Object]"},toArray:function(e){return Array.prototype.slice.call(e)},getKeys:Object.keys||function(e){var t=[],n="";for(n in e)e.hasOwnProperty(n)&&t.push(n);return t},escape:function(e){return String(e).replace(/[,;"\\=\s%]/g,function(e){return encodeURIComponent(e)})},retrieve:function(e,t){return e==null?t:e}};n.defaults={},n.expiresMultiplier=86400,n.set=function(n,i,s){if(r.isPlainObject(n))for(var o in n)n.hasOwnProperty(o)&&this.set(o,n[o],i);else{s=r.isPlainObject(s)?s:{expires:s};var u=s.expires!==t?s.expires:this.defaults.expires||"",a=typeof u;a==="string"&&u!==""?u=new Date(u):a==="number"&&(u=new Date(+(new Date)+1e3*this.expiresMultiplier*u)),u!==""&&"toGMTString"in u&&(u=";expires="+u.toGMTString());var f=s.path||this.defaults.path;f=f?";path="+f:"";var l=s.domain||this.defaults.domain;l=l?";domain="+l:"";var c=s.secure||this.defaults.secure?";secure":"";e.cookie=r.escape(n)+"="+r.escape(i)+u+f+l+c}return this},n.remove=function(e){e=r.isArray(e)?e:r.toArray(arguments);for(var t=0,n=e.length;t<n;t++)this.set(e[t],"",-1);return this},n.empty=function(){return this.remove(r.getKeys(this.all()))},n.get=function(e,n){n=n||t;var i=this.all();if(r.isArray(e)){var s={};for(var o=0,u=e.length;o<u;o++){var a=e[o];s[a]=r.retrieve(i[a],n)}return s}return r.retrieve(i[e],n)},n.all=function(){if(e.cookie==="")return{};var t=e.cookie.split("; "),n={};for(var r=0,i=t.length;r<i;r++){var s=t[r].split("=");n[decodeURIComponent(s[0])]=decodeURIComponent(s[1])}return n},n.enabled=function(){if(navigator.cookieEnabled)return!0;var e=n.set("_","_").get("_")==="_";return n.remove("_"),e},typeof define=="function"&&define.amd?define(function(){return n}):typeof exports!="undefined"?exports.cookie=n:window.cookie=n}(document);
var ModulesVideoOnly =
{
    'video-behavior_resume': {
        _flag_can_update_time: false,
        _seek_to_time: 0,
        activate: function () {
            var _flag = this._flag_can_update_time;
            var that = this;

            $('body')
                .on('click', '.js--playback-restart', function (event) {
                    event.preventDefault();

                    get_vpa_player().currentTime(0).pause().play();

                    that.hide_overlay();
                })
                .on('click', '.js--playback-resume', function (event) {
                    event.preventDefault();

                    get_vpa_player().currentTime(that._seek_to_time).pause().play();

                    that.hide_overlay();
                });

            if (get_vpa_player()) {
                //check to see if resume cookie is set.
                //if set, resume playing and remove cookie
                if (cookie.get('video_current_time')) {
                    get_vpa_player().one('durationchange', function () {
                        that._seek_to_time = cookie.get('video_current_time');
                        _flag = true;

                        that.show_overlay_content();
                    });
                } else {
                    _flag = true;
                }

                get_vpa_player().on('timeupdate', function () {
                    if (_flag !== true)
                        return;
                    var time = Math.round(this.currentTime());
                    cookie.set('video_current_time', time);
                });

                get_vpa_player().on('ended', function () {
                    cookie.remove('video_current_time');
                });
            }
        },
        show_overlay_content: function () {
            if (get_vpa_player().isFullscreen())
                get_vpa_player().exitFullscreen();
            show_resume_playback();
            get_vpa_player().pause();
        },
        hide_overlay: function () {
            $('.video-holder').plainOverlay('hide');
            this.deactivate();
            get_vpa_player().play();
        },
        deactivate: function () {
            cookie.remove('video_current_time');
        }
    },
    'video-behavior_autostart': {
        activate: function () {
            get_vpa_player().play();
        },
        deactivate: function () {

        }
    },
    'video-controls_controlbar': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                if (cookie.get('vpa_visit_count') && +cookie.get('vpa_visit_count') >= js_options['video-controls_visit']) {
                    get_vpa_player().controlBar.show();
                    if (js_options['video-controls_always-visible'] && js_options['video-controls_always-visible'] != '0') {
                        $(get_vpa_player().controlBar.el()).css({'opacity': 1, 'visibility': 'visible'});
                    }
                }
            });
            if (js_options['video-controls_always-visible'] == '0') {
                $(get_vpa_player().controlBar.el()).css({'opacity': 0, 'visibility': 'hidden'});
                get_vpa_player().on('mouseover', function () {
                    $(get_vpa_player().controlBar.el()).css({'opacity': 1, 'visibility': 'visible'});
                })

                get_vpa_player().on('mouseout', function () {
                    $(get_vpa_player().controlBar.el()).css({'opacity': 0, 'visibility': 'hidden'});
                })
            }
        },
        deactivate: function () {
            get_vpa_player().controlBar.hide();
        }
    },
    'video-controls_play-button-middle': {
        activate: function () {
            if (js_options['video-settings_source'] == 'youtube')
                return;
            get_vpa_player().bigPlayButton.removeClass('display-none');
            get_vpa_player().one('playing', function () {
                get_vpa_player().bigPlayButton.show();
                if (!get_vpa_player().paused())
                    get_vpa_player().bigPlayButton.hide();
            });

            get_vpa_player().on('play', function () {
                this.bigPlayButton.hide();
            });

            get_vpa_player().on('pause', function () {
                if (!is_video_strong_paused())
                    this.bigPlayButton.show();
            });
        },
        deactivate: function () {
            get_vpa_player().bigPlayButton.addClass('display-none');
        }
    },
    'video-controls_play-button-controlbar': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                get_vpa_player().controlBar.playToggle.show();
            });
        },
        deactivate: function () {
            get_vpa_player().controlBar.playToggle.hide();
        }
    },
    'video-controls_fullscreen': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                get_vpa_player().controlBar.fullscreenToggle.show();
            });
        },
        deactivate: function () {
            get_vpa_player().controlBar.fullscreenToggle.hide();
            get_vpa_player().on('dblclick', function(e) {
                return;
            });
        }
    },
    'video-controls_volume-control': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                get_vpa_player().controlBar.muteToggle.show();
            });
        },
        deactivate: function () {
            get_vpa_player().controlBar.muteToggle.hide();
        }
    },
    'video-controls_progress-control': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                get_vpa_player().controlBar.progressControl.show();
            });
        },
        deactivate: function () {
            get_vpa_player().controlBar.progressControl.hide();
        }
    },
    'video-controls_time-control': {
        activate: function () {
            get_vpa_player().one('playing', function () {
                get_vpa_player().controlBar.currentTimeDisplay.show();
                get_vpa_player().controlBar.timeDivider.show();
                get_vpa_player().controlBar.durationDisplay.show();
            });
        },
        deactivate: function () {
            get_vpa_player().controlBar.currentTimeDisplay.hide();
            get_vpa_player().controlBar.timeDivider.hide();
            get_vpa_player().controlBar.durationDisplay.hide();
        }
    },
    'video-controls_countdown': {
        activate: function () {
            this. show_overlay();
        },
        deactivate: function () {
            this.hide_overlay();
        },
        show_overlay: function () {
            $('.vjs-countdown').show();
        },
        hide_overlay: function () {
            $('.vjs-countdown').hide();
        }
    },
    'video-speed': {
        activate: function () {
            get_vpa_player().controlBar.speedButton.show();
        },
        deactivate: function () {
            get_vpa_player().controlBar.speedButton.hide();
        },
        show_overlay: function () {
            get_vpa_player().controlBar.speedButton.show();
        },
        hide_overlay: function () {
            get_vpa_player().controlBar.speedButton.hide();
        }
    },
    'video-watermark': {
        halt_wmr: false,
        listener: function () {
            if (this.halt_wmr)
                return;

            if (typeof this.timepoint_wmr === 'undefined') {
                this.timepoint_wmr = parseFloat(js_options['video-watermark_custom-time'].toFixed(1));
            }

            if (typeof this.timepoint_wmr === 'number' && (this.timepoint_wmr % 1) === 0) {
                var current_time = Math.floor(this.currentTime());
            } else {
                var current_time = this.currentTime().toFixed(1);
            }
            current_time = parseFloat(current_time);

            if (current_time == this.timepoint_wmr || current_time > this.timepoint_wmr) {
                this.halt_wmr = true;
                $('.vjs-watermark-block').show(1000);
            }

        },
        activate: function () {
            var that = this;
            get_vpa_player().on('loadedmetadata', function () {
                get_vpa_player().on('timeupdate', that.listener);
            });
        },
        deactivate: function () {
            this.hide_overlay();
        },
        show_overlay: function () {
            $('.vjs-watermark-block').show();
        },
        hide_overlay: function () {
            $('.vjs-watermark-block').hide();
        }
    },
    'overlay-optin': {
        halt_optin: false,
        listener: function () {
            console.log('time: ' + get_vpa_player().duration());
            if (this.halt_optin)
                return;
            if (typeof this.timepoint === 'undefined') {
                switch (js_options['overlay-optin_time']) {
                    case 'start':
                        this.timepoint = 0;
                        break;
                    case 'end':
                        this.timepoint = parseInt(get_vpa_player().duration()) - 1;
                        break;
                    default:
                        this.timepoint = js_options['overlay-optin_custom-time'];
                }
                this.timepoint = parseFloat(this.timepoint.toFixed(1));
            }

            if (typeof this.timepoint === 'number' && (this.timepoint % 1) === 0) {
                var current_time = Math.floor(this.currentTime());
            } else {
                var current_time = this.currentTime().toFixed(1);
            }
            current_time = parseFloat(current_time);

            if (current_time == this.timepoint || current_time > this.timepoint) {
                this.halt_optin = true;
                if (get_vpa_player().isFullscreen())
                    get_vpa_player().exitFullscreen();
                show_overlay_optin();
                var that = this;
                setTimeout(function () {
                    that.pause();
                }, 10);
            }

        },
        show_overlay_content: function () {
            if (get_vpa_player().isFullscreen())
                get_vpa_player().exitFullscreen();
            show_overlay_optin();
            get_vpa_player().pause();
        },
        hide_overlay: function () {
            $('.video-holder').plainOverlay('hide');
            this.deactivate();
            get_vpa_player().play();
        },
        activate: function () {
            if (parseInt(js_options['overlay-optin_not-show-after'])
                && parseInt(js_options['overlay-optin_not-show-view-count']) <= parseInt(getViewsCountVideo())) {
                return;
            }

            if (js_options['overlay-optin_hide-after-subscription']
                && getOverlayUserSubscribed()) {
                return;
            }

            var that = this;
            get_vpa_player().on('loadedmetadata', function () {
                get_vpa_player().on('timeupdate', that.listener);
                $('.overlay--optin .overlay_skip').bind('click touchstart', function () {
                    if (is_editable) {
                        return;
                    }
                    that.hide_overlay();
                });
            });
        },
        deactivate: function () {
            get_vpa_player().off('timeupdate', this.listener);
        }
    },
    'share-gateway': {
        listener: function () {

            this.halt_gtw = false;
            if (this.halt_gtw)
                return;
            if (typeof this.timepoint_gtw === 'undefined') {
                switch (js_options['share-gateway_time']) {
                    case 'start':
                        this.timepoint_gtw = 0;
                        break;
                    case 'end':
                        this.timepoint_gtw = get_vpa_player().duration() - 1;
                        break;
                    default:
                        this.timepoint_gtw = js_options['share-gateway_custom-time'];
                }
                this.timepoint_gtw = parseFloat(this.timepoint_gtw.toFixed(1));
            }

            if (typeof this.timepoint_gtw === 'number' && (this.timepoint_gtw % 1) === 0) {
                var current_time = Math.floor(this.currentTime());
            } else {
                var current_time = this.currentTime().toFixed(1);
            }
            current_time = parseFloat(current_time);

            if (current_time == this.timepoint_gtw || current_time > this.timepoint_gtw) {
                this.halt_gtw = true;
                if (get_vpa_player().isFullscreen())
                    get_vpa_player().exitFullscreen();
                show_share_gateway();
                var that = this;
                setTimeout(function () {
                    that.pause();
                }, 10);
            }

        },
        show_overlay: function () {
            if (get_vpa_player().isFullscreen())
                get_vpa_player().exitFullscreen();
            show_share_gateway();
            get_vpa_player().pause();
        },
        hide_overlay: function () {
            $('.video-holder').plainOverlay('hide');
            this.deactivate();
            if (get_vpa_player().paused())
                get_vpa_player().play();
        },
        activate: function () {
            if (parseInt(js_options['share-gateway_not-show-after'])
                && parseInt(js_options['share-gateway_not-show-view-count']) <= parseInt(getViewsCountVideo())) {
                return;
            }
            var that = this;
            get_vpa_player().on('loadedmetadata', function () {
                get_vpa_player().on('timeupdate', that.listener);
                $('.overlay--gateway .overlay_skip').bind('click touchstart', function () {
                    if (is_editable) {
                        return;
                    }
                    that.hide_overlay();
                });
            });
        },
        deactivate: function () {
            get_vpa_player().off('timeupdate', this.listener);
        }
    },
    'cta': {
        listener: function () {
            if (is_video_strong_paused())
                return;
            this.halt_cta = false;
            if (this.halt_cta)
                return;
            if (typeof this.timepoint_cta === 'undefined') {
                switch (js_options['cta_time']) {
                    case 'start':
                        this.timepoint_cta = 0;
                        break;
                    case 'end':
                        this.timepoint_cta = get_vpa_player().duration() - 1;
                        break;
                    default:
                        this.timepoint_cta = js_options['cta_custom-time'];
                }
                this.timepoint_cta = parseFloat(this.timepoint_cta.toFixed(1));
            }

            if (typeof this.timepoint_cta === 'number' && (this.timepoint_cta % 1) === 0) {
                var current_time = Math.floor(this.currentTime());
            } else {
                var current_time = this.currentTime().toFixed(1);
            }
            current_time = parseFloat(current_time);

            if (current_time == this.timepoint_cta || current_time > this.timepoint_cta) {
                this.halt_cta = true;
                if (get_vpa_player().isFullscreen())
                    get_vpa_player().exitFullscreen();
                show_cta_overlay();
                var that = this;
                setTimeout(function () {
                    that.pause();
                }, 10);
            }

        },
        show_overlay: function () {
            if (get_vpa_player().isFullscreen())
                get_vpa_player().exitFullscreen();
            show_cta_overlay();
            get_vpa_player().pause();
        },
        hide_overlay: function () {
            $('.video-holder').plainOverlay('hide');
            this.deactivate();
            if (get_vpa_player().paused())
                get_vpa_player().play();
        },
        activate: function () {
            if (parseInt(js_options['cta_not-show-after'])
                && parseInt(js_options['cta_not-show-view-count']) <= parseInt(getViewsCountVideo())) {
                return;
            }
            var that = this;
            get_vpa_player().on('loadedmetadata', function () {
                get_vpa_player().on('timeupdate', that.listener);
                $('.overlay--cta .overlay_skip').bind('click touchstart', function () {
                    if (is_editable) {
                        return;
                    }
                    that.hide_overlay();
                });
            });
        },
        deactivate: function () {
            get_vpa_player().off('timeupdate', this.listener);
        }
    },
    'video-behavior_onend': {
        activate: function () {
            get_vpa_player().on('ended', function () {
                var that = this;
                this.pause();
                switch (js_options['video-behavior_onend']) {
                    case 'replay':
                        this.play();
                        break;
                    case 'last_frame':
                        this.currentTime(this.duration());
                        setTimeout(function () {
                            that.pause();
                        }, 100);
                        break;
                    case 'first_frame':
                        this.currentTime(1);
                        setTimeout(function () {
                            that.pause();
                        }, 100);
                        break;
                    case 'black_frame':
                        $('#vpa_video').append('<div class="vjs-blackout"> </div>')
                        break;
                    default:
                        break;
                }
            });
            get_vpa_player().on('play', function () {
                var $blackout =  $('#vpa_video').find('.vjs-blackout');
                if ($blackout.length) {
                    $blackout.remove();
                }
            });
        },
        deactivate: function () {

        }
    },
    'pause-viewport': {
        activate: function () {
            function viewport_cb(event) {
                if (event.data === 'pp_video_is_visible') {
                    if (is_video_strong_paused() === false && (!get_vpa_player().paused() || (get_vpa_player().paused() && jQuery(get_vpa_player().el()).data('paused_niv') === 'true')))
                        get_vpa_player().play();
                    jQuery(get_vpa_player().el()).data('paused_niv', 'false');
                }
                else if (event.data === 'pp_video_not_visible') {
                    if (!get_vpa_player().paused())
                        jQuery(get_vpa_player().el()).data('paused_niv', 'true');
                    get_vpa_player().pause();
                }
            }

            window.addEventListener("message", viewport_cb, false);
        },
        deactivate: function () {

        }
    },
    'pause-outside-tab': {
        activate: function () {
            var hidden, visibilityChange;
            if (typeof document.hidden !== "undefined") {
                hidden = "hidden";
                visibilityChange = "visibilitychange";
            } else if (typeof document.mozHidden !== "undefined") {
                hidden = "mozHidden";
                visibilityChange = "mozvisibilitychange";
            } else if (typeof document.msHidden !== "undefined") {
                hidden = "msHidden";
                visibilityChange = "msvisibilitychange";
            } else if (typeof document.webkitHidden !== "undefined") {
                hidden = "webkitHidden";
                visibilityChange = "webkitvisibilitychange";
            }

            // If the page is hidden, pause the video;
            function handleVisibilityChange() {
              if (document[hidden]) {
                get_vpa_player().pause();
              } else {

              }
            }

            document.addEventListener(visibilityChange, handleVisibilityChange, false);
        },
        deactivate: function () {

        }
    },
    'sales-area_timed-delay': {
        timepoint: js_options['sales-area_timed-delay-amount'],
        halt: false,
        listener: function () {
            var that = ModulesVideoOnly['sales-area_timed-delay'];
            if (that.halt)
                return;

            if (Math.floor(this.currentTime()) >= that.timepoint) {
                that.halt = true;
                that.show_sales_area();
            }

        },
        show_sales_area: function () {
            $('.salesWrapper').show();
        },
        activate: function () {
            var that = this;
            if (js_options['sales-area_timed-delay-visit'] &&
                parseInt(getVisitCount(), 10) >= parseInt(js_options['sales-area_timed-delay-visit-count'], 10)) {
                this.show_sales_area();
            } else {
                get_vpa_player().on('loadedmetadata', function () {
                    get_vpa_player().on('timeupdate', that.listener);
                });
            }
        },
        deactivate: function () {
            get_vpa_player().off('timeupdate', this.listener);
        }
    },
    'overlay-annotation' : {
        show_overlay: function () {
        },
        hide_overlay: function () {
        },
        activate: function () {
        },
        deactivate: function () {
        }
    },
    'overlay-button': {
        listener: function () {
            if (is_video_strong_paused())
                return;
            this.halt_button = false;
            if (this.halt_button)
                return;
            if (typeof this.timepoint_button === 'undefined') {
                switch (js_options['overlay-button_time']) {
                    case 'start':
                        this.timepoint_button = 0;
                        break;
                    case 'end':
                        this.timepoint_button = get_vpa_player().duration() - 1;
                        break;
                    default:
                        this.timepoint_button = js_options['overlay-button_custom-time'];
                }
                this.timepoint_button = parseFloat(this.timepoint_button.toFixed(1));
            }

            if (typeof this.timepoint_button === 'number' && (this.timepoint_button % 1) === 0) {
                var current_time = Math.floor(this.currentTime());
            } else {
                var current_time = this.currentTime().toFixed(1);
            }
            current_time = parseFloat(current_time);

            if (current_time == this.timepoint_button || current_time > this.timepoint_button) {
                this.halt_button = true;
                if (get_vpa_player().isFullscreen())
                    get_vpa_player().exitFullscreen();
                show_overlay_button();
                var that = this;
                setTimeout(function () {
                    that.pause();
                }, 10);
            }

        },
        show_overlay: function () {
            if (get_vpa_player().isFullscreen())
                get_vpa_player().exitFullscreen();
            show_overlay_button();
            get_vpa_player().pause();
        },
        hide_overlay: function () {
            $('.video-holder').plainOverlay('hide');
            this.deactivate();
            if (get_vpa_player().paused())
                get_vpa_player().play();
        },
        activate: function () {
            var that = this;
            get_vpa_player().on('loadedmetadata', function () {
                get_vpa_player().on('timeupdate', that.listener);
                $('.overlay--button .overlay_skip').bind('click touchstart', function () {
                    if (is_editable) {
                        return;
                    }
                    that.hide_overlay();
                });
            });
        },
        deactivate: function () {
            get_vpa_player().off('timeupdate', this.listener);
        }
    }
};

function show_overlay_optin() {
    $('.video-holder').plainOverlay('show', {
        color: js_options['overlay-optin_background-color'] || 'black',
        opacity: js_options['overlay-optin_overlay-opacity'] || 0.75,
        progress: function () {
            return $(".overlay--optin").first().clone(true);
        }
    });
    adjust_overlay_content();
}

function show_share_gateway() {
    $('.video-holder').plainOverlay('show', {
        color: js_options['share-gateway_background-color'] || 'black',
        opacity: js_options['share-gateway_overlay-opacity'] || 0.75,
        progress: function () {
            return $(".overlay--gateway").first().clone(true);
        }
    });
    adjust_overlay_content();
}

function show_cta_overlay() {
    $('.video-holder').plainOverlay('show', {
        color: js_options['cta_background'] || 'black',
        opacity: js_options['cta_overlay-opacity'] || 0.75,
        progress: function () {
            return $(".overlay--cta").first().clone(true);
        }
    });
    adjust_overlay_content();
}

function show_resume_playback() {
    $('.video-holder').plainOverlay('show', {
        color: '#000000',
        opacity: 0.75,
        progress: function () {
            return $(".overlay--playback-resume").first().clone(true);
        }
    });
    adjust_overlay_content();
}

function show_overlay_button() {
    $('.video-holder').plainOverlay('show', {
        color: js_options['overlay-optin_background-color'] || 'black',
        opacity: js_options['overlay-optin_overlay-opacity'] || 0.75,
        progress: function () {
            return $(".overlay--button").first().clone(true);
        }
    });
    adjust_overlay_content();
}

function get_vpa_player(force_tech) {
    if (typeof window['vpa_player'] === 'undefined') {
        var $vpa_video = $('#vpa_video');
        force_tech = force_tech || $vpa_video.closest('.video-js-wrapper').data('tech');
        var video_setup = $vpa_video.closest('.video-js-wrapper').data('setup');
        switch (force_tech) {
            case 'html5':
                if (!supports_h264_baseline_video()) {
                    video_setup.techOrder = ['flash', 'html5'];
                }
                window['vpa_player'] = videojs('vpa_video', video_setup);
                window.vpa_player.src(video_setup['src']);
                break;
            case 'youtube':
                window['vpa_player'] = videojs('vpa_video', video_setup);
                break;
            case 'vimeo':
                window['vpa_player'] = videojs('vpa_video', video_setup);
                break;
            default:
                break;
        }
        window['vpa_player'].bigPlayButton.hide();
    }
    return window['vpa_player'];
}

function is_video_strong_paused() {
    return ($('.overlay').is(':visible') || $('.cta').is(':visible'));
}

function get_scaling_prefix() {
    var prefixes = 'zoom transform WebkitTransform MozTransform OTransform msTransform'.split(' ');
    for (var i = 0; i < prefixes.length; i++) {
        if (document.createElement('div').style[prefixes[i]] !== undefined) {
            return prefixes[i];
        }
    }
    return false;
}

function supports_h264_baseline_video() {
    if (!(!!document.createElement('video').canPlayType)) {
        return false;
    }
    var v = document.createElement("video");
    return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
}

function adjust_overlay_content() {
    var $wrapper = $('.overlay:visible');
    var $content = $wrapper.find('.overlay_content');
    var wrapper_height = function () {
        return $wrapper.height();
    };
    var content_height = function () {
        return $content[0].scrollHeight;
    };
    var scaling_prefix = get_scaling_prefix();
    switch (scaling_prefix) {
        case 'zoom':
            $content.css(scaling_prefix, '100%');
            break;
        case 'transform':
        case 'WebkitTransform':
        case 'MozTransform':
        case 'OTransform':
        case 'msTransform':
            $content.css(scaling_prefix, $content.css(scaling_prefix) + ' scale(1)').css('marginTop', '0');
            break;
        default:
            break;
    }

    if (content_height() > wrapper_height()) {
        var delta_height = content_height() - wrapper_height();
        var delta = 200 - content_height() * 100 / wrapper_height();

        switch (scaling_prefix) {
            case 'zoom':
                $content.css(scaling_prefix, delta + '%');
                break;
            case 'transform':
            case 'WebkitTransform':
            case 'MozTransform':
            case 'OTransform':
            case 'msTransform':
                $content.css(scaling_prefix, 'scale(' + delta / 100 + ')').css('marginTop', '-' + delta_height / 2 + 'px');
                break;
            default:
                break;
        }
    }
}
jQuery(document).ready(function () {
    //console.log(document.cookie);
    if (js_options['video-settings_source'] == 'vimeo') {
        get_vpa_player().posterImage.show();
    }
    //count number of time person loads this page
    cookie.set('vpa_visit_count', !!cookie.get('vpa_visit_count') ? +cookie.get('vpa_visit_count') + 1 : 1);

    get_vpa_player().ready(function () {
        if ($.inArray(js_options['video-settings_poster'], ['none', 'remote']) != -1) {
            get_vpa_player().bigPlayButton.show();
        }
        if (js_options['video-settings_poster'] == 'none' && (js_options['video-behavior_autostart'] == 1
            && !(js_options['video-behavior_resume'] == 1 && getVisitCount() > 1))) {
            this.posterImage.hide();
        }
        this.one('play', function () {
            vpa_heartbeat.add({
                project_id: project_id,
                event_type: 'video_view'
            });
        });

        $(this.el()).bind('contextmenu', function (event) {
            event.preventDefault()
        });

        //below prevents video click to pause, when control bar is hidden
//        $(this.el()).bind('mousedown', function () {
//            if (get_vpa_player().controlBar.width() <= 0) {
//                get_vpa_player().play();
//            }
//        });

        var __flag_val = null;
        get_vpa_player().on('timeupdate', function () {
            if (typeof this.__stored_times === 'undefined')
                this.__stored_times = [];
            var ctime = Math.round(this.currentTime());
            if (__flag_val === ctime)
                return;
            else
                __flag_val = ctime;
            var video_duration = Math.round(this.duration());
            if ($.inArray(this.__stored_times, ctime) < 0) {
                this.__stored_times.push(ctime);
                try {
                    vpa_heartbeat.add({
                        project_id: project_id,
                        event_type: 'video_checkpoint',
                        video_times: array_unique(getRanges(this.__stored_times.sort())),
                        video_duration: video_duration
                    }, 'replace');
                } catch (err) {
                }
            }

            //trigger video timeupdate event on sale page
            trigger_parent_window_video_timeupdate(ctime);
        });

        //load video modules
        for (var i in ModulesVideoOnly) {
            if (typeof js_options[i] !== 'undefined' && js_options[i]) {
                ModulesVideoOnly[i].activate();
            } else {
                ModulesVideoOnly[i].deactivate();
            }
        }

        if (typeof this.controlBar !== 'undefined') {
            this.controlBar.fullscreenToggle.hide();
            this.controlBar.volumeControl.hide();
            this.controlBar.muteToggle.hide();
            this.controlBar.hide();
        }
    });
    get_vpa_player().on('firstplay', function() {
        //count number views this video
        var str_views_count_video = 'views_video_count_' + project_id;
        cookie.set(str_views_count_video, !!cookie.get(str_views_count_video) ? +cookie.get(str_views_count_video) + 1 : 1);
        get_vpa_player().posterImage.hide();
    });

    adjust_video_dimensions();

});

function adjust_video_dimensions() {
    var $video_holder = $('.video-holder:visible');

    if (page_type == 'sales-page') {
        get_vpa_player().width($video_holder.width());
        get_vpa_player().height($video_holder.height());
    } else {
        get_vpa_player().width(window.innerWidth);
        get_vpa_player().height(window.innerHeight);
    }
    //$video_holder.css('height', $video_holder.height());
    //$video_holder.css('width', $video_holder.width());
}

function trigger_parent_window_video_timeupdate(time) {
    try {
        if (window.document.getElementById('video-events')) {
            window.parent.$('#video-events').trigger('timeupdate', time);
        }
    } catch (err) {
        console.log('video-events not updated: timeupdate');
    }
}

function getRanges(array) {
    var ranges = [], rstart, rend;
    for (var i = 0; i < array.length; i++) {
        rstart = array[i];
        rend = rstart;
        while (array[i + 1] - array[i] == 1) {
            rend = array[i + 1]; // increment the index if the numbers sequential
            i++;
        }
        ranges.push(rstart == rend ? rstart + '' : rstart + '-' + rend);
    }
    return ranges;
}

function getVisitCount() {
    return parseInt(cookie.get('vpa_visit_count'), 10) || 0;
}

function getViewsCountVideo() {
    return parseInt(cookie.get('views_video_count_' + project_id), 10) || 0;
}

function getOverlayUserSubscribed() {
    return cookie.get('overlay_user_subscribed_' + project_id) || false;
}