var calendar;
var myDays = new Array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag");
var myMonths = new Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

function Calendar(id) {
	this.collumnWidth = 18;
	this.spacing = 2;
	this.width = 7 * (this.collumnWidth + 2) + 7 * this.spacing;
	
	this.container = document.getElementById(id);
	this.navContainer;
	this.headerContainer;
	this.dayContainer;
	
	this.markDates = function(dateArray) {
		for (var i = 0; i < this.dayContainer.childNodes.length; i++) {
			var element = this.dayContainer.childNodes[i];
			for (var j = 0; j < dateArray.length; j++) {
				if (element.innerHTML == dateArray[j]) {
					element.className = "dayActive";
				}
			}
		}
	};
	
	this.init = function() {
		var container = document.createElement("div");
		container.style.width = this.width + "px";
		container.style.padding = 5 * this.spacing + "px 7px " + 5 * this.spacing + "px 6px";
		container.className = "calendarContainer";
		this.container.appendChild(container);
		this.container = container;
		
		this.navContainer = document.createElement("div");
		this.navContainer.className = "calendarNav";
		setNavContainer();
		
		this.headerContainer = document.createElement("div");
		this.headerContainer.className = "calendarHeader";
		setHeaderContainer();
		
		this.dayContainer = document.createElement("div");
		this.dayContainer.className = "calendarDay";
		
		this.container.appendChild(this.navContainer);
		this.container.appendChild(this.headerContainer);
		this.container.appendChild(this.dayContainer);
		
		this.setDates(new Date());
	};
	
	this.setDates = function(d) {
		var now = new Date();
		var y = d.getFullYear();
		var m = d.getMonth();
		var first = getFirstDay(d);
		var last = getLastDate(d);
		
		this.dayContainer.innerHTML = "";
		
		var i = 2 - first;
		if (i == 2) {
			i -= 7;
		}
		while (i <= last) {
			if (i < 1) {
				this.dayContainer.appendChild(new Day("", "day"));
			} else if (y == now.getFullYear() && m == now.getMonth() && i == now.getDate()) {
				this.dayContainer.appendChild(new Day(i, "daySelected"));
			} else {
				this.dayContainer.appendChild(new Day(i, "day"));
			}
			i++;
		}
		new FloatBreak();
		showEvents(y, m);
	};
}

function setNavContainer() {
	var d = new Date();
	var y = d.getFullYear();
	var m = d.getMonth();
	var select = document.createElement("select");
	var i = 0;
	while (i < 13) {
		var option = document.createElement("option");
		if (typeof(option.innerText) != 'undefined') {
			option.innerText = myMonths[m] + " " + y;
		} else {
			option.text = myMonths[m] + " " + y;
		}
		option.value = y + "," + m;
		select.appendChild(option);
		if (m + 1 < 12 || y != d.getFullYear()) {
			m++;
		} else {
			m = 0;
			y++;
		}
		i++;
	}
	
	select.onchange = function() {
		var selected = this.value.split(",");
		var y = selected[0];
		var m = selected[1];
		calendar.setDates(new Date(y, m));
	};
	
	calendar.navContainer.appendChild(select);
}

function setHeaderContainer() {
	for (var i = 1; i <= 7; i++) {
		if (i < 7) {
			var element = new Day(myDays[i].substring(0, 2), "dayHeader");
		} else {
			var element = new Day(myDays[0].substring(0, 2), "dayHeader");
		}
		calendar.headerContainer.appendChild(element);
	}
}

function Day(text, className) {
	var element = document.createElement("div");
	element.style.width = calendar.collumnWidth + "px";
	element.style.margin = calendar.spacing + "px 0 0 " + calendar.spacing + "px";
	if (className) {
		element.className = className;
	}
	element.innerHTML = text;
	return element;
}

function FloatBreak() {
	var element = document.createElement("div");
	element.className = "floatbreaker";
	calendar.dayContainer.appendChild(element);
}

function getDay(d) {
	return myDays[d.getDay()];
}

function getMonth(d) {
	return myMonths[d.getMonth()];
}

function getFirstDay(d) {
	var f = new Date(d.getFullYear(), d.getMonth(), 1);
	return f.getDay();
}

function getLastDate(d) {
	var y = d.getFullYear();
	var m = d.getMonth() + 1;
	return new Date(y, m, 0).getDate();
}
