Date.firstWeekDay = Date.MONDAY;
//Date.dayNames = ["Søn","Man","Tir","Ons","Tor","Fre","Lør"];
//Date.monthNames = ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"];
Date.dayNames = ["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"];
Date.monthNames = ["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"];
Date.setDefaultFormat("dd MMM yyyy, kl. hh:mm");

if (document) {
	document.useEZ();

	var StableStorage=navigator;

	var createTabbedPages=function() {
		var _this = document.createElement("SPAN");
		var _tabs = [];
		var _items = {};
		_this.openTab = null;
		
		var _createMenuItem=function(e) {
			var menuItem=document.createElement("A");
			if (e.hasClassName("sub")) menuItem.addClassName("sub");
			menuItem.href="javascript:null;";
			menuItem.innerHTML = e.firstChild.innerHTML;
			menuItem.onclick=function(e) { return _this.openPage(this); }
			return menuItem;
		}
		_this.init=function(root) {
			var tab=0;
			for (var e=root.firstChild;e;e=e.nextSibling) 
				if (document.extendElement(e).hasClassName("tab")) {
					var item = _this.appendChild(_createMenuItem(e));
					item.tabIndex=tab++;
					item.tabPage=e;
					_tabs.push(item);
					_items[e.id]=item;
				}
			
			if (!StableStorage.openTab) StableStorage.openTab=0;
			_tabs[StableStorage.openTab].onclick();
		}
		_this.openPage=function(menuItem) {
			if (typeof(menuItem)=="string") menuItem = _items[menuItem];
			if (!menuItem.tabPage) return;
			if (_this.openTab) {
				if (_this.openTab.ontabclose) _this.openTab.ontabclose();
				_this.openTab.removeClassName("show");
			}
			(_this.openTab=menuItem.tabPage).addClassName("show");
			StableStorage.openTab = menuItem.tabIndex;
			if (_this.openTab.ontabopen) _this.openTab.ontabopen();
			return false;
		}
		return _this;
	}

	var createCalendar=function(init) {
		var _this=document.createElement("SPAN");
		_this.addClassName("calendar");

		var _init = init;
		var _info = null;
		_this.expandEntry=function(entry) {
			entry.info.target.openPage(entry.info.page);
			
			for (var i=0; i<entry.info.select.length; ++i) {
				var e = document.getElementById(entry.info.select[i]);
				if (e) for (var o=e.firstChild,index=0;o;o=o.nextSibling,++index)  
					if (o._class==entry._class) { e.selectedIndex = index; break; }
			}
		}
		_this.update=function(info) {
			_info = info;
			_this.innerHTML = "";

			_this.appendChild(document.createElement("H1")).innerHTML=_info.title;
			for (var g=0;g<_info.groups.length;++g) {
				var g0=_info.groups[g];

				var _selects = [];
				var selects = _init[g0.id];
				if (selects && selects.select) for (var i=0; i<selects.select.length; ++i) {
					var e = document.getElementById(selects.select[i]);
					if (!e) continue;
					_selects.push(e);				
					if (!e.firstChild) e.appendChild(document.createElement("OPTION"));
				}					
				
				var group=_this.appendChild(document.createElement("SPAN"));
				group.addClassName("group");
				group.appendChild(document.createElement("H2")).innerHTML=g0.title;
				
				var today = Date.getToday();
				if (!_init.show) _init.show = 0;
				var showCount = _init.show;
				
				g0.classes.sort(function(a,b){return a.start-b.start;});
				for (var c=0;c<g0.classes.length;++c) {
					var _class=g0.classes[c];
					if (_class.start<today) continue;
					
					for (var i=0;i<_selects.length;++i) {
						var o = _selects[i].appendChild(document.createElement("OPTION"));
						o.value = (o._class = _class);
						o.innerHTML = _class.start.format();
					}

					if (--showCount<0) continue;
					
					var entry=group.appendChild(document.createElement("SPAN"));
					entry.addClassName("entry");				
					entry.innerHTML=_class.start.format();
					entry.onclick=function(e) { _this.expandEntry(this); }
					entry.group=g0;
					entry._class=_class;
					entry.info=selects;
				}
			}
		}
		if (init) {
			if (init.calendar) _this.update(init.calendar);
		}
		return _this;
	}

	var AjaxServer = new Server("./request.asp");
	var configuration = {};
	
	//TODO createForm...
	var Form={}
	Form.toObject=function(form) {
		var output = {};
		var stack = [form];
		while (stack.length>0) {
			var top = stack.pop();
			for (var e=top.firstChild;e;e=e.nextSibling) if (e.nodeType==1)
				stack.push(document.extendElement(e));
			if (top.name&&top.name.length>0) {
				if (top.tagName!="SELECT") output[top.name]=top.value;
				else output[top.name]=top.options[top.selectedIndex]._class;
			}
		}
		return output;
	}
	Form.clear=function(form) {
		var stack = [form];
		while (stack.length>0) {
			var top = stack.pop();
			for (var e=top.firstChild;e;e=e.nextSibling) stack.push(e);
			if (top.name&&top.name.length>0) top.value="";
		}
	}
	Form.send=function(form,type) {
		if (!form.addClassName) document.extendElement(form);
		var object = Form.toObject(form);
		object.type = type;
		AjaxServer.put(
			object,
			function(result) {
				if (type=='student')
					alert("Tak for din tilmelding.\nDin tilmelding er registreret og vi vender tilbage med mere information."); 
				else
					alert("Tak for din besked."); 				
			},
			function(error) { alert(error.message); },
			function() { form.addClassName("loading"); },
			function() { form.removeClassName("loading"); }		
		);
		return false;
	}
	Form.admin=function(form) {
		form.action="liste.asp";
		return true;
	}
	var createPrices=function(key,element) {
		element.innerHTML = evaluateText(element.innerHTML,{combi:{title:"Kombinationspakke (kat.A) MC og (kat.B)",price:16200}, bil:configuration.prices.bil, mc:configuration.prices.mc});
	}
	var initialiseTabs=function() {
		var menu=document.getElementById("menu");
		var tabbedPages = menu.appendChild(createTabbedPages());
		tabbedPages.init(document.getElementById("mainTabs"));
		return tabbedPages;
	}
	var initialise=function() {
		var menu=document.getElementById("menu");
		var tabbedPages = initialiseTabs();
		AjaxServer.get(
			{type:"config",date:new Date()},
			function(result) {
				configuration = result.object;
				configuration.calendar.element=menu.appendChild(createCalendar({
					calendar: configuration.calendar,
					show: configuration.calendar.show,
					bil: { select: ["selectCAR"], page: "page10", target: tabbedPages },
					mc:  { select: ["selectMC"],  page: "page10", target: tabbedPages }
				}));
				
				createPrices('bil',document.getElementById('prices_bil'));
				createPrices('mc',document.getElementById('prices_mc'));
			},
			function(error) { alert(error.message); },
			function() { menu.addClassName("loading"); },
			function() { menu.removeClassName("loading"); }
		);
		//*/
	}
}