window.ardk = (function(){
	function getId(id) {
		return document.getElementById(id);
	};
	function create() {
		return secoya.dom.createElement.apply(secoya.dom, arguments);
	};
	function getElementsByClassName(className, tag) {
		if (this.getElementsByClassName) {
			return this.getElementsByClassName(className);
		}
		if (!tag)
			tag = '*';
		var results = [];
		var elements = this.getElementsByTagName(tag);
		className = new RegExp('(?:^|\\s)'+className+'(?:\\s|$)');
		for (var i = 0; i < elements.length; i++) {
			if (className.test(elements[i].className)) {
				results.push(elements[i]);
			}
		}
		return results;
	};

	function soundex(str){
		// copied from: http://phpjs.org/functions/soundex
		str = (str + '').toUpperCase();
		if (!str) {
			return '';
		}
		var sdx = [0, 0, 0, 0],
			m = {B: 1, F: 1, P: 1, V: 1, C: 2, G: 2, J: 2, K: 2, Q: 2, S: 2, X: 2, Z: 2, D: 3, T: 3, L: 4, M: 5, N: 5, R: 6},
			i = 0,
			j, s = 0,
			c, p;

		while ((c = str.charAt(i++)) && s < 4) {
			if (j = m[c]) {
				if (j !== p) {
					sdx[s++] = p = j;
				}
			} else {
				s += i === 1;
				p = 0;
			}
		}
		sdx[0] = str.charAt(0);
		return sdx.join('');
	}

	(function ie6(){
		var browser = lightCore.getBrowser();
		if (browser.getName() == 'IE' && browser.getVersion() < 7) {
			function mouseover() {
				this.className += ' hover';
			};
			function mouseout() {
				this.className = this.className.replace(/ hover/, '');
			};
			var spots = getId('spots');
			if (spots) {
				var e = getElementsByClassName.call(spots, 'spot', 'div');
				for (var i = 0; i < e.length; i++) {
					e[i].onmouseover = mouseover;
					e[i].onmouseout = mouseout;
				}
			}
		}
	})();
	(function calendarArrows() {
		var scrollDiv, fx = new secoya.fx({
			from: 0,
			to: 0,
			duration: 0.3,
			type: function(x) {return secoya.fx.power(x, 5);},
			callback: function(x) {
				scrollDiv.scrollTop = x;
			}
		});
		function scroll(div, add) {
			if (fx.running)
				fx.resetToEnd();
			scrollDiv = div;
			fx.from = div.scrollTop;
			fx.to = div.scrollTop + add;
			fx.start();
		};
		function setup(calendar) {
			var up = getElementsByClassName.call(calendar, 'up')[0];
			var down = getElementsByClassName.call(calendar, 'down')[0];
			calendar = getElementsByClassName.call(calendar, 'items')[0];
			if (up && down) {
				up.onclick = function() {
					scroll(calendar, -77);
				};
				down.onclick = function() {
					scroll(calendar, 77);
				};
			}
		};
		var s = getId('spots');
		if (s) {
			var calendars = getElementsByClassName.call(s, 'calendar', 'div');
			for (var i = 0; i < calendars.length; i++) {
				setup(calendars[i]);
			}
		}
	})();
	var slideshows = [];
	var timeouts = {};
	function slideshow(){
		for (var i = 0; i < slideshows.length; i++)
			slideshows[i].resetToEnd();
		slideshows = [];
		for (i in timeouts) {
			clearTimeout(timeouts[i]);
		}
		timeouts = {};

		var spots = getId('spots');
		function setupSlideshow(parent, className) {
			var
				fx,
				elements = getElementsByClassName.call(parent, className),
				index = elements.length-1,
				element,
				nextElement,
				run = function() {
					element.style.zIndex = 0;
					element = nextElement;
					if (--index < 0)
						index = elements.length-1;
					nextElement = elements[index];
					element.style.zIndex = 2;
					nextElement.style.zIndex = 1;
					lightCore.setOpacity(nextElement, 100);
					fx.start();
				};
			if (elements.length > 1) {
				element = elements[index--];
				nextElement = elements[index];
				element.style.zIndex = 1;
				nextElement.style.zIndex = 2;
				slideshows.push(fx = new secoya.fx({
					from: 100,
					to: 0,
					duration: 1,
					callback: function(x) {
						lightCore.setOpacity(element, x);
					},
					finish: function() {
						var id = setTimeout(run, 5000);
						element.style.zIndex = 1;
						nextElement.style.zIndex = 2;
						timeouts[id] = true;
						setTimeout(function(){
							delete timeouts[id];
						}, 5000);
					}
				}));
				setTimeout(run, 5000);
			}
		};
		if (spots) {
			var elements = getElementsByClassName.call(spots, 'slideshow', 'div'), elm;
			for (var i = 0; i < elements.length; i++) {
				elm = getElementsByClassName.call(elements[i], 'images', 'div');
				if (elm.length)
					setupSlideshow(elm[0], 'image');
			}
		}
	};
	slideshow();
	function calendar() {
		function click() {
			var child = this;
			do {
				child = child.nextSibling;
			} while(child && child.nodeType != 1);
			if (child) {
				if (child.className.indexOf('hidden') == -1) {
					child.className = 'child hidden';
					this.className = this.className.replace(/\s*expanded\s*/, '');
				} else {
					child.className = 'child';
					this.className += ' expanded';
				}
			}
		};
		var t = getId('contentText');
		if (t) {
			t = getElementsByClassName.call(t, 'calendar', 'table')[0];
			if (t) {
				t = t.getElementsByTagName('tr');
				for (var i = 0; i < t.length; i++) {
					if (t[i].className.indexOf('parent') != -1) {
						t[i].onclick = click;
					}
				}
			}
		}
	};

	calendar();

	var splash = (function(){
		var
			fx,
			elements = [],
			index = 0,
			element,
			nextElement,
			timeout,
			selector,
			running = !core,
			run = function(setIndex) {
				selector.childNodes[index].className = 's';
				element.style.zIndex = 0;
				element = nextElement;
				if (typeof setIndex == 'number') {
					index = setIndex;
				} else if (++index >= elements.length)
					index = 0;
				selector.childNodes[index].className = 's active';
				nextElement = elements[index];
				element.style.zIndex = 2;
				nextElement.style.zIndex = 1;
				lightCore.setOpacity(nextElement, 100);
				fx.start();
			};
		function createSelector() {
			if (selector && selector.parentNode) {
				selector.parentNode.removeChild(selector);
			}
			selector = create('div', {className: 'selector'});
			var div;
			for (var i = 0; i < elements.length; i++) {
				selector.appendChild(create('div', {
					className: 's',
					onclick: function(event) {
						clearTimeout(timeout);
						fx.resetToEnd();
						running = false;
						var s = getId('splash');
						if (s)
							s.className = 'show';
						var newIndex = parseInt(this.firstChild.nodeValue)-1;
						if (newIndex != index)
							run(newIndex);
					}
				}, null, i+1+''));
			}
			if (elements.length) {
				if (elements.length <= index)
					selector.childNodes[index].className = 's active';
				else
					selector.firstChild.className = 's active';
			}
			return selector;
		};
		return function(reloadItems) {
			var s = getId('splash');
			clearTimeout(timeout);
			if (fx && !reloadItems) {
				fx.kill();
				running = !core;
			}
			if (s) {
				elements = getElementsByClassName.call(s, 'item', 'div');
				s.appendChild(createSelector());
				if (elements.length > 1) {
					if (!reloadItems)
						index = Math.min(elements.length-1, index);
					element = elements[index];
					nextElement = elements[0];
					index = 0;
					element.style.zIndex = 1;
					nextElement.style.zIndex = 2;
					fx = new secoya.fx({
						from: 100,
						to: 0,
						duration: 1,
						callback: function(x) {
							lightCore.setOpacity(element, x);
						},
						finish: function() {
							if (running)
								timeout = setTimeout(function(){run();}, 5000);
							element.style.zIndex = 1;
							nextElement.style.zIndex = 2;
						}
					});
					if (running)
						timeout = setTimeout(function(){run();}, 5000);
				}
			}
		};
	})();

	splash();

	var autoCompleteDom;

	return {
		showMoreNews: function(link, event){
			if (event.preventDefault)
				event.preventDefault();
			event.returnValue = false;
			var parent = link.parentNode.parentNode, c = 0, i = 0, node;
			for (; i < parent.childNodes.length && c < 4; i++) {
				node = parent.childNodes[i];
				if (node.nodeType == 1 && node.className.indexOf('hidden') != -1) {
					if (c < 3) {
						node.className = node.className.replace(/\s*hidden/, '');
					}
					c++;
				}
			}
			if (c < 4) {
				parent.removeChild(link.parentNode);
			}
			return false;
		},
		calendar: calendar,
		splash: splash,
		slideshow: function() {
			if (core) {
				slideshow();
			}
		},
		autocompletefocus: (function(){
			var input;
			function removeElm(event) {
				event = event || window.event;
				var elm = event.target || event.srcElement;
				while (elm && elm != input && elm != autoCompleteDom)
					elm = elm.parentNode;
				if (!elm) {
					unregister();
					if (autoCompleteDom.parentNode)
						autoCompleteDom.parentNode.removeChild(autoCompleteDom);
				}
			};
			function unregister() {
				if (document.removeEventListener)
					document.removeEventListener('click', removeElm, false);
				else if (document.detatchEvent)
					document.detatchEvent('onclick', removeElm);
			};
			function register() {
				if (document.addEventListener)
					document.addEventListener('click', removeElm, false);
				else if (document.attachEvent)
					document.attachEvent('onclick', removeElm);
			}
			return function(elm) {
				input = elm;
				register();
				this.autocomplete(elm);
			};
		})(),
		autocomplete: (function(){
			var domElm = create('div', {className: 'autocomplete'});
			autoCompleteDom = domElm;
			var index = null;
			var useSchools = !!window.location.href.match(/[\?&]type=schools/);
			var loc = '/highscore';
			loc += useSchools ? '?type=schools&find=' : '?find=';
			function createIndex() {
				index = {};
				var lastChar = null, firstChar;
				var l = window.classes.length;
				for (var i = 0; i < l; i++) {
					if (window.ostemad)
						document.title = window.classes[i];
					firstChar = window.classes[i][1].charAt(0).toLowerCase(); // [running index][schoolname part][first char]
					if (firstChar !== lastChar) {
						if (lastChar !== null)
							index[lastChar].push(i);

						lastChar = firstChar;
						index[firstChar]= [i];
					}
				}
				index[firstChar].push(i);
			};
			function createNode(c) {
				var a = document.createElement('a');
				a.href = loc+c[useSchools?4:0];
				a.appendChild(document.createTextNode(c[1]+(useSchools?'':', ')));
				if (!useSchools)
					a.appendChild(document.createElement('em')).appendChild(document.createTextNode(c[2]));
				if (c[3])
					a.appendChild(document.createTextNode(' ('+c[3]+')'));
				return a;
			};
			return function(input) {
				var v = input.value.replace(/^\s+/, '').toLowerCase();
				if (!index)
					createIndex();
				var firstChar = v.charAt(0), c, lastSchool;
				while (domElm.firstChild)
					domElm.removeChild(domElm.lastChild);
				if (v == '')
					return;
				for (var i = index[firstChar][0]; i < index[firstChar][1]; i++) {
					c = window.classes[i];
					if (useSchools) {
						if (c[4] !== null && lastSchool !== c[4] && (c[1]+(c[3]?' ('+c[3]+')':'')).toLowerCase().indexOf(v) == 0) {
							domElm.appendChild(createNode(c));
							lastSchool = c[4];
						}
					} else if ((c[1]+', '+c[2]+(c[3]?' ('+c[3]+')':'')).toLowerCase().indexOf(v) == 0) {
						domElm.appendChild(createNode(c));
					}
				}
				if (!domElm.childNodes.length)
					domElm.appendChild(document.createTextNode('Ingen klasser matchede dine søgning.'));
				getId('contentImage').appendChild(domElm);
			};
		})(),
		toggleLogin: function(self) {
			var loginForm = document.getElementById("loginForm");
			var main = document.getElementById("main");
			
			main.appendChild(loginForm);
			var login = self.parentNode.parentNode;
			var hidden = login.className == 'login';
			var overlay = getId('loginOverlay');
			if (overlay) {
				loginForm.className = '';
				overlay.parentNode.removeChild(overlay);
			} else {
				loginForm.className = 'login_visible';
				document.body.appendChild(create('div', {
					id: 'loginOverlay',
					onclick: function() {
						ardk.toggleLogin(self);
					}
				}));
			}
		},
		selectNewsYear: function() {
			var selectedYear = (location.hash.match(/year=([0-9]+)/) || location.search.match(/year=([0-9]+)/) || [,(new Date()).getFullYear()])[1];
			var ul = document.getElementById('aac_aay_menu');
			if (ul) {
				var links = ul.getElementsByTagName('a');
				for (var i = 0; i < links.length; i++) {
					if (links[i].title == selectedYear) {
						links[i].parentNode.className = 'selected selected_normal normal';
					} else {
						links[i].parentNode.className = 'normal';
					}
				}
			}
		},
		setupSelectSchool: function(form) {
			var soundexCreated = false;
			function createSoundex() {
				if (soundexCreated)
					return;
				for (var zip in window.schools) {
					for (var i = 0; i < window.schools[zip].length; i++)
						window.schools[zip][i].soundex = soundex(window.schools[zip][i].name);
				}
				soundexCreated = true;
			};
			function selectSchool(school) {
				form.zip.value = school.zip;
				form.zip.onkeyup();
				var select = getId('schoolSelect');
				for (var i = 2; i < select.options.length; i++) {
					if (select.options[i].value == school.UID) {
						select.selectedIndex = i;
						select.options[i].selected = true;
						select.onchange();
						break;
					}
				}
			};
			var autosuggest = document.createElement('div');
			autosuggest.className = 'autosuggest';
			form.school.onkeyup = function() {
				createSoundex();
				var value = this.value.toLowerCase();
				if (value.trim() == '')
					return;
				var soundexValue = soundex(value);
				var found = [], school;
				for (var zip in window.schools) {
					for (i = 0; i < window.schools[zip].length; i++) {
						school = window.schools[zip][i];
						if ((value.length > 3 && school.name.toLowerCase().indexOf(value) == 0) || school.soundex.indexOf(soundexValue) == 0) {
							found.push(school);
						}
					}
				}

				while (autosuggest.firstChild)
					autosuggest.removeChild(autosuggest.lastChild);
				var a, click = function(event) {
					event = event || window.event;
					if (event.preventDefault)
						event.preventDefault();
					event.returnValue = false;
					return false;
				}, mousedown = function(){
					selectSchool(this.school);
					if (autosuggest.parentNode)
						autosuggest.parentNode.removeChild(autosuggest);
				};
				found.sort(function(a, b){
					var result = (b.name.toLowerCase().indexOf(value) == 0) - (a.name.toLowerCase().indexOf(value) == 0);
					if (!result) {
						if (a.name.toLowerCase() < b.name.toLowerCase()) {
							result = -1;
						} else if (a.name.toLowerCase() > b.name.toLowerCase()) {
							result = 1;
						}
					}
					return result;
				});
				for (i = 0; i < found.length; i++) {
					a = autosuggest.appendChild(document.createElement('a'));
					a.href = '#';
					a.onclick = click;
					a.onmousedown = mousedown;
					a.school = found[i];
					a.appendChild(document.createTextNode(found[i].name + ', ' + found[i].address));
				}
				if (found.length)
					this.parentNode.parentNode.appendChild(autosuggest);
				else if (autosuggest.parentNode)
					autosuggest.parentNode.removeChild(autosuggest);
			};
			form.school.onblur = function() {
				if (autosuggest.parentNode)
					autosuggest.parentNode.removeChild(autosuggest);
			};
			form.school.onfocus = function() {
				if (this.value != '') {
					this.onkeyup();
				}
			};
			form.onsubmit = function(event) {
				event = event || window.event;
				var elm = (event.target || event.srcElement).elements;
				var fail = function(elm, msg){
					alert(msg);
					elm.focus();
					return false;
				}
				if(elm['zip'].value.trim() == '') return fail(elm['zip'], 'Indtast venligst postnummer');

				var school = elm['school'];
				if(!school) school = document.getElementById('schoolSelect'); // IE 7
/*				if (!school || school.tagName.toUpperCase() == 'INPUT') {
					return fail(school, 'Vælg venligst en skole ved at søge efter postnr. eller skolens navn.\nMangler jeres skole i listen, så skriv til jmh@secoya.dk');
				}
*/
				if(school.value.trim() == '') return fail(school, 'Vælg, eller indtast, venligst skole');
				if(elm['address'].value.trim() == '') return fail(elm['address'], 'Indtast venligst adresse');
				return true;
			};
			var lastValue = form.zip.value;
			var schoolInput = form.school, replacement = schoolInput;
			form.zip.onkeyup = function() {
				var
					postal = this.value,
					area = schools[postal];
				if (area) {
					var select = document.createElement('select'), option;
					select.setAttribute('name', 'school');
					select.setAttribute('id', 'schoolSelect');
					option = document.createElement('option');
					option.value = '';
					option.appendChild(document.createTextNode('Vælg skole'));
					select.appendChild(option);
					option = document.createElement('option');
					option.value = '';
					option.appendChild(document.createTextNode('Skolen er ikke på listen'));
					option.style.fontWeight = 'bold';
					select.appendChild(option);
					for (var i = 0; i < area.length; i++) {
						option = document.createElement('option');
						option.value = area[i].UID;
						option.addr = area[i].address;
						option.appendChild(document.createTextNode(area[i].name));
						select.appendChild(option);
					}
					select.onchange = function() {
						if (this.options[this.selectedIndex].value == '') {
							var f = this.form;
							f.address.value='';
							replacement.parentNode.replaceChild(schoolInput, replacement);
							replacement = schoolInput;
							f.school.focus();
							createSoundex();
						} else {
							this.form.address.value=this.options[this.selectedIndex].addr;
						}
					};

					replacement.parentNode.replaceChild(select, replacement);
					replacement = select;
				} else if (replacement != schoolInput) {
					replacement.parentNode.replaceChild(schoolInput, replacement);
					replacement = schoolInput;
				}
			};
		},
		togglePassword: function(self) {
			var form = self.parentNode.parentNode.getElementsByTagName('form')[0];
		},
		toggleLightbox: (function() {
			var
				lightbox,
				overlay,
				className = 'hidden',
				fx = new secoya.fx({
					from: 0,
					to: 96,
					duration: 0.5,
					callback: function(x) {
						lightCore.setOpacity(overlay, x);
					},
					finish: function() {
						overlay.className = lightbox.className = className;
					}
				});
			function show() {
				className = overlay.className = 'visible';
				lightCore.setOpacity(overlay, 0);
				fx.resetToEnd();
				fx.from = 0;
				fx.to = 96;
				fx.start();
			};
			function hide() {
				className = lightbox.className = 'hidden';
				fx.resetToEnd();
				fx.to = 0;
				fx.from = 96;
				fx.start();
			};
			function visible() {
				return overlay.className == 'visible';
			};
			var lastShownElement = null;
			function decorateElement(h3) {
				var next = h3;
				do {
					next = next.nextSibling;
				} while (next && next.nodeType != 1 && next.className != 'menuitem');
				if (next) {
					h3.onclick = function() {
						if (lastShownElement)
							lastShownElement.className = 'menuitem';
						next.className = 'menuitem visible';
						lastShownElement = next;
					}
				}
			};
			function decorate() {
				var h3s = lightbox.getElementsByTagName('h3');
				for (var i = 0; i < h3s.length; i++) {
					decorateElement(h3s[i]);
				}
				return h3s;
			};
			var result = function(start) {
				lightbox = getId('lightbox');
				overlay = getId('lightboxOverlay');
				if (lightbox) {
					if (visible()) {
						hide();
					} else {
						show();
						var h3s = decorate();
						if (h3s.length) {
							if (!start || !isNumber(start))
								start = 1;
							start--;
							start = Math.max(0, start);
							start = Math.min(h3s.length-1, start);
							h3s[start].onclick();
						}
					}
				}
			};
			result.reload = decorate;
			return result;
		})()
	};
})();

function toggleLightbox(start) {
	ardk.toggleLightbox(start);
};

function showMore(){
	var items = document.getElementById('calitems');
	var cc = 0;
	for(var i = 0; i < items.childNodes.length && cc < 5; i++){
		var node = items.childNodes[i];
		if(node.className=="hidden"){
			node.className='';
			cc++;
		}
	}
	if(cc < 5){
		var item = document.getElementById('showmore');
		item.style.display='none';
	}
};
(function(){
	var l=window.onload;
	window.onload = function(){
		var form = document.forms['aizs'];
		if(form){
			form['sb'].style.display='none';
			form.onsubmit=function(){
				var fields = [
					{field:'ajal',msg:'Du skal indtaste dit navn'},
					{field:'ajam',msg:'Du skal indtaste din adresse'},
					{field:'ajao',msg:'Du skal indtaste dit telefonnummer',regex:/^[1-9][0-9]{7}$/},
					{field:'ajap',msg:'Du skal indtaste din emailadresse',regex:/^[!#$%&'*+\-\/=?^_`{|}~a-z0-9][!#$%&'*+\-\/=?^_`{|}~a-z\.0-9]*@[a-z0-9\-_æøå][a-z0-9\.\-_æøå]*\.[a-z]{2,}/i}
				];
				for(var index=0; index < fields.length; index++){
					if((form[fields[index].field].value=='') || (fields[index].regex && (!fields[index].regex.test(form[fields[index].field].value)))){
						alert(fields[index].msg);
						form[fields[index].field].focus();
						return false;
					}
				}
				for(var index=0; index<form['ajau'].length; index++){
					if((form['ajau'][index].type.toLowerCase()=='checkbox') && (!form['ajau'][index].checked)){
						alert('Du skal bekræfte betingelserne, for at deltage i konkurrencen');
						return false;
					}
				}
			};
			document.getElementById('Container2ppp').style.display='none';
			document.getElementById('Container2ppp').appendChild(secoya.htmlParser('<button type="button" id="compPrevPage">Tilbage</button>',document));
			document.getElementById('compPrevPage').onclick=function(){
				document.getElementById('Container2ppp').style.display='none';
				document.getElementById('Container1ppp').style.display='block';
				form['sb'].style.display='none';
			};
			document.getElementById('Container1ppp').appendChild(secoya.htmlParser('<button type="button" id="compNextPage">Fortsæt</button>',document));
			document.getElementById('compNextPage').onclick=function(){
				var found=false;
				for(var index=0; index < form['aizw'].length; index++){
					if(form['aizw'][index].checked) found=true;
				}
				if(!found){
					alert('Du skal vælge et svar, for at kunne deltage i konkurrencen');
					return false;
				}
				document.getElementById('Container2ppp').style.display='block';
				document.getElementById('Container1ppp').style.display='none';
				form['sb'].style.display='';
			};
		}
		l();
		//This is the ugliest hack EVER, but it makes webkit show a signupform, instead of ... well, NOT showing it. Very very weird
		setTimeout(function(){
			if(document.getElementById('contentWide')){
				document.getElementById('contentWide').style.float='none';
				document.getElementById('sidebar').style.clear='none';
				setTimeout(function(){document.getElementById('contentWide').style.float='left';document.getElementById('sidebar').style.clear='right';},10);
			}
		},10);
	}
})();
