$.fn.pulseSubsLine = function(klass) {
	var e = this;
	e
		.find('.text')
			.hide()
		.end()
		.addClass(klass)
		.css({display: 'block'})
		.animate({opacity: 1, duration: .75}, function() {
			setTimeout(function() {
				e.animate({opacity: 0, duration: .5}, function() {
					e.css({display: 'none'}).removeClass(klass);
				})
			}, 5000);
		});
}
$.fn.autoScale = function() {
	if(!this.data('autoScaleOriginal')) {
		this.data('autoScaleOriginal', parseInt(this.css('font-size')));
	}
	var
		maxSize = this.data('autoScaleOriginal');
		maxH = this.parent().innerHeight(),
		thisH = this.css('font-size', maxSize).outerHeight();
	while(thisH > maxH && maxSize > 0) {
		thisH = this.css('font-size', --maxSize).outerHeight();
	}
	return this;
}
// mediaelement subtitles button
MediaElementPlayer.prototype.buildsubs = function(player, controls, layers, media) {
	var
		host = 'http://subtitles.c3voc.de/',
		room = $('.room.video').data('room'),
		isLoaded = false,
		t = 200,
		$btn = $([
			'
',
				'',
			'
'
		].join('')),
		$line = $([
			'',
				'
',
				'
',
					'(silence)',
					'
',
					'Maybe no-one is currently writing Live-Subtitles',
				'
',
				'
',
					'Sorry, an Error occured.',
				'
',
			'
![]() '),
				src = $teaser.data('src');
			if(!src) {
				src = $teaser.prop('src');
				$teaser.data('src', src);
			}
			$preload.on('load', function() {
				$teaser.prop('src', $preload.prop('src'));
			}).prop('src', src + '?'+(new Date()).getTime());
		});
	}, 1000*60);
});
// multiviewer
$(function() {
	var audioMeter = !!window.chrome;
	$('body.multiview')
		.find('audio, video')
			.each(function(idx, player) {
				var
					$player = $(player),
					$meter = $player.closest('.cell').find('.meter'),
					$timer = $player.closest('.cell').find('.timer');
				$player.on("timeupdate", function(e)
				{
					var
						s = Math.floor(this.currentTime % 60),
						m = Math.floor(this.currentTime / 60) % 60,
						h = Math.floor(this.currentTime / 60 / 60) % 24,
						d = Math.floor(this.currentTime / 60 / 60 / 24),
						f = Math.floor((this.currentTime - Math.floor(this.currentTime)) * 1000),
						txt = '';
					txt += d+'d ';
					if(h < 10) txt += '0';
					txt += h+'h ';
					if(m < 10) txt += '0';
					txt += m+'m ';
					if(s < 10) txt += '0';
					txt += s+'s ';
					if(f < 10) txt += '00';
					else if(f < 100) txt += '0';
					txt += f+'ms';
					$timer.text(txt);
				});
				if(!audioMeter)
				{
					$player.prop('muted', true);
					$meter.hide();
					return;
				}
				var
					ctx = new AudioContext(),
					audioSrc = ctx.createMediaElementSource(player),
					analyser = ctx.createAnalyser();
				// we have to connect the MediaElementSource with the analyser 
				audioSrc.connect(analyser);
				// we could configure the analyser: e.g. analyser.fftSize (for further infos read the spec)
				analyser.fftSize = 64;
				var w = 100 / analyser.frequencyBinCount;
				for (var i = 0; i < analyser.frequencyBinCount; i++) {
					var c = Math.floor( i * 255 / analyser.frequencyBinCount );
					$('
'),
				src = $teaser.data('src');
			if(!src) {
				src = $teaser.prop('src');
				$teaser.data('src', src);
			}
			$preload.on('load', function() {
				$teaser.prop('src', $preload.prop('src'));
			}).prop('src', src + '?'+(new Date()).getTime());
		});
	}, 1000*60);
});
// multiviewer
$(function() {
	var audioMeter = !!window.chrome;
	$('body.multiview')
		.find('audio, video')
			.each(function(idx, player) {
				var
					$player = $(player),
					$meter = $player.closest('.cell').find('.meter'),
					$timer = $player.closest('.cell').find('.timer');
				$player.on("timeupdate", function(e)
				{
					var
						s = Math.floor(this.currentTime % 60),
						m = Math.floor(this.currentTime / 60) % 60,
						h = Math.floor(this.currentTime / 60 / 60) % 24,
						d = Math.floor(this.currentTime / 60 / 60 / 24),
						f = Math.floor((this.currentTime - Math.floor(this.currentTime)) * 1000),
						txt = '';
					txt += d+'d ';
					if(h < 10) txt += '0';
					txt += h+'h ';
					if(m < 10) txt += '0';
					txt += m+'m ';
					if(s < 10) txt += '0';
					txt += s+'s ';
					if(f < 10) txt += '00';
					else if(f < 100) txt += '0';
					txt += f+'ms';
					$timer.text(txt);
				});
				if(!audioMeter)
				{
					$player.prop('muted', true);
					$meter.hide();
					return;
				}
				var
					ctx = new AudioContext(),
					audioSrc = ctx.createMediaElementSource(player),
					analyser = ctx.createAnalyser();
				// we have to connect the MediaElementSource with the analyser 
				audioSrc.connect(analyser);
				// we could configure the analyser: e.g. analyser.fftSize (for further infos read the spec)
				analyser.fftSize = 64;
				var w = 100 / analyser.frequencyBinCount;
				for (var i = 0; i < analyser.frequencyBinCount; i++) {
					var c = Math.floor( i * 255 / analyser.frequencyBinCount );
					$('')
						.css({
							'width': w+'%',
							'left': (i*w)+'%',
							'background-color': 'rgb('+c+', '+(192 - c)+', 0)'
						})
						.appendTo($meter);
				}
				var $bars = $meter.find('.bar');
				// frequencyBinCount tells you how many values you'll receive from the analyser
				var frequencyData = new Uint8Array(analyser.frequencyBinCount);
				// we're ready to receive some data!
				function renderFrame() {
					// update data in frequencyData
					analyser.getByteFrequencyData(frequencyData);
					// render frame based on values in frequencyData
					for (var i = 0; i < frequencyData.length; i++) {
						$($bars[i]).css('height', frequencyData[i] / 255 * 40);
					}
					// loop
					requestAnimationFrame(renderFrame);
				}
				renderFrame();
			});
});
// embed-form
$(function() {
	var originalsrc;
	$('.embed-form #size, .embed-form #autoplay').on('click', function() {
		var
			$size = $('.embed-form #size'),
			selected = $size.val().split(','),
			$size = $('.embed-form #size'),
			$codefield = $('#embed-code'),
			$urlfield = $('#embed-url'),
			$iframe = $( $codefield.val() ),
			autoplay = $('.embed-form #autoplay').prop('checked');
		if(!originalsrc)
			originalsrc = $iframe.attr('src');
		var src = originalsrc + (autoplay ? '' : 'no-autoplay/');
		$iframe.attr({width: selected[0], height: selected[1]});
		$iframe.attr({src: src});
		$codefield.val( $iframe.prop('outerHTML') );
		$urlfield.val( src );
	})
	$('.embed-form').on('click', 'input[type=text]', function() {
		$(this).select();
	});
});
// closed-countdown
$(function() {
	var
		$el = $('.closed .countdown'),
		dt = moment($el.data('dt'));
	$el.attr('title', 'on '+dt.format('dddd, MMM Do YYYY'))
	function update() {
		setTimeout(update, 5000);
		var now = moment();
		if(dt.dayOfYear() == now.dayOfYear() && dt.year() == now.year())
			$el.text('today');
		else
			$el.text( dt.from(now) );
	}
	update();
});