var universed = {
	navHeight : 0
};

var jsPlayer = {

	  ytplayer : null
	, bufferInterval : null
	, elapsedInterval : null
	, fullyBuffered : false
	, videoToLoad : null
	
	, init : function (videoToLoad) {
	    var params = { allowScriptAccess: "always" };
	    var atts = { id: "videoplayer" };
		
		jsPlayer.videoToLoad = videoToLoad;
	
	    swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=videoplayer", 
	                       "videoplayer", "425", "368", "8", null, null, params, atts);
	
		
		$('#playpause').click(function (e) {
			e.preventDefault();
			if($(this).hasClass('play')) {
				jsPlayer.ytplayer.playVideo();
				jsPlayer.startPlayhead();
				$(this).removeClass('play');
				$(this).addClass('pause');
			} else {
				jsPlayer.ytplayer.pauseVideo();
				jsPlayer.stopPlayhead();
				$(this).removeClass('pause');
				$(this).addClass('play');			
			}
		});	

	  }
	
	, startBufferDisplay : function () {
		jsPlayer.bufferInterval = window.setInterval(jsPlayer.updateBufferDisplay,1000);
	  }	
	
	, startElapsedDisplay : function (playerStatus) {
		jsPlayer.elapsedInterval = window.setTimeout(jsPlayer.updateElapsedDisplay,200);
	}

	, updateBufferDisplay : function (playerStatus) {
		if(1 === jsPlayer.ytplayer.getPlayerState() && !jsPlayer.fullyBuffered && (jsPlayer.ytplayer.getVideoBytesTotal() !== -1)) {
			//the 98 means we only get 99% width. so we're encoding a bit of display logic here. should change in future.
			var width = 98 * (jsPlayer.ytplayer.getVideoBytesLoaded() / jsPlayer.ytplayer.getVideoBytesTotal());
			$('#buffer').width(width+'%');
			if (jsPlayer.ytplayer.getVideoBytesLoaded() === jsPlayer.ytplayer.getVideoBytesTotal()) {
				jsPlayer.fullyBuffered = true;
				jsPlayer.stopBufferDisplay();		
			} 			
		}	
	  }	
	
	, updateElapsedDisplay : function () {

		if(1 === jsPlayer.ytplayer.getPlayerState() && (jsPlayer.ytplayer.getVideoBytesTotal() !== -1)) {
			var secondsElapsed = jsPlayer.ytplayer.getCurrentTime();
			$('#vid-elapsed').html(jsPlayer.formatTime(secondsElapsed));
			if (secondsElapsed === jsPlayer.ytplayer.getDuration()) {
				jsPlayer.stopElapsedDisplay();		
			} 			
		}	
		jsPlayer.elapsedInterval = window.setTimeout(jsPlayer.updateElapsedDisplay,200);			
		
			
	}
	
	, stopBufferDisplay : function () {
		clearInterval(jsPlayer.bufferInterval);
	}
	
	, stopElapsedDisplay : function () {
		clearInterval(jsPlayer.elapsedInterval);
	}

	, startPlayhead : function (playerStatus) {
		if(1 === playerStatus) { // playing
				var duration = (jsPlayer.ytplayer.getDuration() - jsPlayer.ytplayer.getCurrentTime()) * 1000;
				$('#playhead').animate({
					left : $('#scrubber').width() - ($('#playhead').width()/2)
				},duration);
		}
	}

	, stopPlayhead : function () {
		$('#playhead').stop();
	}
	
	, displayVidLength : function (playerStatus) {
		if(1 === playerStatus) { // playing
			$('#vid-length').html(jsPlayer.formatTime(jsPlayer.ytplayer.getDuration()));
		}
	}

	, recueVideo : function (ev,ui) {
		var vidLength = jsPlayer.ytplayer.getDuration();
		var playheadPos = (ui.position.left + ($('#playhead').width() / 2) ) / $('#scrubber').width() ;
		var seconds = playheadPos * vidLength;
		
		jsPlayer.ytplayer.seekTo(seconds);
//		jsPlayer.setElapsed(seconds);
		jsPlayer.startPlayhead();

	}
	
//	, setElapsed : function (seconds) {
//		$('#vid-elapsed').html(jsPlayer.formatTime(seconds));
//	}
	
	, formatTime : function (pSecs) {
		var hours;
		var mins;
		var secs;
		
		hours = Math.floor(pSecs / 3600);
		pSecs = pSecs % 3600;
		
		mins = Math.floor(pSecs / 60);
		secs = Math.floor(pSecs % 60);
		
		if(hours < 10) {
			hours = '' + '0' + hours;
		}
		
		if(mins < 10) {
			mins = '' + '0' + mins;
		}
		
		if(secs < 10) {
			secs = '' + '0' + secs;
		}		
		
		if ('00' == hours && '00' == mins) {
			return '00:' + secs;
		} else if ('00' == hours) {
			return mins + ':' + secs;
		} else {
			return hours + ':' + mins + ':' + secs;
		}
		
	}
	
};

function onYouTubePlayerReady(playerId) {
	jsPlayer.ytplayer = document.getElementById("videoplayer");
	jsPlayer.ytplayer.loadVideoById(jsPlayer.videoToLoad);
	jsPlayer.ytplayer.addEventListener('onStateChange','jsPlayer.startPlayhead');
	jsPlayer.ytplayer.addEventListener('onStateChange','jsPlayer.startBufferDisplay');
	jsPlayer.ytplayer.addEventListener('onStateChange','jsPlayer.displayVidLength');
	jsPlayer.ytplayer.addEventListener('onStateChange','jsPlayer.startElapsedDisplay');
	$('#playhead').draggable({ containment:'parent',
							   cursor: 'pointer', 
							   start: jsPlayer.stopPlayhead, 
							   stop: jsPlayer.recueVideo, 
							   axis: 'x' });
}



$(function () {
	
	$('#lang ol:first li').each(function (e) { universed.navHeight += 1.13; });

	//languages nav.
	$("#languages").click(function(e){
		if($("#lang").hasClass('closed')) {
			var newHeight = universed.navHeight + 4.6;
			$("#lang").animate({height: newHeight+'em'},'normal','',function (e){
				$("#lang").removeClass('closed').addClass('open');
				$("#languages").removeClass('closed').addClass('open');
			});
		} else {
			$("#lang").animate({height:'0px'},'normal','',function (e){
				$("#lang").removeClass('open').addClass('closed');
				$("#languages").removeClass('open').addClass('closed');
			});			
		}
	});
	
	//Info box which appears for your first viewing of the site.
	$("#info-close").click(function(e){
			$('#info').remove();
			$.ajax({
				url: '/closeinfobox'
			});
	});

	//pseudo-cron
	$.ajax({
		url: '/background'
	});
});