﻿/* Singleline functions
---------------------------------------------------------------- */

function $x(d){
	return document.getElementById(d);
}

/* Toogle text
---------------------------------------------------------------- */

var field = function(){
	return {
		focus:function(f,txt){
			if(f.value==txt){
				f.value='';
			}else{
				f.select();
			}
		},
		blur:function(f,txt){
			if(f.value==''){
				f.value=txt;
			}
		}
	};
}();

/* Link function
---------------------------------------------------------------- */

var url = function(){
	return {
		href:function(url,blank){
			if(blank){
				window.open(url);
			}else{
				location.href = url;
			}
		}
	};
}();

/* Steps
---------------------------------------------------------------- */

var steps = function(){
	return {
		arrangement:function(f){
			var obj = $x('arr-step1');
			var elm = $x('arr-step2');
			var thx = $x('arr-step3');
			if(obj && elm){
				if(f=='1'){
					obj.style.display = 'block';
					elm.style.display = 'none';
					thx.style.display = 'none';
				}
				if(f=='2'){
					if(validate.arrangement()){
						obj.style.display = 'none';
						elm.style.display = 'block';
						thx.style.display = 'none';
					}
				}
				if(f=='3'){
					if(validate.arrangement()){
						obj.style.display = 'none';
						elm.style.display = 'none';
						thx.style.display = 'block';
					}
				}
			}
		},
		publica:function(f){
			var obj = $x('arr-step1');
			var elm = $x('arr-step2');
			var thx = $x('arr-step3');
			if(obj && elm){
				if(f=='1'){
					obj.style.display = 'block';
					elm.style.display = 'none';
				}
				if(f=='2'){
					if(validate.publica()){
						obj.style.display = 'none';
						elm.style.display = 'block';
					}
				}
				if(f=='3'){
					if(validate.publica()){
						obj.style.display = 'none';
						elm.style.display = 'none';
					}
				}
			}
		},
		remover:function(f){
			var obj = $x('arr-step1');
			var elm = $x('arr-step2');
			if(obj && elm){
				if(f=='1'){
					obj.style.display = 'block';
					elm.style.display = 'none';
				}
				if(f=='2'){
					obj.style.display = 'none';
					elm.style.display = 'block';
				}
			}
		},
		load:function(f,url,obs){
			if(obs=='arrangements'){
				hs.htmlExpand(f, {width:600,height:410,contentId:'arrangements-popup',objectType:'ajax'});
			}
			if(obs=='publications'){
				hs.htmlExpand(f, {width:600,height:410,contentId:'publications-popup',objectType:'ajax'});
			}
		},
		remove:function(f,url,obs){
			hs.htmlExpand(f, {width:600,height:410,contentId:'afmeld-popup',objectType:'ajax'});
		},
		goo:function(f){
			if(f){
				var tst = f.toString();
				var len = tst.length;
				if(len<10){
					var elm = library.elementposition(document.getElementById('aktivitet'+f));
					var elms = elm.split('/');
					var elmY = elms[1];
					window.scroll(0,elmY);
				}
			}
		}
	};
}();



/* Ajax <|> ajax.load('http://','ajaxdiv',true,['customfunction()','anotherfunction()']);
---------------------------------------------------------------- */

var ajax = function(){
	return {
		nocache:function(){
			var minutes = 1000 * 60;
			var hours = minutes * 60;
			var days = hours * 24;
			var years = days * 365;
			var d = new Date();
			var t = d.getTime();
			return t;
		},
		load:function(url,container,load,functions){
			var obj = $x(container);
			var loader = '<div class="loading"></div>';
			if(obj && url){
				if(load){obj.innerHTML = loader;}
				ajax.page(url,container,functions);
			}
		},
		page:function(url,container,functions){
			var _url,_no;
			if(url.indexOf("?")==-1){_no = '?~' + ajax.nocache();}else{_no = '&~' + ajax.nocache();}
			_url = url + _no;
			
			if(window.XMLHttpRequest){
				page_request = new XMLHttpRequest();
			}else if(window.ActiveXObject){
				try{
					page_request = new ActiveXObject('Msxml2.XMLHTTP');
				}catch(e){
					try{
						page_request = new ActiveXObject('Microsoft.XMLHTTP');
					}catch(e){}
				}
			}else{
				return false;
			}

			page_request.onreadystatechange = function(){
				ajax.parse(page_request,container,functions);
			}
			page_request.open('GET', _url, true);
			page_request.send(null);
		},
		parse:function(page_request,container,functions){
			if(page_request.readyState==4 && (page_request.status==200 || window.location.href.indexOf('http')==-1)){
				$x(container).innerHTML = page_request.responseText;
				ajax.completed(functions);
			}
		},
		completed:function(functions){
			// After complete functions here..
			if(functions){
				for(var i=0;i<functions.length;i++){
					try{eval(functions[i]);}catch(e){alert(e.description);}
				}
			}
		}
	};
}();

/* Dark layer
---------------------------------------------------------------- */

var darken = function(){
	return {
		create:function(){
			var dark = $x('layerdark');
			if(!dark){
				var dot = document.createElement("div");
				dot.id = 'layerdark';
				dot.style.opacity = 0.5;
				dot.style.filter = 'alpha(opacity=50)';
				dot.style.width = '100%';
				dot.style.height = '100%';
				dot.style.position = 'absolute';
				dot.style.zIndex = '1000';
				dot.style.backgroundColor = '#000000';
				dot.style.left = '0px';
				dot.style.top = '0px';
				dot.onclick = function(){darken.kill();}
				document.body.appendChild(dot);
			}
		},
		show:function(){
			darken.create();
			var dark = $x('layerdark');
			var height = document.documentElement.scrollHeight;
			if(dark){
				dark.style.height = height + 'px';
				dark.style.display = 'block';
			}
		},
		fixed:function(){
			var dark = $x('layerdark');
			var height = document.documentElement.scrollHeight;
			if(dark){
				dark.style.height = height + 'px';
			}
		},
		kill:function(){
			var dark = $x('layerdark');
			if(dark){dark.style.display = 'none';}
		}
	};
}();

/* Validation
---------------------------------------------------------------- */

var validate = function(){
	var execute = true;
	return {
		err:function(step,f){
			var obj = $x(f);
			if(obj){
				if(step=='1'){obj.style.backgroundColor = '#ff9e9e';/*setTimeout("validate.err('2','"+f+"');", 50);*/}
				if(step=='2'){obj.style.backgroundColor = '#ffc5c5';setTimeout("validate.err('3','"+f+"');", 50);}
				if(step=='3'){obj.style.backgroundColor = '#ffdfdf';setTimeout("validate.err('4','"+f+"');", 50);}
				if(step=='4'){obj.style.backgroundColor = '#fef1f1';setTimeout("validate.err('5','"+f+"');", 50);}
				if(step=='5'){obj.style.backgroundColor = '#fff';}
			}
		},
		email:function(str){
			var filter = /^[^\s@]+@[^\s@]+\.[a-z]{2,6}$/i;
			if(filter.test(str)){return true;}else{return false;}
		},
		empty:function(str){
			var filter = /^\s+$/;
			var expression;
			if(filter.test(str) || str==''){expression = false;}else{expression = true;}
			return expression;
		},
		onlynumbers:function(evt){
			var charCode = (evt.which) ? evt.which : event.keyCode;
			if(charCode > 31 && (charCode < 48 || charCode > 57)){return false;}else{return true;}
		},
		arrangement:function(){
			execute = true;
			if(!validate.empty($x('firstname').value) || $x('firstname').value == 'Fornavn *'){
				execute = false;
				validate.err('1','firstname');
			}
			if(!validate.empty($x('lastname').value) || $x('lastname').value == 'Efternavn *'){
				execute = false;
				validate.err('1','lastname');
			}
			if(!validate.empty($x('title').value) || $x('title').value == 'Titel *'){
				execute = false;
				validate.err('1','title');
			}
			if(!validate.empty($x('organisation').value) || $x('organisation').value == 'Organisation *'){
				execute = false;
				validate.err('1','organisation');
			}
			if(!validate.empty($x('address').value) || $x('address').value == 'Adresse *'){
				execute = false;
				validate.err('1','address');
			}
			if(!validate.empty($x('postal').value) || $x('postal').value == 'Postnr *'){
				execute = false;
				validate.err('1','postal');
			}
			if(!validate.empty($x('city').value) || $x('city').value == 'By *'){
				execute = false;
				validate.err('1','city');
			}
			if(!validate.empty($x('phone').value) || $x('phone').value == 'Telefon *'){
				execute = false;
				validate.err('1','phone');
			}
			if(!validate.email($x('email').value) || $x('email').value == 'Email *'){
				execute = false;
				validate.err('1','email');
			}
			return execute;
		},
		publica:function(){
			execute = true;
			if(!validate.empty($x('firstname').value) || $x('firstname').value == 'Fornavn *'){
				execute = false;
				validate.err('1','firstname');
			}
			if(!validate.empty($x('lastname').value) || $x('lastname').value == 'Efternavn *'){
				execute = false;
				validate.err('1','lastname');
			}
			if(!validate.empty($x('address').value) || $x('address').value == 'Adresse *'){
				execute = false;
				validate.err('1','address');
			}
			if(!validate.empty($x('postal').value) || $x('postal').value == 'Postnr *'){
				execute = false;
				validate.err('1','postal');
			}
			if(!validate.empty($x('city').value) || $x('city').value == 'By *'){
				execute = false;
				validate.err('1','city');
			}
			if(!validate.email($x('email').value) || $x('email').value == 'Email *'){
				execute = false;
				validate.err('1','email');
			}
			return execute;
		},
		remove:function(){
			execute = true;
			if(!validate.email($x('email').value) || $x('email').value == 'Indtast email adresse *'){
				execute = false;
				validate.err('1','email');
			}
			return execute;
		},
		newsletter:function(f){
			execute = true;
			if(!validate.email($x('email_address_id').value)){
				execute = false;
				validate.err('1','email_address_id');
			}
			if(!validate.empty($x('data_Fornavn_id').value) || $x('data_Fornavn_id').value == 'Fornavn *'){
				execute = false;
				validate.err('1','data_Fornavn_id');
			}
			if(!validate.empty($x('data_Efternavn_id').value) || $x('data_Efternavn_id').value == 'Efternavn *'){
				execute = false;
				validate.err('1','data_Efternavn_id');
			}
			return execute;
		}
	};
}();

/* Cookies
---------------------------------------------------------------- */

var cookies = function(){
	return {
		create:function(name,value,days){
			if(days){
				var date = new Date();
				date.setTime(date.getTime()+(days*24*60*60*1000));
				var expires = "; expires="+date.toGMTString();
			}
			else var expires = "";
			document.cookie = name+"="+value+expires+"; path=/";
		},
		read:function(name){
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for(var i=0;i<ca.length;i++){
				var c=ca[i];
				while(c.charAt(0)==' ') c = c.substring(1,c.length);
				if(c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length);
			}
			return null;
		},
		erase:function(name){
			cookies.create(name,"",-1);
		}
	};
}();

/* Menus
---------------------------------------------------------------- */

var menu = function(){
	return {
		download:function(f){
			var obj = $x('download');
			var dwn = $x('download-observer');
			if(obj){
				var elmp = library.elementposition(f);
				var elm = elmp.split('/');
				var elmX = parseInt(elm[0]);
				var dwnp = library.elementposition(dwn);
				var _dwn = dwnp.split('/');
				var dwnX = parseInt(_dwn[0]);
				var diff = dwnX + 964 - elmX;
				obj.style.marginLeft = elmX - dwnX + 'px';
				obj.style.width = diff + 'px';
				obj.style.display = 'block';
			}
		}
	};
}();

/* Toogler
---------------------------------------------------------------- */

var toogle = function(){
	return {
		slide:function(elm){
			var obj = $x(elm+'-link');
			var ctn = $x(elm+'-item');
			if(ctn.style.display == 'none' || ctn.style.display == ''){
				obj.className = 'down';
				slider.down(elm+'-item');
			}else{
				obj.className = '';
				slider.up(elm+'-item');
			}
		},
		subslide:function(elm){
			var obj = $x(elm+'-more-link');
			var ctn = $x(elm+'-more');
			if(ctn.style.display == 'none' || ctn.style.display == ''){
				obj.className = 'expanded';
				slider.down(elm+'-more');
			}else{
				obj.className = 'expand';
				slider.up(elm+'-more');
			}
		}
	};
}();

/* Sliding divs <|> slider.toogle('divname',['customfunction()','anotherfunction()']);
---------------------------------------------------------------- */

var slider = function(){
	var sliding = false;
	var slideAtClose = true;
	var duration = 0.6;
	var obj;
	var newHeight;
	var curHeight;
	return {
		init:function(elm){
			obj = $x(elm);
			if(obj.style.display == 'none' || obj.style.display == ''){
				obj.style.display = 'block';
				obj.style.height = parseInt(obj.offsetHeight) + 'px';
				obj.style.display = 'none';
			}else if(obj.style.display == 'block'){
				obj.style.display = 'block';
				obj.style.height = parseInt(obj.offsetHeight) + 'px';
			}
		},
		toogle:function(elm,functions){
			obj = $x(elm);
			if(obj.style.display=='none' || obj.style.display==''){
				slider.down(elm,functions);
			}else{
				slider.up(elm,functions);
			}
		},
		down:function(elm,functions){
			if(!sliding){
				slider.init(elm);
				newHeight = parseInt(obj.style.height);
				curHeight = '1';
				obj.style.height = '1px';
				obj.style.display = 'block';
				slider.slide(elm,functions);
			}
		},
		up:function(elm,functions){
			if(!sliding){
				slider.init(elm);
				curHeight = parseInt(obj.style.height);
				newHeight = '1';
				var finishTime = slider.slide(elm,functions);
				window.setTimeout("slider.hide();",finishTime);
			}
		},
		slide:function(elm,functions){
			sliding = true;
			var frames = 30 * duration;
			var tinc = (duration * 1000) / frames;
			tinc = Math.round(tinc);
			var sinc = (curHeight - newHeight) / frames;
			var frameSizes = new Array();
			for(var i=0;i<frames;i++){
				if(i < frames / 2){
					frameSizes[i] = (sinc * (i / frames)) * 4;
				} else {
					frameSizes[i] = (sinc * (1 - (i / frames))) * 4;
				}
			}
			for(var i=0;i<frames;i++){
				curHeight = curHeight - frameSizes[i];
				window.setTimeout("$x('"+elm+"').style.height = '"+Math.round(curHeight)+"px';", tinc * i);
				if((i + 1) == frames){window.setTimeout("slider.complete("+functions+");", tinc * (i + 5));}
			}
			return tinc * i;
		},
		hide:function(){
			obj.style.display = 'none';
		},
		auto:function(){
			obj.style.height = 'auto';
		},
		complete:function(functions){
			slider.auto();
			sliding = false;
			if(functions){
				for(var i=0;i<functions.length;i++){
					try{eval(functions[i]);}catch(e){alert(e.description);}
				}
			}
		}
	};
}();

/* Library
---------------------------------------------------------------- */

var library = function(){
	return {
		elementposition:function(obj){
			var curleft=curtop=0;
			if (obj.offsetParent){
				curleft=obj.offsetLeft;
				curtop=obj.offsetTop;
				while(obj=obj.offsetParent){
					curleft+=obj.offsetLeft
					curtop+=obj.offsetTop
				}
			}
			return curleft+'/'+curtop;
		},
		cursorposition:function(e){
			e = e || window.event;
		    var cursor = {x:0, y:0};
		    if(e.pageX || e.pageY){
		        cursor.x = e.pageX;
		        cursor.y = e.pageY;
		    }else{
		        var de = document.documentElement;
		        var b = document.body;
		        cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
		        cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
		    }
		    return cursor.x+'/'+cursor.y;
		},
		documentdimensions:function(){
			var myWidth = 0, myHeight = 0;
			if(typeof(window.innerWidth)=='number'){
				myWidth = window.innerWidth;
				myHeight = window.innerHeight;
			}else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)){
				myWidth = document.documentElement.clientWidth;
				myHeight = document.documentElement.clientHeight;
			}else if(document.body && (document.body.clientWidth || document.body.clientHeight)){
				myWidth = document.body.clientWidth;
				myHeight = document.body.clientHeight;
			}
			return myWidth+'/'+myHeight;
		},
		scrollposition:function(){
			var myTop = 0, myLeft = 0;
			if(document.all){
				myLeft = (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
				myTop = (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
			}else{
				myLeft = window.pageXOffset;
				myTop = window.pageYOffset
			}
			return myLeft+'/'+myTop;
		},
		whichelement:function(e){
			var targ,found=false;
			if(!e){var e=window.event;}
			if(e.target){targ=e.target;}else if(e.srcElement){targ=e.srcElement;}
			if(targ.nodeType==3){targ=targ.parentNode;}
			if(targ.className=='contextmenu'){found=true;}else{found=false;}
			return found;
		},
		keycode:function(evt){
			evt = (evt) ? evt : ((event) ? event : null);
			var evver = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null );
			var keynumber = evt.keyCode;
			if(keynumber){return keynumber;}
		}
	};
}();