var slides;
var current_slide = 0;
var current_slide_items;
var current_item = 0;
var slide_window;
var clock;
var timer;
var timer_interval;
var slideCounter;
var planned_duration = 30;

function changeSlide(i, hide_items) {
	if (current_slide + i < 0 || current_slide + i >= slides.length)
	{
		return true;
	}

	if (slide_window)
	{
		slide_window.window.changeSlide(i, hide_items);
	}

	slides[current_slide].classList.remove('current');

	current_slide += i;

	// Change URL
	window.location.hash = "#" + current_slide;

	// Get all items in a list
	current_slide_items = slides[current_slide].getElementsByTagName('li');
	current_item = 0;

	for (var i = 0; i < current_slide_items.length; i++)
	{
		if (hide_items)
		{
			current_slide_items[i].classList.remove('shown');
		}
		else
		{
			current_slide_items[i].classList.add('shown');
		}
	}

	slides[current_slide].classList.add('current');
	slideCounter.innerHTML = current_slide + 1;

	return true;
}

function progressSlide() {
	if (current_item + 1 > current_slide_items.length || current_slide_items[current_item].classList.contains('shown'))
	{
		return changeSlide(1, true);
	}

	current_slide_items[current_item++].classList.add('shown');

	if (slide_window)
	{
		slide_window.window.progressSlide();
	}

	return true;
}

function addTime() {
	if (!clock)
	{
		clock = document.createElement('div');
		clock.className = 'clock';
		document.body.appendChild(clock);
	}

	function zerofill(v) {
		return ("0" + v).slice(-2);
	}
	timer = 0;
	window.clearInterval(timer_interval);
	timer_interval = window.setInterval(function () {
		timer += 1;
		clock.style.width = Math.round(timer / (planned_duration * 60) * 100) + '%';
	}, 1000);
}

function initSlides () {
	slides = document.getElementsByTagName('section');
	var current = window.location.hash.substr(1);

	if (current > 0)
	{
		current_slide = parseInt(current, 10);
	}

	slides[current_slide].classList.add('current');
	current_slide_items = slides[current_slide].getElementsByTagName('li');

	slideCounter = document.createElement('div');
	slideCounter.className = 'counter';
	document.body.appendChild(slideCounter);

	document.onkeydown = function (e) {
		var prevent = false;

		if (e.key == " ")
		{
			prevent = progressSlide();
		}
		else if (e.key == "ArrowRight" || e.key == "ArrowDown" || e.key == "PageDown")
		{
			prevent = changeSlide(1, false);
		}
		else if (e.key == "ArrowLeft" || e.key == "ArrowUp" || e.key == "PageUp")
		{
			prevent = changeSlide(-1, false);
		}
		else if (e.key == "Home")
		{
			prevent = changeSlide(-(current_slide), false);
		}
		else if (e.key == "End")
		{
			prevent = changeSlide(slides.length - 1, false);
		}
		else if (e.key == "o")
		{
			slide_window = window.open(document.location.href);
			document.body.className = "notes";
			prevent = true;
		}
		else if (e.key == "s")
		{
			addTime();
		}

		if (prevent)
		{
			e.preventDefault();
			return false;
		}

		return true;
	};
}


window.onload = initSlides;