var youtubeStateChanged = [];
(function(){
	function getElementByClassName(className, tag) {
		var result = null;
		if (this.getElementsByClassName) {
			result = this.getElementsByClassName(className);
			if (result.length)
				result = result[0];
		} else {
			if (!tag)
				tag = '*';
			var elements = this.getElementsByTagName(tag);
			for (var i = 0; i < elements.length && !result; i++) {
				if (elements[i].className == className) {
					result = elements[i];
				}
			}
		}
		return result;
	};

	var callback = function(player, id, object) {
		var
			interval,
			domParent = player.parentNode.parentNode,
			domPause = getElementByClassName.call(domParent, 'pause', 'div'),
			domPlay = getElementByClassName.call(domParent, 'play', 'div'),
			domPosition = getElementByClassName.call(domParent, 'position', 'div'),
			domSeek = getElementByClassName.call(domParent, 'container', 'div'),
			domTimecode = getElementByClassName.call(domParent, 'timecode', 'div'),
			duration = 0;

		function stopUpdate() {
			clearInterval(interval);
		};
		function durationToString(duration) {
			duration = Math.round(duration);
			function zeroFill(i) {
				if (i < 10)
					i = '0' + i;
				else
					i = i.toString();
				return i;
			};
			var
				hours = Math.floor(duration/60/60),
				minutes = Math.floor(duration/60) % 60,
				seconds = duration % 60,
				result = zeroFill(minutes)+':'+zeroFill(seconds);
			if (hours > 0) {
				result = zeroFill(hours)+':'+result;
			}
			return result;
		};
		function updatePosition() {
			if (!duration)
				duration = player.getDuration();
			var position = player.getCurrentTime();
			domTimecode.firstChild.nodeValue = durationToString(position) + ' / ' + durationToString(duration);
			domPosition.style.width = position/duration*100 + '%';
		};
		function startPlay() {
			stopUpdate();
			updatePosition();
			setInterval(updatePosition, 200);
		};
		
		function stateChanged(state) {
			switch (state) {
				case 1: // playing
					startPlay();
					break;
				case -1: // unstarted
				case 0: // ended
				case 2: // paused
				case 3: // buffering
				case 5: // video cued
					stopUpdate();
					break;
			}
		};
		domPause.onclick = function() {
			player.pauseVideo();
		};
		domPlay.onclick = function() {
			player.playVideo();
		};
		domSeek.onclick = function(event) {
			event = event || window.event;
			var x = event.layerX;
			if (!x)
				x = event.offsetX;
			if (!x)
				x = 0;
			var position = x/this.clientWidth * duration;
			player.seekTo(position, true);
		};
		var index = youtubeStateChanged.length;
		youtubeStateChanged.push(stateChanged);
		player.addEventListener('onStateChange', 'youtubeStateChanged['+index+']');
		var playerid = object.url.match(/[\?&]v=([^&]+)/);
		if (playerid) {
			player.cueVideoById(playerid[1], 0);
		}
	};
	secoya.video.embed.addLoadListener('video', callback, true);
})();
