var Tooltip = Class.create({
	
	initialize : function(element, content, options) {
		this.element = element;
		this.content = content;
		this.options = options || {};
		this.options.hook = this.options.hook || {tip : 'topLeft', target : 'bottomLeft'}; 
		this.options.offset = this.options.offset || {x : 10, y : 10};
		this.registerEvents();
	}, 
	
	registerEvents : function() {
		this.element.observe('mouseover', this.mouseover.bindAsEventListener(this));
		this.element.observe('mouseout' , this.mouseout.bindAsEventListener(this));
	},
	
	mouseover : function(event) {
		this.clearTimeout();
		this.timeout = setTimeout(this.showTip.bind(this), 500);
	},
	
	showTip : function() {		
		this.contentDiv = new Element('div', {'class' : 'tooltipContent'}).insert(this.content);
		Element.insert(document.body, this.contentDiv);				
		if (this.options.width) {
			this.contentDiv.setStyle({
				width: this.options.width + 'px'
			});
		}
		var elementPosition = this.element.cumulativeOffset();
		switch (this.options.hook.target) {
			case 'bottomLeft':
				var hookLeft = elementPosition.left;
				var hookTop  = elementPosition.top + this.element.getHeight();
				break;
			case 'topLeft':
				var hookLeft = elementPosition.left;
				var hookTop  = elementPosition.top;
				break;
			case 'topRight':
				var hookLeft = elementPosition.left + this.element.getWidth();
				var hookTop  = elementPosition.top;
				break;
			case 'bottomRight':
				var hookLeft = elementPosition.left + this.element.getWidth();
				var hookTop  = elementPosition.top + this.element.getHeight();
				break;
		}
		switch (this.options.hook.tip) {
			case 'bottomLeft':
				var tipLeft = hookLeft;
				var tipTop  = hookTop - this.contentDiv.getHeight();
				break;
			case 'topLeft':
				var tipLeft = hookLeft;
				var tipTop  = hookTop;
				break;
			case 'bottomRight':
				var tipLeft = hookLeft - this.contentDiv.getWidth();
				var tipTop  = hookTop - this.contentDiv.getHeight();
				break;
			case 'topRight' : 
				var tipLeft = hookLeft - this.contentDiv.getWidth();
				var tipTop  = hookTop;
				break;
			
		}
		tipLeft += this.options.offset.x;
		tipTop += this.options.offset.y; 
		this.contentDiv.setStyle({			
			left: tipLeft + 'px',
			top : tipTop + 'px'
		});
		this.shadow = new Element('div', {'class' : 'tooltipShadow'});
		Element.insert(document.body, this.shadow);
		this.shadow.setStyle({
			opacity : 0.3,
			width	: this.contentDiv.getWidth() + 'px',
			height	: this.contentDiv.getHeight() + 'px',
			left	: tipLeft + 3 + 'px',
			top		: tipTop + 3 + 'px'
		});
		this.timeout = setTimeout(this.hideTip.bind(this), 5000);
	},
	
	mouseout : function() {
		this.clearTimeout();
		this.hideTip();
	},
	
	hideTip : function() {		
		if (this.contentDiv) {
			this.contentDiv.remove();
			this.contentDiv = null;
			this.shadow.remove();
		}
	},
	
	clearTimeout: function() {
		if (this.timeout) {
			clearTimeout(this.timeout);
			this.timeout = null;
		}
	}
});

var Validator = Class.create({
	
	initialize: function(data) {		
		this.data = data;
		this.options = this.data.options || new Object();
		this.colorFields = this.options.colorFields;
		if (this.colorFields === null ||this.colorFields === undefined) {
			this.colorFields = true; // Default true
		}					
		this.autoInject = this.options.autoInject; // Default false
		if (this.options.alert) {	
			this.messagesTogether = this.options.alert.messagesTogether || false;
			this.messageHeader = this.options.alert.messageHeader || '';
		}
		Event.observe(document,'dom:loaded', this.doDomWork.bindAsEventListener(this));
	},
	
	doDomWork:function() {
		if (this.data.form) {
			this.form = $(this.data.form);
		} else {
			this.form = $(this.data.rules[Object.keys(this.data.rules)[0]].id).up('form');
		}	
		if (this.form && this.options.autoInject) {
			this.form.observe('submit', this.formSubmitted.bindAsEventListener(this));
		}
	},
	
	formSubmitted : function(event) {	
		if (event) { event.stop(); }
		if (this.validates()) {
			this.form.submit();
		}
	},
		
	validates : function() {
		this.messages = new Array();
		this.errorFields = new Array();		
		var rules = Object.values(this.data.rules);
		for (var i = 0; i < rules.length; i++) {
			if (rules[i].filter) {				
				this.processFilter(rules[i]);
			}
			this.processRule(rules[i]);
			if (rules[i].breakChainOnFailure === true && !this.fieldValidates(rules[i])) {				
				break;
			}
		} 
		if (this.colorFields) {			
			this.updateFieldBgs();	
		}
		if (this.messages.length > 0) {								
			this.doAlert();	
			return false;		
		}
		return true;
	},
	
	updateFieldBgs : function() {		
		Object.values(this.data.rules).each(function(rule) {
			var isRadio = rule.validator == 'radioSelectOne';
			var noticeId = isRadio ? rule.noticeId : rule.id;						
			if (typeof noticeId == 'string') {
				noticeId = [noticeId];
			}			
			noticeId.each(function(thisId) {					
				$(thisId).setStyle({
					backgroundColor : (this.errorFields.indexOf(rule.id) != -1 ? '#ff8' : (isRadio ? 'transparent' : ($(thisId).disabled ? '#eee' : 'white')))
				});					
			}.bind(this));
			
		}.bind(this));
	},
	
	resetFieldBgs : function() {
		Object.values(this.data.rules).each(function(rule) {
			var isRadio = rule.validator == 'radioSelectOne';
			var noticeId = isRadio ? rule.noticeId : rule.id;						
			if (typeof noticeId == 'string') {
				noticeId = [noticeId];
			}			
			noticeId.each(function(thisId) {					
				$(thisId).setStyle({
					backgroundColor : (isRadio ? 'transparent' : ($(thisId).disabled ? '#eee' : 'white'))
				});					
			}.bind(this));
			
		}.bind(this));
	},
	
	processRule : function(rule) {		
		if (!this.fieldValidates(rule)) {
			this.messages.push(rule.message);
			if (Object.isArray(rule.id)) {
				this.errorFields = this.errorFields + rule.id;
			} else {
				this.errorFields.push(rule.id);	
			}			
		}		
	},
	
	fieldValidates: function(rule) {
		if (typeof rule.validator == "object") {
			var ok = true;
			rule.validator.each(function(v) {
				if (!this.validatorValidates(rule, v)) {
					ok = false;				
				}
			}.bind(this));			
			return ok;
		} else {
			return this.validatorValidates(rule, rule.validator);
		}
	},
	
	validatorValidates : function(rule, validator) {
		if (rule.allowEmpty === true && $F(rule.id) == '') {return true; }
		switch (validator) {
			case 'radioSelectOne':
				var ok = false
				rule.id.each(function(e) {
					if ($(e).checked) { ok = true; }
				});
				return ok;
				break;					
			case 'notEmpty':
				return $F(rule.id) != '';
				break;
			case 'email':
				return /^([a-z0-9_\-\.])+\@([a-z0-9_\-\.])+\.([a-z]{2,4})$/i.test($F(rule.id));
				break;
			case 'gentag':
				return $F(rule.id) == $F(rule.gentagFeltId);
				break;
			case 'stringLengthEquals':
				return $F(rule.id).length == rule.strLen;
				break;
			case 'stringLengthMin':
				return $F(rule.id).length >= rule.strLenMin;
				break;
			case 'stringLengthBetween':
				if ($F(rule.id).length < rule.strLenMin || $F(rule.id).length > rule.strLenMax) { return false; }
				return true;				
				break;			
			case 'checked':
				return $(rule.id).checked;
				break;
			case 'stringNotEquals':
				return $F(rule.id) != rule.compareTo;
				break;
			case 'stringLengthEqualsOrEmpty':
				return $F(rule.id).length == rule.strLen || $F(rule.id).length == 0;
				break;
			case 'digits':
				var value = $F(rule.id);							
				for (var i = 0; i < value.length; i++) {					
					if ('1234567890'.indexOf(value.substr(i,1)) == -1) { return false; }
				}
				return true;
				break;
			case 'digitsStringLengthEquals':
				var value = $F(rule.id);				
				if (value.length != rule.strLen) { return false; }
				for (var i = 0; i < value.length; i++) {					
					if ('1234567890'.indexOf(value.substr(i,1)) == -1) { return false; }
				}
				return true;
				break;
			case 'date':
				var value = $F(rule.id);
				//alert(value);
				if (value.length != 10) { return false; }
				var day = parseInt(value.substring(0,2), 10);	// HUSK base 10, foranstillet 0 betyder ellers octal værdi			
				var month = parseInt(value.substring(3,5), 10) - 1; // JS regner måneder fra 0 til 11
				var year = parseInt(value.substring(6,10), 10);
				//year = year + (year < 15 ? 2000 : 1900);
				//alert(day + ', ' + month + ', ' + year);
				if (day < 0 || day > 31 || month < 0 || month > 11) { return false; }				
				var date = new Date();
				date.setYear(year); // Rækkefølgen er vigtig
				date.setDate(1); // Ellers kan man risikere at måneden skifter (31-4 bliver til 1-5)
				date.setMonth(month);
				date.setDate(day);								
				var newDay = date.getDate();
				var newMonth = date.getMonth();
				var newYear = date.getFullYear();
				//alert(newDay + ', ' + newMonth + ', ' + newYear);								
				if (day != newDay || month != newMonth || year != newYear)  { return false; }
				if (rule.dateInFuture) {
					var now = new Date();
					var nowYear = now.getFullYear();
					var nowMonth = now.getMonth();
					var nowDay = now.getDate();
					if (year < nowYear || (year == nowYear && month < nowMonth) || (year == nowYear && month == nowMonth && day < nowDay)) {return false; }
				}
				return true;
				break;
			case 'atLeastOneNotEmpty':
				var ok = false;
				rule.id.each(function(id) {
					if ($F(id) != '') {
						ok = true;
					}
				});
				return ok;
				break;
			case 'tlfDk':
				var value = $F(rule.id);
				if (value.length != 8) {return false; }
				for (var i = 0; i < value.length; i++) {					
					if ('1234567890'.indexOf(value.substr(i,1)) == -1) { return false; }
				}
				return true;
				break;
			case 'allEqual':
				return rule.id.all(function(v) { return $F(v) == $F(rule.id[0])});
				break;
		}
	},
	
	processFilters : function() {
		var rules = Object.values(this.data.rules);
		for (var i = 0; i < rules.length; i++) {
			if (rules[i].filter) {				
				this.processFilter(rules[i]);
			}
		}
	},
	
	processFilter : function(rule) {
		var filter = rule.filter;		
		var id = rule.id;	
		switch(filter)	{
			case 'date':				
				var value = $F(id);
				if (value == '') { break; }
				value = value.replace(/\./g, '-');
				value = value.replace(/\//g, '-');				
				var firstDash = value.indexOf('-');
				var secondDash = value.indexOf('-', firstDash + 1);
				if (firstDash == -1 || secondDash == -1 || firstDash == secondDash) {break; }
				var year = value.substr(secondDash + 1);
				if (year < 2000) { year = year * 1 + 2000; }
				$(id).value = stringPadLeft(value.substr(0,firstDash),2,'0') + '-' + stringPadLeft(value.substr(firstDash+1, secondDash-firstDash-1),2,'0') + '-' + year;
				break;
		}
	},
	
	doAlert : function() {
		if (this.options.callbackBeforeAlert) {
			this.options.callbackBeforeAlert();
		}
		if (this.data.alert && this.data.alert.type == 'VS_Popup') {			
			if (this.messagesTogether) {
				var text = this.messageHeader + '<ul>';
				this.messages.each(function(m){text += '<li>' + m + '</li>'; });
				text += '</ul>';
			} else {
				var text = this.messageHeader + '<br />';
				text += this.messages[0];
			}
			$(this.data.alert.messageElement).update(text);
			this.data.alert.popup.open();
		} else {
			alert(this.messages[0]);	
		}		
	}
	
});

var myMethods = {
	getClassParam : function(element, param) {				
		var result = null;
		$w($(element).className).each(function(c) {			
			if (c.startsWith(param + '_')) {				
				result = c.substring(param.length + 1);
			}
		});
		return result;
	}
} 
Element.addMethods(myMethods);

var levFelter = ['telefon','navn','adresse','postnr','by','attention','email'];

var alleVareGrupperCSS = '#hojreVaregrupper #varegruppeListe .cat1, #hojreVaregrupper #varegruppeListe .cat2';
var cat2GrupperCSS = '#hojreVaregrupper #varegruppeListe .cat2';

var mainValidator = new Validator({
	rules : {
		bestillerTelefon : {
			id 			: 'bestillerTelefon',
			validator	: 'digitsStringLengthEquals',
			strLen		: 8,
			message		: 'Indtast venligst et gyldigt dansk telefonnummer'
		},
		bestillerNavn	: {
			id			: 'bestillerNavn',
			validator	: 'notEmpty',
			message		: 'Indtast venligst dit navn'
		},
		bestillerAdresse: {
			id			: 'bestillerAdresse',
			validator	: 'notEmpty',
			message		: 'Indtast venligst din adresse'
		},
		bestillerPostnr	: {
			id			: 'bestillerPostnr',
			validator	: 'digitsStringLengthEquals',
			strLen		: 4,
			message		: 'Indtast venligst dit postnr'
		},
		bestillerBy	: {
			id			: 'bestillerBy',
			validator	: 'notEmpty',
			message		: 'Indtast venligst din by' 
		},
		bestillerEmail	: {
			id			: 'bestillerEmail',
			validator	: 'email',
			message		: 'Indtast venligst din email'
		},
		brugsdato		: {
			id			: 'brugsdato',
			filter		: 'date', // adskilt, så man kan bruge filteret separat
			validator	: 'date',
			dateInFuture: true,
			message		: 'Indtast venligst en gyldig dato'
		}
	}	
});

var dateValidator = new Validator({
	rules: {
		brugsdato : {
			id		: 'brugsdato',
			filter	: 'date'
		}
	}
});

var leveringValidator = new Validator({
	rules : {		
		leveringNavn	: {
			id			: 'leveringNavn',
			validator	: 'notEmpty',
			message		: 'Du mangler at indtaste et navn til leveringsadressen, eller fjerne fluebenet fra boksen "Anden leveringsadresse"'
		},
		leveringAdresse: {
			id			: 'leveringAdresse',
			validator	: 'notEmpty',
			message		: 'Du mangler at indtaste en anden leveringsadresse, eller fjerne fluebenet fra boksen "Anden leveringsadresse"'
		},
		leveringPostnr	: {
			id			: 'leveringPostnr',
			validator	: 'digitsStringLengthEquals',
			strLen		: 4,
			message		: 'Du mangler at indtaste et postnummer til leveringsadressen, eller fjerne fluebenet fra boksen "Anden leveringsadresse"'
		},
		leveringBy	: {
			id			: 'leveringBy',
			validator	: 'notEmpty',
			message		: 'Du mangler at indtaste byens navn til leveringsadressen, eller fjerne fluebenet fra boksen "Anden leveringsadresse"'
		}		
	},
	options : {
		callbackBeforeAlert : showLevering
	}
})

var bestilling = new Object();
var varerTotalPris = 0;

var levTemp = new Object();
levFelter.each(function(felt) {
	levTemp[felt] = '';
});

Event.observe(document, 'dom:loaded', domLoaded);
function domLoaded() {
	hojreSelect();
	$$('.hojreValgRadio').each(function(e) {
		e.observe('click', hojreSelect);
	});
	if ($('hentBtn')) {
		$('hentBtn').observe('click', hentBtnClick);
	}
	$('andenLevering').observe('click', andenLeveringClick);	
	$('afhenterSelv').observe('click', afhenterSelvClick);
	disableLevering();	
	if ($('afhentningsSted')) {
		$('afhentningsSted').observe('change', afhentningsStedChange);
	}
	$('bestillerAdresse').observe('keyup', adresseKeyup);
	$('leveringAdresse').observe('keyup', adresseKeyup);	
	$('bestillerPostnr').observe('keyup', postnrKeyup);
	$('leveringPostnr').observe('keyup', postnrKeyup);
	$('bestillerBy').observe('keyup', byKeyup);
	$('leveringBy').observe('keyup', byKeyup);
	$('bestillerTelefon').observe('keydown', bestillerTelefonKeydown);	
	$('leveringTelefon').observe('keydown', numericOnly);
	$('bestillerPostnr').observe('keydown', numericOnly);
	$('leveringPostnr').observe('keydown', numericOnly);
	$('brugsdato').observe('blur', datoBlur);
	$('kuverter').observe('keydown', numericOnly);
	$('opvask').observe('click', opvaskClick);
	$('forsikring').observe('click', forsikringClick);
	
	if (window.opvask_varenumre) {
		$$('#bestillingTotalTBL td#opvaskTD div, #bestillingTotalTBL td#opvaskIPT_TD div').each(function(div){
			div.setStyle({display:'block'});
		});
	}
	if (window.forsikringProcent) {
		$$('#bestillingTotalTBL td#forsikringTD div, #bestillingTotalTBL td#forsikringIPT_TD div').each(function(div){ 
			div.setStyle({display:'block'});
		});
	}
	
	levFelter.each(function(felt) {
		$('bestiller'+felt.capitalize()).observe('keyup', checkForCopyToLevering);
		$('bestiller'+felt.capitalize()).observe('blur', checkForCopyToLevering);
	});	
	calculateKoerselAndTotal();
	
	$$(alleVareGrupperCSS).each(function(e) {
		e.observe('click', vareGruppeClick);
	});	
	$('sendBTN').observe('click', sendBTNClick);
	$('annullerBTN').observe('click', annullerOrdreClick);
	/* Modal dialogs */
	$('curtain').observe('click', curtainClick);
	//$('modalContainer').observe('click', curtainClick);
	$('enkeltVareSletBTN').observe('click', enkeltVareSletBTNClick);
	$('enkeltVareAnnuller').observe('click', removeModal);
	$('enkeltVareCartBtn').observe('click', enkeltVareCartClick);
	$('enkeltVareAntal').observe('keydown', numericOnly);
	$('enkeltVareAntal').observe('keyup', enkeltVareAntalKeydown);
	rydVareListe();
	
	$('betingelserForm').observe('submit', betingelserFormSubmit);
	$('betingelserAnnuller').observe('click', annullerOrdreClick);
	$('betingelserTilbage').observe('click', removeModal);
	
	$('annullerMessageJa').observe('click', gotoMainWebsite);
	$('annullerMessageNej').observe('click', removeModal);
	
	$('modalMailMessageOk').observe('click', gotoMainWebsite);	
	
	$('lavBestilling').observe('click', lavBestillingClick);
	$('udenAdresseTilbage').observe('click', gotoMainWebsite);
	
	if ($('hentBtn')) {
		new Tooltip($('hentBtn'), 'Hent navn og adresse ud fra telefonnummeret');
	}
	new Tooltip($('enkeltVareCartBtn'), 'Opdater bestillingsliste');
	new Tooltip($('enkeltVareAnnuller'), 'Luk dette vindue');
	new Tooltip($('enkeltVareSletBTN'), 'Fjern denne vare fra bestillingslisten');
	new Tooltip($('betingelserAnnuller'), 'Annuller bestillingen og vend tilbage til hjemmesiden');
	new Tooltip($('betingelserTilbage'), 'Luk dette vindue');
	new Tooltip($('betingelserSubmit'), 'Accepter lejebetingelser og send bestilling');
	new Tooltip($('sendBTN'), 'Send bestillingen', {hook: {target: 'topRight', tip: 'bottomRight'}, offset: {x:0, y:-5}});
	new Tooltip($('annullerBTN'), 'Annuller bestillingen og vend tilbage til hjemmesiden', {hook: {target: 'topRight', tip: 'bottomRight'}, offset: {x:0, y:-5}});
	new Tooltip($('opvaskIPT_DIV'), 'Klik her for at bestille opvask', {hook: {target: 'topLeft', tip: 'bottomLeft'}, offset: {x:5, y:-5}} );
	new Tooltip($('opvaskDIV'), 'Klik her for at bestille opvask', {hook: {target: 'topLeft', tip: 'bottomLeft'}, offset: {x:5, y:-5}});
	new Tooltip($('koerselDIV'), 'Kørsel beregnes automatisk ud fra leveringsadressen', {hook: {target: 'topLeft', tip: 'bottomLeft'}, offset: {x:5, y:-5}});
	new Tooltip($('koerselKrDIV'), 'Kørsel beregnes automatisk ud fra leveringsadressen', {hook: {target: 'topLeft', tip: 'bottomLeft'}, offset: {x:5, y:-5}});
	new Tooltip($('koerselAmountDIV'), 'Kørsel beregnes automatisk ud fra leveringsadressen', {hook: {target: 'topLeft', tip: 'bottomLeft'}, offset: {x:5, y:-5}});
	new Tooltip($('lavBestilling'), 'Videre til bestilling', {hook: {target: 'topRight', tip: 'bottomRight'}, offset: {x:0, y:-5}});
	new Tooltip($('udenAdresseTilbage'), 'Tilbage til hjemmesiden', {hook: {target: 'topRight', tip: 'bottomRight'}, offset: {x:0, y:-5}});
	
	Event.observe(document, 'keydown', windowKeydown);	
	
	// HACK TIL AT JUSTERE LAYOUTET
	if (!window.lteIE7) {		
		$$('#bestillingTotalTBL input').each(function(ipt) {
			ipt.setStyle({
				margin: '0 5px 0 3px'
			});
		})
	}
	
	$('bestillerTelefon').focus();
}

var modalOpen = false;
var escClearsModal = true; 
var koerselPris = false;
var afstandsberegningStatus = 'klar';
var sidsteAfstandsberegningAdresse = '';
var sidsteAfstandsberegningPostnr = '';
var sidsteAfstandsberegningBy = '';

function windowKeydown(event) {
	if (modalOpen && escClearsModal && getKeyCode(event) == Event.KEY_ESC) {
		removeModal();
	}
}

function annullerOrdreClick(event) {
	showModal('annullerMessage');
	$('annullerMessageNej').focus();	
}

function gotoMainWebsite() {
	document.location = mainWebsiteUrl;
}

function lavBestillingClick() {
	$('udenAdresse').setStyle({display: 'none'});
	$('bestiltAf').setStyle({display: 'block'});
	$('knapper').setStyle({display: 'block'});
	$('udenAdresseKnapper').setStyle({display: 'none'});
}

function hentBtnClick() {
	if ($F('bestillerTelefon').length != 8) {
		alert('Indtast venligst et gyldigt telefonnummer');
		return;
	}
	$('hentBtn').disable();		
	$('hentBtn').value = 'arbejder...';
	new Ajax.Request('/ajax/adresseopslag', {
		parameters : {
			tlfnummer 	: $F('bestillerTelefon')	
		},
		onSuccess : adresseOpslagSuccess,
		onFailure : adresseOpslagFailure
	});
}

function bestillerTelefonKeydown(event) {
	numericOnly(event);
	var keyCode = getKeyCode(event);
	if ($('hentBtn') && keyCode == Event.KEY_RETURN) {
		hentBtnClick();
	}
}

function adresseOpslagSuccess(transport) {	
	$('hentBtn').enable();
	$('hentBtn').value = 'Hent adresse';
	if (!transport.responseJSON || !transport.responseJSON.success) {
		adresseOpslagFailure(transport);
		return;
	}
	if (!transport.responseJSON.svartype) {
		alert('Kunne ikke finde oplysninger om nummeret ' + $F('bestillerTelefon'));
		$('bestillerTelefon').select();
		return;
	}
	['Navn','Adresse','Postnr','By','Attention','Email'].each(function(id) {
		$('bestiller' + id).value = transport.responseJSON.kunde[id] ? transport.responseJSON.kunde[id] : ''; // IE skriver "null" hvis værdien er NULL
		$('levering' + id).value = transport.responseJSON.kunde[id] ? transport.responseJSON.kunde[id] : '';
	});	
	$('afhenterSelv').checked = false;
	$('andenLevering').checked = false;
	$('afhentningsStedSPN').setStyle({visibility: 'hidden'});
	disableLevering();	
	mainValidator.resetFieldBgs();
	leveringValidator.resetFieldBgs();
	hentAfstandFraServer();
	calculateKoerselAndTotal();
}

function adresseOpslagFailure(transport) {
	if (confirm('Der skete en fejl. Vil du se den tekniske information?')) {
		alert(transport.responseText);
	}
	$('hentBtn').enable();
	$('hentBtn').value = 'Hent adresse';
}

function datoBlur() {
	dateValidator.processFilters();
}

function getVareFromItemNr(ItemNr) {
	var dash = ItemNr.indexOf('-');
	var varegruppe = ItemNr.substring(0,dash);
	if (!varer[varegruppe]) { return false; }
	return varer[varegruppe][ItemNr];
}

function enkeltVareAntalKeydown(event) {
	var key = getKeyCode(event);
	if (Event.KEY_RETURN == key) {
		enkeltVareCartClick();
	}	
	if (Event.KEY_ESC == key) {
		removeModal();
	}
}

function enkeltVareCartClick(event) {
	bestilling[currentVare] = $F('enkeltVareAntal'); 
	opdaterBestillingsListe();
	//bestillingVisualFeedback(index);
	calculateKoerselAndTotal();
	removeModal();
}

function enkeltVareSletBTNClick() {
	delete bestilling[currentVare];
	opdaterBestillingsListe();
	//bestillingVisualFeedback(index);
	calculateKoerselAndTotal();
	removeModal();
}

var currentVare = null;
function openVareVindue(ItemNr) {
	var vare = getVareFromItemNr(ItemNr);
	showModal('enkeltVare', true);
	$('enkeltVareIMG').src = (vare['harBillede'] == "1" ? '/dbImage/'+vare['ID'] + '?maxwidth=400&maxheight=300' : '/images/nopicture.jpg');
	$('enkeltVareTekstSPN').update(vare.tekst);	
	$('enkeltVareStkPrisSPN').update(formatCurrency(vare.pris));
	$('enkeltVareTillaegsTekst').update(vare.webtekst);
	$('enkeltVareSletBTN').hide();
	if (bestilling[ItemNr] > 0) {
		$('enkeltVareAntal').value = bestilling[ItemNr];
		$('enkeltVareSletBTN').show();
	} else if ($F('kuverter')) {
		$('enkeltVareAntal').value = $F('kuverter');
	} else {
		$('enkeltVareAntal').value = '';
	}
	$('enkeltVareAntal').select();
	currentVare = ItemNr;
}

var clickRemovesModal = false;
function showModal(modal, clkRemMod) {
	modalOpen = true;		
	$('curtain').setStyle({
		display:'block',
		opacity:0.3		
	});
	$('modalContainer').setStyle({
		display:'block',
		/*width: document.viewport.getWidth() + 'px',*/
		height: document.viewport.getHeight() + 'px'
	});	
	$$('.modal').each(function(e){
		e.setStyle({display: 'none'});
	});
	$(modal).setStyle({display: 'block', opacity:1});	
	clickRemovesModal = clkRemMod;
}

function removeModal() {
	modalOpen = false;
	$$('.modal').each(function(e){
		e.setStyle({display: 'none'});
	});
	$('enkeltVareIMG').src = '/images/dummy.gif';
	$('curtain').setStyle({
		display:'none'		
	});
	$('modalContainer').setStyle({
		display:'none'		
	});
	
}

function curtainClick(event) {	
	if (clickRemovesModal) {
		removeModal();
	}
}

function cartClick(event) {		
	var element = event.element();
	var ItemNr = element.up('tr').className.substring(5);
	addVare(ItemNr);
}

function antalKeydown(event) {
	var key = getKeyCode(event);
	ItemNr = event.element().id.substring(6);
	if (Event.KEY_RETURN == key || Event.KEY_DOWN == key || (Event.KEY_TAB == key && !event.shiftKey)) {		
		addVare(ItemNr);
		if (event.element().up('tr').next('tr')) {
			event.element().up('tr').next('tr').down('input.antal').focus();
		}		
		event.stop();
	}
	if (Event.KEY_UP == key || (Event.KEY_TAB == key && event.shiftKey)) {
		addVare(ItemNr);
		if (event.element().up('tr').previous('tr')) {
			event.element().up('tr').previous('tr').down('input.antal').focus();
		}		
		event.stop();
	}
}

function addVare(ItemNr) {	
	var antal = $F('antal_'+ItemNr);	
	if (!antal && antal !== 0) return;		
	bestilling[ItemNr] = parseInt(antal);
	$('antal_'+ItemNr).value = '';
	opdaterBestillingsListe();
	//bestillingVisualFeedback(index);
	calculateKoerselAndTotal();
}

function bestillingVisualFeedback(ItemNr) {
	if ($('bestillingTR_'+ItemNr)) {		
	}
}

function opdaterBestillingsListe() {		
	$$('#bestillingTBL tr.item').each(function(e) {
		e.remove();
	});
	var tbody = $('bestillingTBL').down('tbody');		
	Object.keys(bestilling).each(function(ItemNr) {	
		if (bestilling[ItemNr] && bestilling[ItemNr] > 0) {
			var vare = getVareFromItemNr(ItemNr);	
			tbody.insert('<tr class="item" id="bestillingTR_'+ItemNr+'"><td class="tekst"><div><a href="javascript:openVareVindue(\''+ItemNr+'\');">'+vare.tekst +'</a></div></td><td class="antal"><div>'+formatInteger(bestilling[ItemNr])+'</div></td><td class="stkPris"><div>'+formatCurrency(vare.pris)+'</div></td><td class="pris"><div>'+formatCurrency(bestilling[ItemNr]*vare.pris)+'</div></td></tr>');
		}		
	});
}

function vareClick(event) {
	var ItemNr = event.element().up('tr').getClassParam('vare');
	openVareVindue(ItemNr);
}

function vareGruppeClick(event) {		
	var element = event.element();
	$$(alleVareGrupperCSS).each(function(e) {
		e.setStyle({color: 'black'});
	});
	element.setStyle({color: 'blue'});
	if (element.hasClassName('cat1')) {
		$$(cat2GrupperCSS).each(function(e) {
			e.setStyle({display: 'none'});
		});
		var e = element;
		if (e.next() && e.next().hasClassName('cat2') && (!e.next().next() || e.next().next().hasClassName('cat1'))) {
			visVaregruppe(e.next().id.substring(15));
		} else {
			while (e.next() && e.next().hasClassName('cat2')) {
				e = e.next();
				e.setStyle({display:'block'});
			}
			rydVareListe();
		}
	}
	if (element.hasClassName('cat2')) {					
		visVaregruppe(element.id.substring(15));				
	}
}

var varegruppeTooltips = [];
function visVaregruppe(varegruppe) {	
	$('vareListeTBL').setStyle({'visibility' : 'visible'});
	rydVareListe();		
	Object.keys(varer[varegruppe]).sort().each(function(ItemNr) {
		var vare = getVareFromItemNr(ItemNr);
		$('vareListeTBL').down('tbody').insert('<tr class="vare_' + vare['ItemNr'] + '"><td class="foto"><img src="' + (vare['harBillede'] == "1" ? '/dbImage/'+vare['ID'] + '?maxwidth=50&maxheight=50' : '/images/nopicture_tn.jpg')+'" alt="" class="thumb" /></td><td class="tekst">'+ vare['tekst'] + '</td><td class="stkPris">kr. ' + formatCurrency(vare['pris']) + '&nbsp;</td><td class="antal"><input type="text" class="antal" maxlength="5" id="antal_' + vare['ItemNr'] + '" /></td><td class="cart"><button type="button" class="cart"><img src="/images/cart_transparent.gif" alt="" class="cart" /></button></td></tr>');
	});
	$$('#vareListeTBL .thumb, #vareListeTBL .tekst').each(function(e) {
		e.observe('click', vareClick);
	})	
	$$('#vareListeTBL button.cart').each(function(e) {
		e.observe('click', cartClick);
	});
	$$('#vareListeTBL input.antal').each(function(e) {
		e.observe('keydown', numericOnly);
		e.observe('keydown', antalKeydown);
	});	
	varegruppeTooltips = [];
	$$('#vareListeTBL button.cart').each(function(e) {
		varegruppeTooltips.push(new Tooltip(e, 'Føj til bestilling', {hook: {target: 'bottomRight', tip: 'topRight'}, offset: {x:-5, y:10}}));
		e.observe('keydown', numericOnly);
		e.observe('keydown', antalKeydown);
	});
}

function rydVareListe() {
	varegruppeTooltips.each(function(tt) {
		delete tt;
	})
	varegruppeTooltips = [];
	$('vareListeTBL').down('tbody').update('');
};

function rydBestiller() {
	levFelter.map(function(e){return 'levering' + e.capitalize();}).concat(['anledning', 'brugsdato','kuverter']).each(function(felt) {		
		$(felt).value = '';
	});
}

function rydLevering() {
	levFelter.each(function(felt) {
		$('levering' + felt.capitalize()).value = '';		
	});
	$('andenLevering').checked = false;
	$('afhenterSelv').checked = false;	
}

function checkForCopyToLevering(event) {	
	if (!$('andenLevering').checked && !$('afhenterSelv').checked) {	
		levFelter.each(function(felt) {			
			$('levering'+felt.capitalize()).value = $F('bestiller'+felt.capitalize()); 			
		});
		calculateKoerselAndTotal();
	}			
}

function showLevering() {
	$('hojreValgLevering').checked = true;
	hojreSelect();
}

function hojreSelect() {	
	$$('.hojreValg').each(function(e) {
		e.setStyle({display: 'none'});
	});
	$$('.radioDIV').each(function(e) {
		e.setStyle({background: '#9cf'});
	})
	var valg = $('form1').serialize().toQueryParams()['hojreValg'];	
	$('hojre'+valg.capitalize()).setStyle({display: 'block'});
	$('radioDIV'+valg.capitalize()).setStyle({background: '#86b3e0'});
}

function andenLeveringClick() {
	if ($('andenLevering').checked) {
		hideAfhentAdresse();
		copyTempToLev();
		enableLevering();
		$('afhenterSelv').checked = false;
		$('afhentningsStedSPN').setStyle({visibility: 'hidden'});
	} else {
		copyLevToTemp();
		copyBestilToLev();
		disableLevering();		
	} 
	hentAfstandFraServer();
	calculateKoerselAndTotal();
}

function afhenterSelvClick() {	
	if ($('afhenterSelv').checked && !$('andenLevering').checked) {				
		showAfhentAdresse();
		if ($('afhentningsSted')) {
			$('afhentningsStedSPN').setStyle({visibility: 'visible'});
		}		
	} else if ($('afhenterSelv').checked && $('andenLevering').checked) {
		copyLevToTemp();
		showAfhentAdresse();				
		$('andenLevering').checked = false;
		if ($('afhentningsSted')) {
			$('afhentningsStedSPN').setStyle({visibility: 'visible'});
		}		
	} else if (!$('afhenterSelv').checked) {
		hideAfhentAdresse();
		copyBestilToLev();		
		disableLevering();		
		$('afhentningsStedSPN').setStyle({visibility: 'hidden'});
	}
	calculateKoerselAndTotal();
}

function disableLevering() {
	levFelter.each(function(felt) {
		$('levering'+felt.capitalize()).disabled = true;
		$('levering'+felt.capitalize()).setStyle({backgroundColor: '#eee'});
	});
}

function enableLevering() {
	levFelter.each(function(felt) {
		$('levering'+felt.capitalize()).disabled = false;
		$('levering'+felt.capitalize()).setStyle({backgroundColor: 'white'});
	});
}

function afhentningsStedChange() {
	if ($('afhenterSelv').checked) {
		showAfhentAdresse();
	}	
	calculateKoerselAndTotal();
}


function copyLevToTemp() {
	levFelter.each(function(felt) {
		//alert('levering'+felt.capitalize());
		levTemp[felt] = $F('levering'+felt.capitalize());
	});
}

function copyBestilToLev() {
	levFelter.each(function(felt) {
		$('levering'+felt.capitalize()).value = $F('bestiller'+felt.capitalize());
	});
}

function copyTempToLev() {
	levFelter.each(function(felt) {
		$('levering'+felt.capitalize()).value = levTemp[felt];
	});
}

function hideAfhentAdresse() {
	$('hojreTBL').setStyle({
		display: 'block'
	});
	$('afhentningsAdresse').setStyle({
		display: 'none'
	});
	$('leveringTitel').update('Leveres til:');
}

function showAfhentAdresse() {
	$('hojreTBL').setStyle({
		display: 'none'
	});
	$('afhentningsAdresse').setStyle({
		display: 'block'
	}).update(afhentningsSteder[afhentningsStedKanVaelges ? $F('afhentningsSted') : Object.keys(afhentningsSteder)[0]].adresse);
	$('leveringTitel').update('Afhentes:');
}

function adresseKeyup(event) {
	hentAfstandFraServer();
}

function postnrKeyup(event) {
	var element = event.element();	
	var kontekst = event.element().id.substring(0,9) == 'bestiller' ? 'bestiller' : 'levering';
	findBy(kontekst);
	hentAfstandFraServer();	
}


function findBy(kontekst) {	
	var postnr = $(kontekst + 'Postnr').value;
	if (postnumre[postnr]) {		
		$(kontekst + 'By').value = postnumre[postnr];
		if (kontekst == 'bestiller' && !$('andenLevering').checked && !$('afhenterSelv').checked) {
			$('leveringPostnr').value = $F('bestillerPostnr');
			$('leveringBy').value = $F('bestillerBy');			
		}			
	}		
	calculateKoerselAndTotal();
}

function byKeyup(event) {
	var element = event.element();
	var kontekst = event.element().id.substring(0,9) == 'bestiller' ? 'bestiller' : 'levering';
	findPostnr(kontekst);
	hentAfstandFraServer();	
}

function findPostnr(kontekst) {
	var by = $(kontekst + 'By').value.toLowerCase();
	if (acity[by]) {		
		$(kontekst + 'Postnr').value = acity[by];
		if (kontekst == 'bestiller' && !$('andenLevering').checked && !$('afhenterSelv').checked) {
			$('leveringPostnr').value = $F('bestillerPostnr');
			$('leveringBy').value = $F('bestillerBy');			
		}
	}	
	calculateKoerselAndTotal();
}

function opvaskClick() {
	if ($('opvask').checked) {	
		$('opvaskKrDIV').setStyle({visibility: 'visible'});
		$('opvaskPrisDIV').setStyle({visibility: 'visible'});
	} else {
		$('opvaskKrDIV').setStyle({visibility: 'hidden'});
		$('opvaskPrisDIV').setStyle({visibility: 'hidden'});
	}
	calculateKoerselAndTotal();
}

function forsikringClick() {
	if ($('forsikring').checked) {	
		$('forsikringKrDIV').setStyle({visibility: 'visible'});
		$('forsikringPrisDIV').setStyle({visibility: 'visible'});
	} else {
		$('forsikringKrDIV').setStyle({visibility: 'hidden'});
		$('forsikringPrisDIV').setStyle({visibility: 'hidden'});
	}
	calculateKoerselAndTotal();
}

function beregnOpvask() {		
	var opvaskPris = 0;	
	Object.keys(bestilling).each(function(ItemNr) {			
		if (ItemNr && ItemNr.length > 0) {	
			var vare = getVareFromItemNr(ItemNr);
			if (vare.varetillaeg && opvask_varenumre.indexOf(vare.varetillaeg) != -1) {
				var opvaskFaktor = vare.opvaskFaktor ? vare.opvaskFaktor : 1;
				var tillaegObj = opvaskTillaeg.find(function(opv) { return opv.ItemNr == vare.varetillaeg });								
				opvaskPris += tillaegObj.procent == 1 ? bestilling[ItemNr] * tillaegObj.pris * vare.pris / 100 : bestilling[ItemNr] * tillaegObj.pris * opvaskFaktor;
			}
		}
	});	
	$('opvaskPrisDIV').update(formatCurrency(opvaskPris));
	return opvaskPris;
}

function beregnForsikring() {
	var forsikringSum = 0;	
	Object.keys(bestilling).each(function(ItemNr) {
		var vare = getVareFromItemNr(ItemNr);
		forsikringSum += vare.pris * bestilling[ItemNr];
	});	
	var forsikringPris = forsikringSum * forsikringProcent / 100;
	$('forsikringPrisDIV').update(formatCurrency(forsikringPris));
	return forsikringPris;
}

function hentAfstandFraServer() {
	
	// Skal der overhovedet beregnes kørsel?
	if (!window.leveringKmPris || $('afhenterSelv').checked) { return; } 
	
	// Er der en forespørgsel i gang? I så fald, vent til den er færdig og kør igen.
	if (afstandsberegningStatus == 'arbejder' || afstandsberegningStatus == 'sendIgen') { 
		afstandsberegningStatus = 'sendIgen';
		return;
	}
	
	// Er der en særskilt leveringsadresse?
	var leveringAdresse = $('andenLevering').checked ? $F('leveringAdresse')	: $F('bestillerAdresse'); 
	var leveringPostnr 	= $('andenLevering').checked ? $F('leveringPostnr') 	: $F('bestillerPostnr');
	var leveringBy		= $('andenLevering').checked ? $F('leveringBy') 		: $F('bestillerBy');
	
	// Er felterne uændrede siden sidste forespørgsel?
	if (leveringAdresse == sidsteAfstandsberegningAdresse && leveringPostnr == sidsteAfstandsberegningPostnr && leveringBy == sidsteAfstandsberegningBy) { 
		return;
	}
	
	// Husk denne forespørgsel
	sidsteAfstandsberegningAdresse 	= leveringAdresse; 
	sidsteAfstandsberegningPostnr 	= leveringPostnr;
	sidsteAfstandsberegningBy 		= leveringBy; 
		
	// Forespørgsel i gang
	afstandsberegningStatus = 'arbejder'; 
	
	// Resultat ukendt
	koerselPris = false; 
	new Ajax.Request('/ajax/afstandsberegning', {
		onSuccess : beregnAfstandSuccess,
		onFailure : beregnAfstandFailure,
		parameters : {
			leveringAdresse	: leveringAdresse,
			leveringPostnr 	: leveringPostnr,
			leveringBy		: leveringBy
		}
	});
}

function beregnAfstandSuccess(transport) {
	if (afstandsberegningStatus == 'sendIgen') {
		afstandsberegningStatus = 'klar'
		hentAfstandFraServer();
		return;
	}	
	if (!transport.responseJSON) {
		beregnAfstandFailure(transport);
	}
	afstandsberegningStatus = 'klar';	
	if (transport.responseJSON.success) {						
		var result = transport.responseJSON;		
		koerselPris = result.afstand * leveringKmPris;				
	} else {
		koerselPris = false;		
	}
	calculateKoerselAndTotal();
}

function beregnAfstandFailure(transport) {
	if (afstandsberegningStatus == 'sendIgen') {
		afstandsberegningStatus = 'klar'
		hentAfstandFraServer();
		return;
	}
	afstandsberegningStatus = 'klar';
	if (confirm('Der skete en fejl under forsøget på at beregne afstand til levering. Vil du se den tekniske information?')) {
		alert(transport.responseText);
	}
}

function beregnKoersel() {
	if (window.leveringKmPris) {
		if (afstandsberegningStatus == 'klar' && koerselPris !== false) {
			$('koerselKrDIV').update('kr.');
			$('koerselAmountDIV').update(formatCurrency(koerselPris));
			$('koerselLoader').setStyle({display:'none'});
			return koerselPris; // global variabel der sættes af ajax-afstandsberegning		
		} else if (afstandsberegningStatus != 'klar'){
			$('koerselKrDIV').update('');
			$('koerselAmountDIV').update('');
			$('totalAmount').update('');
			$('koerselLoader').setStyle({display:'inline'});
			return false;
		} else {
			$('koerselKrDIV').update('kr.');
			$('koerselAmountDIV').update('???,??');
			$('totalAmount').update('???,??');
			$('koerselLoader').setStyle({display:'none'});
		}
	} else {
		$('koerselKrDIV').update('kr.');
		if (koerselPriser[$F('leveringPostnr')]) {
			var pris = koerselPriser[$F('leveringPostnr')] * 1; 			
			$('koerselAmountDIV').update(formatCurrency(pris));
			return pris;
		} else {			
			$('koerselAmountDIV').update('???,??');
			return false;
		}
	}
}

function calculateKoerselAndTotal() {
	var total = 0;
		
	if ($('opvask').checked) {		
		total += beregnOpvask();		
	} 
	if ($('forsikring').checked) {
		total += beregnForsikring();
	}
	if (!$('afhenterSelv').checked) {
		var koersel = beregnKoersel();
		if (koersel !== false) {
			total += koersel;
		} else {
			$('totalAmount').update('---,--');
			return;
		}		
	} else {
		$('koerselKrDIV').update('');
		$('koerselAmountDIV').update('afhenter');
	}	
	Object.keys(bestilling).each(function(ItemNr) {
		var vare = getVareFromItemNr(ItemNr);
		total += bestilling[ItemNr] * vare.pris;
	});	
	$('totalAmount').update(formatCurrency(total));
}

function reset() {
	bestilling = new Object();
	$('opvask').checked = false;
	$$('input[type=text]').each(function(ipt) {
		ipt.value = '';
	});
	$('beskedTA').update('');
	calculateKoerselAndTotal();
	opdaterBestillingsListe();
	rydVareListe();
	rydBestiller();
	rydLevering();	
	enableLevering();
	$('hojreValgVaregrupper').checked = true;
	hojreSelect();
	$$(alleVareGrupperCSS).each(function(e) {
		e.setStyle({color: 'black'});
	});
	$$(cat2GrupperCSS).each(function(e) {
		e.setStyle({display: 'none'});
	});
	removeModal();
}

function sendBTNClick() {	
	if (Object.values(bestilling).length == 0) {
		alert('Du har ikke valgt nogen varer');
		return;
	}
	if (!mainValidator.validates()) {
		return;
	}	
	if ($('andenLevering').checked && !leveringValidator.validates()) {
		return;
	}
	showModal('betingelserModal');
}

function betingelserFormSubmit(event) {
	event.stop();
	removeModal();
	showModal('behandlerOrdreModal');
	enableLevering();	
	new Ajax.Request('/ajax/sendOrdre', {
		parameters 	: $H($('form1').serialize(true)).merge({bestilling: $H(bestilling).toJSON()}),
		onSuccess	: sendOrdreSuccess,
		onFailure	: sendOrdreFailure
	});
	if (!$('andenLevering').checked) { disableLevering(); }
}

function sendOrdreSuccess(transport) {
	if (transport.responseText != 'success') {
		sendOrdreFailure(transport);
		return;
	}
	removeModal();
	showModal('mailMessageModal');
	$('modalMailMessageTekst').update(endText);
}

function sendOrdreFailure(transport) {
	if (transport.responseText.substring(0,18) == 'LocalConnectError_') {
		alert(transport.responseText.substring(18));
	} else if (confirm('Der skete en fejl. Vil du se den tekniske information?')) {
		alert(transport.responseText);
	}
	removeModal();
}

function imgLoaded(img) {
	if (!img.complete) { // IE
		return false;
	}	
	if (typeof img.naturalWidth	!= 'undefined' && img.naturalWidth == 0) { // Gecko
		return false;
	}	
	return true;
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+'.'+ num.substring(num.length-(4*i+3));
	}
	return (((sign)?'':'-') + num + ',' + cents);
}

function formatInteger(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+'.'+ num.substring(num.length-(4*i+3));
	}
	return (((sign)?'':'-') + num);
}

function stringPadLeft(str, width, pad) {
	str = str.toString();
	while (str.length < width) {
		str = pad + str;
	}
	return str;
}

function getKeyCode(e) {
	var iKeyCode;
	if (!e) {
		var e = window.event;
	}
	if (e.keyCode) {
		iKeyCode = e.keyCode;
	} else {
		if (e.which) {
			iKeyCode = e.which;
		}
	}
	return iKeyCode;
}

function numericOnly(e) {
	var iKeyCode = getKeyCode(e);	
	switch(iKeyCode) {
		case 8:
		case 9:
		case 37:
		case 38:
		case 39:
		case 40:
		case 46:
			break;
		case 48:
		case 49:
		case 50:
		case 51:
		case 52:
		case 53:
		case 54:
		case 55:
		case 56:
		case 57:
			if (e.shiftKey || e.altKey){
				e.stop();
				return;
			}
			break;
		case 96:
		case 97:
		case 98:
		case 99:
		case 100:
		case 101:
		case 102:
		case 103:
		case 104:
		case 105:
			//return correct numeric from keypad
			return iKeyCode - 48; break;
		case 110:
		case 190:
			//NOT supporting decimal points
			e.stop();
			break;
		default: 
			e.stop();
			return;
	}
}

var postnumre = {
    "1050" : "Kbh. K", 
    "1051" : "Kbh. K", 
    "1052" : "Kbh. K", 
    "1053" : "Kbh. K", 
    "1054" : "Kbh. K", 
    "1055" : "Kbh. K", 
    "1056" : "Kbh. K", 
    "1057" : "Kbh. K", 
    "1058" : "Kbh. K", 
    "1059" : "Kbh. K", 
    "1060" : "Kbh. K", 
    "1061" : "Kbh. K", 
    "1062" : "Kbh. K", 
    "1063" : "Kbh. K", 
    "1064" : "Kbh. K", 
    "1065" : "Kbh. K", 
    "1066" : "Kbh. K", 
    "1067" : "Kbh. K", 
    "1068" : "Kbh. K", 
    "1069" : "Kbh. K", 
    "1070" : "Kbh. K", 
    "1071" : "Kbh. K", 
    "1072" : "Kbh. K", 
    "1073" : "Kbh. K", 
    "1074" : "Kbh. K", 
    "1100" : "Kbh. K", 
    "1101" : "Kbh. K", 
    "1102" : "Kbh. K", 
    "1103" : "Kbh. K", 
    "1104" : "Kbh. K", 
    "1105" : "Kbh. K", 
    "1106" : "Kbh. K", 
    "1107" : "Kbh. K", 
    "1110" : "Kbh. K", 
    "1111" : "Kbh. K", 
    "1112" : "Kbh. K", 
    "1113" : "Kbh. K", 
    "1114" : "Kbh. K", 
    "1115" : "Kbh. K", 
    "1116" : "Kbh. K", 
    "1117" : "Kbh. K", 
    "1118" : "Kbh. K", 
    "1119" : "Kbh. K", 
    "1120" : "Kbh. K", 
    "1121" : "Kbh. K", 
    "1122" : "Kbh. K", 
    "1123" : "Kbh. K", 
    "1124" : "Kbh. K", 
    "1125" : "Kbh. K", 
    "1126" : "Kbh. K", 
    "1127" : "Kbh. K", 
    "1128" : "Kbh. K", 
    "1129" : "Kbh. K", 
    "1130" : "Kbh. K", 
    "1131" : "Kbh. K", 
    "1150" : "Kbh. K", 
    "1151" : "Kbh. K", 
    "1152" : "Kbh. K", 
    "1153" : "Kbh. K", 
    "1154" : "Kbh. K", 
    "1155" : "Kbh. K", 
    "1156" : "Kbh. K", 
    "1157" : "Kbh. K", 
    "1158" : "Kbh. K", 
    "1159" : "Kbh. K", 
    "1160" : "Kbh. K", 
    "1161" : "Kbh. K", 
    "1162" : "Kbh. K", 
    "1163" : "Kbh. K", 
    "1164" : "Kbh. K", 
    "1165" : "Kbh. K", 
    "1166" : "Kbh. K", 
    "1167" : "Kbh. K", 
    "1168" : "Kbh. K", 
    "1169" : "Kbh. K", 
    "1170" : "Kbh. K", 
    "1171" : "Kbh. K", 
    "1172" : "Kbh. K", 
    "1173" : "Kbh. K", 
    "1174" : "Kbh. K", 
    "1175" : "Kbh. K", 
    "1200" : "Kbh. K", 
    "1201" : "Kbh. K", 
    "1202" : "Kbh. K", 
    "1203" : "Kbh. K", 
    "1204" : "Kbh. K", 
    "1205" : "Kbh. K", 
    "1206" : "Kbh. K", 
    "1207" : "Kbh. K", 
    "1208" : "Kbh. K", 
    "1209" : "Kbh. K", 
    "1210" : "Kbh. K", 
    "1211" : "Kbh. K", 
    "1212" : "Kbh. K", 
    "1213" : "Kbh. K", 
    "1214" : "Kbh. K", 
    "1215" : "Kbh. K", 
    "1216" : "Kbh. K", 
    "1217" : "Kbh. K", 
    "1218" : "Kbh. K", 
    "1219" : "Kbh. K", 
    "1220" : "Kbh. K", 
    "1221" : "Kbh. K", 
    "1250" : "Kbh. K", 
    "1251" : "Kbh. K", 
    "1252" : "Kbh. K", 
    "1253" : "Kbh. K", 
    "1254" : "Kbh. K", 
    "1255" : "Kbh. K", 
    "1256" : "Kbh. K", 
    "1257" : "Kbh. K", 
    "1258" : "Kbh. K", 
    "1259" : "Kbh. K", 
    "1260" : "Kbh. K", 
    "1261" : "Kbh. K", 
    "1262" : "Kbh. K", 
    "1263" : "Kbh. K", 
    "1264" : "Kbh. K", 
    "1265" : "Kbh. K", 
    "1266" : "Kbh. K", 
    "1267" : "Kbh. K", 
    "1268" : "Kbh. K", 
    "1270" : "Kbh. K", 
    "1271" : "Kbh. K", 
    "1300" : "Kbh. K", 
    "1301" : "Kbh. K", 
    "1302" : "Kbh. K", 
    "1303" : "Kbh. K", 
    "1304" : "Kbh. K", 
    "1305" : "Kbh. K", 
    "1306" : "Kbh. K", 
    "1307" : "Kbh. K", 
    "1308" : "Kbh. K", 
    "1309" : "Kbh. K", 
    "1310" : "Kbh. K", 
    "1311" : "Kbh. K", 
    "1312" : "Kbh. K", 
    "1313" : "Kbh. K", 
    "1314" : "Kbh. K", 
    "1315" : "Kbh. K", 
    "1316" : "Kbh. K", 
    "1317" : "Kbh. K", 
    "1318" : "Kbh. K", 
    "1319" : "Kbh. K", 
    "1320" : "Kbh. K", 
    "1321" : "Kbh. K", 
    "1322" : "Kbh. K", 
    "1323" : "Kbh. K", 
    "1324" : "Kbh. K", 
    "1325" : "Kbh. K", 
    "1326" : "Kbh. K", 
    "1327" : "Kbh. K", 
    "1328" : "Kbh. K", 
    "1329" : "Kbh. K", 
    "1350" : "Kbh. K", 
    "1352" : "Kbh. K", 
    "1353" : "Kbh. K", 
    "1354" : "Kbh. K", 
    "1355" : "Kbh. K", 
    "1356" : "Kbh. K", 
    "1357" : "Kbh. K", 
    "1358" : "Kbh. K", 
    "1359" : "Kbh. K", 
    "1360" : "Kbh. K", 
    "1361" : "Kbh. K", 
    "1362" : "Kbh. K", 
    "1363" : "Kbh. K", 
    "1364" : "Kbh. K", 
    "1365" : "Kbh. K", 
    "1366" : "Kbh. K", 
    "1367" : "Kbh. K", 
    "1368" : "Kbh. K", 
    "1369" : "Kbh. K", 
    "1370" : "Kbh. K", 
    "1371" : "Kbh. K", 
    "1400" : "Kbh. K", 
    "1401" : "Kbh. K", 
    "1402" : "Kbh. K", 
    "1403" : "Kbh. K", 
    "1404" : "Kbh. K", 
    "1405" : "Kbh. K", 
    "1406" : "Kbh. K", 
    "1407" : "Kbh. K", 
    "1408" : "Kbh. K", 
    "1409" : "Kbh. K", 
    "1410" : "Kbh. K", 
    "1411" : "Kbh. K", 
    "1412" : "Kbh. K", 
    "1413" : "Kbh. K", 
    "1414" : "Kbh. K", 
    "1415" : "Kbh. K", 
    "1416" : "Kbh. K", 
    "1417" : "Kbh. K", 
    "1418" : "Kbh. K", 
    "1419" : "Kbh. K", 
    "1420" : "Kbh. K", 
    "1421" : "Kbh. K", 
    "1422" : "Kbh. K", 
    "1423" : "Kbh. K", 
    "1424" : "Kbh. K", 
    "1425" : "Kbh. K", 
    "1426" : "Kbh. K", 
    "1427" : "Kbh. K", 
    "1428" : "Kbh. K", 
    "1429" : "Kbh. K", 
    "1430" : "Kbh. K", 
    "1431" : "Kbh. K", 
    "1432" : "Kbh. K", 
    "1433" : "Kbh. K", 
    "1450" : "Kbh. K", 
    "1451" : "Kbh. K", 
    "1452" : "Kbh. K", 
    "1453" : "Kbh. K", 
    "1454" : "Kbh. K", 
    "1455" : "Kbh. K", 
    "1456" : "Kbh. K", 
    "1457" : "Kbh. K", 
    "1458" : "Kbh. K", 
    "1459" : "Kbh. K", 
    "1460" : "Kbh. K", 
    "1461" : "Kbh. K", 
    "1462" : "Kbh. K", 
    "1463" : "Kbh. K", 
    "1464" : "Kbh. K", 
    "1465" : "Kbh. K", 
    "1466" : "Kbh. K", 
    "1467" : "Kbh. K", 
    "1468" : "Kbh. K", 
    "1470" : "Kbh. K", 
    "1471" : "Kbh. K", 
    "1472" : "Kbh. K", 
    "1473" : "Kbh. K", 
    "1550" : "Kbh. V", 
    "1551" : "Kbh. V", 
    "1552" : "Kbh. V", 
    "1553" : "Kbh. V", 
    "1554" : "Kbh. V", 
    "1555" : "Kbh. V", 
    "1556" : "Kbh. V", 
    "1557" : "Kbh. V", 
    "1558" : "Kbh. V", 
    "1559" : "Kbh. V", 
    "1560" : "Kbh. V", 
    "1561" : "Kbh. V", 
    "1562" : "Kbh. V", 
    "1563" : "Kbh. V", 
    "1564" : "Kbh. V", 
    "1567" : "Kbh. V", 
    "1568" : "Kbh. V", 
    "1569" : "Kbh. V", 
    "1570" : "Kbh. V", 
    "1571" : "Kbh. V", 
    "1572" : "Kbh. V", 
    "1573" : "Kbh. V", 
    "1574" : "Kbh. V", 
    "1575" : "Kbh. V", 
    "1576" : "Kbh. V", 
    "1577" : "Kbh. V", 
    "1600" : "Kbh. V", 
    "1601" : "Kbh. V", 
    "1602" : "Kbh. V", 
    "1603" : "Kbh. V", 
    "1604" : "Kbh. V", 
    "1605" : "Kbh. V", 
    "1606" : "Kbh. V", 
    "1607" : "Kbh. V", 
    "1608" : "Kbh. V", 
    "1609" : "Kbh. V", 
    "1610" : "Kbh. V", 
    "1611" : "Kbh. V", 
    "1612" : "Kbh. V", 
    "1613" : "Kbh. V", 
    "1614" : "Kbh. V", 
    "1615" : "Kbh. V", 
    "1616" : "Kbh. V", 
    "1617" : "Kbh. V", 
    "1618" : "Kbh. V", 
    "1619" : "Kbh. V", 
    "1620" : "Kbh. V", 
    "1621" : "Kbh. V", 
    "1622" : "Kbh. V", 
    "1623" : "Kbh. V", 
    "1624" : "Kbh. V", 
    "1631" : "Kbh. K", 
    "1632" : "Kbh. V", 
    "1633" : "Kbh. V", 
    "1634" : "Kbh. V", 
    "1635" : "Kbh. V", 
    "1650" : "Kbh. V", 
    "1651" : "Kbh. V", 
    "1652" : "Kbh. V", 
    "1653" : "Kbh. V", 
    "1654" : "Kbh. V", 
    "1656" : "Kbh. V", 
    "1657" : "Kbh. V", 
    "1658" : "Kbh. V", 
    "1659" : "Kbh. V", 
    "1660" : "Kbh. V", 
    "1661" : "Kbh. V", 
    "1662" : "Kbh. V", 
    "1663" : "Kbh. V", 
    "1664" : "Kbh. V", 
    "1665" : "Kbh. V", 
    "1666" : "Kbh. V", 
    "1667" : "Kbh. V", 
    "1668" : "Kbh. V", 
    "1669" : "Kbh. V", 
    "1670" : "Kbh. V", 
    "1671" : "Kbh. V", 
    "1672" : "Kbh. V", 
    "1673" : "Kbh. V", 
    "1674" : "Kbh. V", 
    "1675" : "Kbh. V", 
    "1676" : "Kbh. V", 
    "1677" : "Kbh. V", 
    "1699" : "Kbh. V", 
    "1700" : "Kbh. V", 
    "1701" : "Kbh. V", 
    "1702" : "Kbh. V", 
    "1703" : "Kbh. V", 
    "1704" : "Kbh. V", 
    "1705" : "Kbh. V", 
    "1706" : "Kbh. V", 
    "1707" : "Kbh. V", 
    "1708" : "Kbh. V", 
    "1709" : "Kbh. V", 
    "1710" : "Kbh. V", 
    "1711" : "Kbh. V", 
    "1712" : "Kbh. V", 
    "1713" : "Kbh. V", 
    "1714" : "Kbh. V", 
    "1715" : "Kbh. V", 
    "1716" : "Kbh. V", 
    "1717" : "Kbh. V", 
    "1718" : "Kbh. V", 
    "1719" : "Kbh. V", 
    "1720" : "Kbh. V", 
    "1721" : "Kbh. V", 
    "1722" : "Kbh. V", 
    "1723" : "Kbh. V", 
    "1724" : "Kbh. V", 
    "1725" : "Kbh. V", 
    "1726" : "Kbh. V", 
    "1727" : "Kbh. V", 
    "1728" : "Kbh. V", 
    "1729" : "Kbh. V", 
    "1730" : "Kbh. V", 
    "1731" : "Kbh. V", 
    "1732" : "Kbh. V", 
    "1733" : "Kbh. V", 
    "1734" : "Kbh. V", 
    "1735" : "Kbh. V", 
    "1736" : "Kbh. V", 
    "1737" : "Kbh. V", 
    "1738" : "Kbh. V", 
    "1739" : "Kbh. V", 
    "1748" : "Kbh. V", 
    "1749" : "Kbh. V", 
    "1750" : "Kbh. V", 
    "1751" : "Kbh. V", 
    "1752" : "Kbh. V", 
    "1753" : "Kbh. V", 
    "1754" : "Kbh. V", 
    "1755" : "Kbh. V", 
    "1756" : "Kbh. V", 
    "1757" : "Kbh. V", 
    "1758" : "Kbh. V", 
    "1759" : "Kbh. V", 
    "1760" : "Kbh. V", 
    "1761" : "Kbh. V", 
    "1762" : "Kbh. V", 
    "1763" : "Kbh. V", 
    "1764" : "Kbh. V", 
    "1765" : "Kbh. V", 
    "1766" : "Kbh. V", 
    "1770" : "Kbh. V", 
    "1771" : "Kbh. V", 
    "1772" : "Kbh. V", 
    "1773" : "Kbh. V", 
    "1774" : "Kbh. V", 
    "1775" : "Kbh. V", 
    "1776" : "Kbh. V", 
    "1777" : "Kbh. V", 
    "1778" : "Kbh. V", 
    "1800" : "Frb. C", 
    "1801" : "Frb. C", 
    "1802" : "Frb. C", 
    "1803" : "Frb. C", 
    "1804" : "Frb. C", 
    "1805" : "Frb. C", 
    "1806" : "Frb. C", 
    "1807" : "Frb. C", 
    "1808" : "Frb. C", 
    "1809" : "Frb. C", 
    "1810" : "Frb. C", 
    "1811" : "Frb. C", 
    "1812" : "Frb. C", 
    "1813" : "Frb. C", 
    "1814" : "Frb. C", 
    "1815" : "Frb. C", 
    "1816" : "Frb. C", 
    "1817" : "Frb. C", 
    "1818" : "Frb. C", 
    "1819" : "Frb. C", 
    "1820" : "Frb. C", 
    "1822" : "Frb. C", 
    "1823" : "Frb. C", 
    "1824" : "Frb. C", 
    "1825" : "Frb. C", 
    "1826" : "Frb. C", 
    "1827" : "Frb. C", 
    "1828" : "Frb. C", 
    "1829" : "Frb. C", 
    "1850" : "Frb. C", 
    "1851" : "Frb. C", 
    "1852" : "Frb. C", 
    "1853" : "Frb. C", 
    "1854" : "Frb. C", 
    "1855" : "Frb. C", 
    "1856" : "Frb. C", 
    "1857" : "Frb. C", 
    "1860" : "Frb. C", 
    "1861" : "Frb. C", 
    "1862" : "Frb. C", 
    "1863" : "Frb. C", 
    "1864" : "Frb. C", 
    "1865" : "Frb. C", 
    "1866" : "Frb. C", 
    "1867" : "Frb. C", 
    "1868" : "Frb. C", 
    "1870" : "Frb. C", 
    "1871" : "Frb. C", 
    "1872" : "Frb. C", 
    "1873" : "Frb. C", 
    "1874" : "Frb. C", 
    "1875" : "Frb. C", 
    "1876" : "Frb. C", 
    "1877" : "Frb  C", 
    "1878" : "Frb. C", 
    "1879" : "Frb. C", 
    "1900" : "Frb. C", 
    "1901" : "Frb. C", 
    "1902" : "Frb. C", 
    "1903" : "Frb. C", 
    "1904" : "Frb. C", 
    "1905" : "Frb. C", 
    "1906" : "Frb. C", 
    "1908" : "Frb. C", 
    "1909" : "Frb. C", 
    "1910" : "Frb. C", 
    "1911" : "Frb. C", 
    "1912" : "Frb. C", 
    "1913" : "Frb. C", 
    "1914" : "Frb. C", 
    "1915" : "Frb. C", 
    "1916" : "Frb. C", 
    "1917" : "Frb. C", 
    "1918" : "Frb. C", 
    "1920" : "Frb. C", 
    "1921" : "Frb. C", 
    "1922" : "Frb. C", 
    "1923" : "Frb. C", 
    "1924" : "Frb. C", 
    "1925" : "Frb. C", 
    "1926" : "Frb. C", 
    "1927" : "Frb. C", 
    "1928" : "Frb. C", 
    "1950" : "Frb. C", 
    "1951" : "Frb. C", 
    "1952" : "Frb. C", 
    "1953" : "Frb. C", 
    "1954" : "Frb. C", 
    "1955" : "Frb. C", 
    "1956" : "Frb. C", 
    "1957" : "Frb. C", 
    "1958" : "Frb. C", 
    "1959" : "Frb. C", 
    "1960" : "Frb. C", 
    "1961" : "Frb. C", 
    "1962" : "Frb. C", 
    "1963" : "Frb. C", 
    "1964" : "Frb. C", 
    "1965" : "Frb. C", 
    "1966" : "Frb. C", 
    "1967" : "Frb. C", 
    "1970" : "Frb. C", 
    "1971" : "Frb. C", 
    "1972" : "Frb. C", 
    "1973" : "Frb. C", 
    "1974" : "Frb. C", 
    "2000" : "Frederiksberg", 
    "2100" : "København Ø", 
    "2200" : "København N", 
    "2300" : "København S", 
    "2400" : "København NV", 
    "2450" : "København SV", 
    "2500" : "Valby", 
    "2600" : "Glostrup", 
    "2605" : "Brøndby", 
    "2610" : "Rødovre", 
    "2620" : "Albertslund", 
    "2625" : "Vallensbæk", 
    "2630" : "Taastrup", 
    "2635" : "Ishøj", 
    "2640" : "Hedehusene", 
    "2650" : "Hvidovre", 
    "2660" : "Brøndby Strand", 
    "2665" : "Vallensbæk Strand", 
    "2670" : "Grave", 
    "2680" : "Solrød Strand", 
    "2690" : "Karlslunde", 
    "2700" : "Brønshøj", 
    "2720" : "Vanløse", 
    "2730" : "Herlev", 
    "2740" : "Skovlunde", 
    "2750" : "Ballerup", 
    "2760" : "Måløv", 
    "2765" : "Smørum", 
    "2770" : "Kastrup", 
    "2791" : "Dragør", 
    "2800" : "Lyngby", 
    "2820" : "Gentofte", 
    "2830" : "Virum", 
    "2840" : "Holte", 
    "2850" : "Nærum", 
    "2860" : "Søborg", 
    "2880" : "Bagsværd", 
    "2900" : "Hellerup", 
    "2920" : "Charlottenlund", 
    "2930" : "Klampenborg", 
    "2942" : "skodsborg", 
    "2950" : "Vedbæk", 
    "2960" : "Rungsted Kyst", 
    "2970" : "Hørsholm", 
    "2980" : "Kokkedal", 
    "2990" : "Nivå", 
    "3000" : "Helsingør", 
    "3050" : "Humlebæk", 
    "3060" : "Espergærde", 
    "3070" : "Snekkersten", 
    "3080" : "Tikøb", 
    "3100" : "Hornbæk", 
    "3120" : "Dronningmølle", 
    "3140" : "Ålsgårde", 
    "3150" : "Hellebæk", 
    "3200" : "Helsinge", 
    "3210" : "Vejby", 
    "3220" : "Tisvildeleje", 
    "3230" : "Græsted", 
    "3250" : "Gilleleje", 
    "3300" : "Frederiksværk", 
    "3310" : "Ølsted", 
    "3320" : "Skævinge", 
    "3330" : "Gørløse", 
    "3360" : "Liseleje", 
    "3370" : "Melby", 
    "3390" : "Hundested", 
    "3400" : "Hillerød", 
    "3450" : "Allerød", 
    "3460" : "Birkerød", 
    "3480" : "Fredensborg", 
    "3490" : "Kvistgård", 
    "3500" : "Værløse", 
    "3520" : "Farum", 
    "3540" : "Lynge", 
    "3550" : "Slangerup", 
    "3600" : "Frederikssund", 
    "3630" : "Jægerspris", 
    "3650" : "Ølstykke", 
    "3660" : "Stenløse", 
    "3670" : "Veksø Sjælland", 
    "3700" : "Rønne", 
    "3720" : "Aakirkrby", 
    "3730" : "Nexø", 
    "3740" : "Svaneke", 
    "3751" : "Østermarie", 
    "3760" : "Gudhjem", 
    "3770" : "Allinge", 
    "3782" : "Klemensker", 
    "3790" : "Hasle", 
    "4000" : "Roskilde", 
    "4040" : "Jyllinge", 
    "4050" : "Skibby", 
    "4060" : "Kirke Såby", 
    "4070" : "Kirke Hyllinge", 
    "4100" : "Ringsted", 
    "4130" : "Viby Sjælland", 
    "4140" : "Borup", 
    "4160" : "Herlufmagle", 
    "4171" : "Glumsø", 
    "4173" : "Fjenneslev", 
    "4174" : "Jystrup Midtsj.", 
    "4180" : "Sorø", 
    "4190" : "Munke Bjergby", 
    "4200" : "Slagelse", 
    "4220" : "Korsør", 
    "4230" : "Skælskør", 
    "4241" : "Vemmelev", 
    "4242" : "Boeslunde", 
    "4243" : "Rude", 
    "4250" : "Fuglebjerg", 
    "4261" : "Dalmose", 
    "4262" : "Sandved", 
    "4270" : "Høng", 
    "4281" : "Gørlev", 
    "4291" : "Ruds Vedby", 
    "4293" : "Dianalund", 
    "4295" : "Stenlille", 
    "4296" : "Nyrup", 
    "4300" : "Holbæk", 
    "4320" : "Lejre", 
    "4330" : "Hvalsø", 
    "4340" : "Tølløse", 
    "4350" : "Ugerløse", 
    "4360" : "Kirke Eskilstrup", 
    "4370" : "Store Merløse", 
    "4390" : "Vipperød", 
    "4400" : "Kalundborg", 
    "4420" : "Regstrup", 
    "4440" : "Mørkøv", 
    "4450" : "Jyderup", 
    "4460" : "Snertinge", 
    "4470" : "Svebølle", 
    "4480" : "Store Fuglede", 
    "4490" : "Jerslev Sj.", 
    "4500" : "Nykøbing Sjælland", 
    "4520" : "Svinninge", 
    "4532" : "Gislinge", 
    "4534" : "Hørve", 
    "4540" : "Fårevejle", 
    "4550" : "Asnæs", 
    "4560" : "Vig", 
    "4571" : "Gravinge", 
    "4572" : "Nørre Asmindrup", 
    "4573" : "Højby", 
    "4581" : "Rørvig", 
    "4583" : "Sjællands Odde", 
    "4591" : "Føllenslev", 
    "4592" : "Sejerø", 
    "4593" : "Eskeblerg", 
    "4600" : "Køge", 
    "4621" : "Gadstrup", 
    "4622" : "Havdrup", 
    "4623" : "Lille Skensved", 
    "4632" : "Bjæverskov", 
    "4640" : "Fakse", 
    "4652" : "Hårlev", 
    "4654" : "Fakse Ladeplads", 
    "4660" : "Store Heddinge", 
    "4671" : "Strøby", 
    "4672" : "Klippinge", 
    "4673" : "Rødvig Stevns", 
    "4681" : "Herfølge", 
    "4682" : "Tureby", 
    "4683" : "Rønnede", 
    "4684" : "Holme-Olstrup", 
    "4690" : "Haslev", 
    "4700" : "Næstved", 
    "4720" : "Præstø", 
    "4733" : "Tappernøje", 
    "4735" : "Mern", 
    "4736" : "Karrebæksminde", 
    "4750" : "Lundby", 
    "4760" : "Vordingborg", 
    "4771" : "Kalvehave", 
    "4772" : "Landebæk", 
    "4773" : "Stensved", 
    "4780" : "Stege", 
    "4791" : "Borre", 
    "4792" : "Askeby", 
    "4793" : "Bogø By", 
    "4800" : "Nykøbing F", 
    "4840" : "Nørre Alslev", 
    "4850" : "Stubbekøbing", 
    "4862" : "Guldborg", 
    "4863" : "Eskilstrup", 
    "4871" : "Horbelev", 
    "4872" : "Idestrup", 
    "4873" : "Væggerløse", 
    "4874" : "Gedser", 
    "4880" : "Nysted", 
    "4891" : "Toreby L", 
    "4894" : "Øster Ulslev", 
    "4895" : "Errindlev", 
    "4900" : "Nakskov", 
    "4912" : "Harpelunde", 
    "4913" : "Horslunde", 
    "4920" : "Søllested", 
    "4930" : "Maribo", 
    "4941" : "Bandholm", 
    "4943" : "Torrig L", 
    "4944" : "Fejø", 
    "4951" : "Nørreballe", 
    "4952" : "Stokkemarke", 
    "4953" : "Karise", 
    "4960" : "Holeby", 
    "4970" : "Rødby", 
    "4983" : "Dannemare", 
    "4990" : "Sakskøbing", 
    "5000" : "Odense C", 
    "5100" : "Odense C", 
    "5200" : "Odense V", 
    "5210" : "Odense NV", 
    "5220" : "Odense SØ", 
    "5230" : "Odense M", 
    "5240" : "Odense Nø", 
    "5250" : "Odense SV", 
    "5260" : "Odense S", 
    "5270" : "Odense N", 
    "5290" : "Marslev", 
    "5300" : "Kerteminde", 
    "5320" : "Agedrup", 
    "5330" : "Munkeby", 
    "5350" : "Rynkeby", 
    "5370" : "Mesinge", 
    "5380" : "Dalby", 
    "5390" : "Martofte", 
    "5400" : "Bogense", 
    "5450" : "Otterup", 
    "5462" : "Morud", 
    "5463" : "Harndrup", 
    "5464" : "Brenderup Fyn", 
    "5466" : "Asperup", 
    "5471" : "Sønderborg", 
    "5472" : "Veflinge", 
    "5485" : "Skamby", 
    "5491" : "Blommenslyst", 
    "5492" : "Vissenbjerg", 
    "5500" : "Middelfart", 
    "5540" : "Ullerslev", 
    "5550" : "Langeskov", 
    "5560" : "Aarup", 
    "5580" : "Aaby", 
    "5591" : "Gelsted", 
    "5592" : "Ejby", 
    "5600" : "Faaborg", 
    "5610" : "Assens", 
    "5620" : "Glamsbjerg", 
    "5631" : "Ebberup", 
    "5642" : "Millinge", 
    "5672" : "Broby", 
    "5683" : "Haarby", 
    "5690" : "Tommerup", 
    "5700" : "Svendborg", 
    "5750" : "Ringe", 
    "5762" : "Vester Skerninge", 
    "5771" : "Stenstrup", 
    "5772" : "Kværndrup", 
    "5792" : "Årslev", 
    "5800" : "Nyborg", 
    "5853" : "Ørbæk", 
    "5854" : "Gislev", 
    "5856" : "Ryslinge", 
    "5863" : "Ferritslev Fyn", 
    "5871" : "Frørup", 
    "5874" : "Hesselager", 
    "5881" : "Skårup Fyn", 
    "5882" : "Vejstrup", 
    "5883" : "Oure", 
    "5884" : "Gudme", 
    "5892" : "Gudbjerg Sydfyn", 
    "5900" : "Rudkøbing", 
    "5932" : "Humble", 
    "5935" : "Bagenkop", 
    "5953" : "Tranekær", 
    "5960" : "Marstal", 
    "5970" : "Ærøskøbing", 
    "5985" : "Søby Ærø", 
    "6000" : "Kolding", 
    "6040" : "Egtved", 
    "6051" : "Almind", 
    "6052" : "Viuf", 
    "6064" : "Jordrup", 
    "6070" : "Christiansfeld", 
    "6091" : "Bjert", 
    "6092" : "Sønder Stenderup", 
    "6093" : "Sjølund", 
    "6094" : "Hejls", 
    "6100" : "Haderslev", 
    "6200" : "Aabenraa", 
    "6230" : "Rødekro", 
    "6240" : "Løgumkloster", 
    "6261" : "Bredebro", 
    "6270" : "Tønder", 
    "6280" : "Højer", 
    "6300" : "Gråsten", 
    "6310" : "Broager", 
    "6320" : "Egernsund", 
    "6330" : "Padborg", 
    "6340" : "Kruså", 
    "6360" : "Tinglev", 
    "6372" : "Bylderup-Bov", 
    "6392" : "Bolderslev", 
    "6400" : "Sønderborg", 
    "6430" : "Nordborg", 
    "6440" : "Augustenborg", 
    "6470" : "Sydals", 
    "6500" : "Vojens", 
    "6510" : "Gram", 
    "6520" : "Toftlund", 
    "6534" : "Agerskov", 
    "6535" : "Branderup J", 
    "6541" : "Bevtoft", 
    "6560" : "Sommersted", 
    "6580" : "Vamdrup", 
    "6600" : "Vejen", 
    "6621" : "Gesten", 
    "6622" : "Bække", 
    "6623" : "Vorbasse", 
    "6630" : "Rødding", 
    "6640" : "Lunderskov", 
    "6650" : "Brørup", 
    "6660" : "Lintrup", 
    "6670" : "Holsted", 
    "6682" : "Hovborg", 
    "6683" : "Føvling", 
    "6690" : "Gørding", 
    "6700" : "Esbjerg", 
    "6701" : "Esbjerg", 
    "6705" : "Esbjerg Ø", 
    "6710" : "Esbjerg V", 
    "6715" : "Esbjerg N", 
    "6720" : "Fanø", 
    "6731" : "Tjæreborg", 
    "6740" : "Bramming", 
    "6752" : "Glejbjerg", 
    "6753" : "Agerbæk", 
    "6760" : "Ribe", 
    "6771" : "Gredstedbro", 
    "6780" : "Skærbæk", 
    "6792" : "Rømø", 
    "6800" : "Varde", 
    "6818" : "Årre", 
    "6823" : "Ansager", 
    "6830" : "Nørre Nebel", 
    "6840" : "Oksbøl", 
    "6851" : "Janderup Vestj.", 
    "6852" : "Billum", 
    "6853" : "Vejers Strand", 
    "6854" : "Henné", 
    "6855" : "Ovtrup", 
    "6857" : "Blåvand", 
    "6862" : "Tistrup", 
    "6870" : "Ølgod", 
    "6880" : "Tarm", 
    "6893" : "Hemmet", 
    "6900" : "Skjern", 
    "6920" : "Videbæk", 
    "6933" : "Kibæk", 
    "6940" : "Lem St.", 
    "6950" : "Ringkøbing", 
    "6960" : "Hvide Sande", 
    "6971" : "Spjald", 
    "6973" : "Ørnhøj", 
    "6980" : "Tim", 
    "6990" : "Ulfborg", 
    "7000" : "Fredericia", 
    "7080" : "Børkop", 
    "7100" : "Vejle", 
    "7120" : "Vejle Øst", 
    "7130" : "Juelsminde", 
    "7140" : "Stouby", 
    "7150" : "Barrit", 
    "7160" : "Tørring", 
    "7171" : "Uldum", 
    "7173" : "Vonge", 
    "7182" : "Bredsten", 
    "7183" : "Randbøl", 
    "7184" : "Vandel", 
    "7190" : "Billund", 
    "7200" : "Grindsted", 
    "7250" : "Hejnsvig", 
    "7260" : "Sønder Omme", 
    "7270" : "Stakroge", 
    "7280" : "Sønder Felding", 
    "7300" : "Jelling", 
    "7321" : "Gadbjerg", 
    "7323" : "Give", 
    "7330" : "Brande", 
    "7361" : "Ejstrupholm", 
    "7362" : "Hampen", 
    "7400" : "Herning", 
    "7430" : "Ikast", 
    "7441" : "Bording", 
    "7442" : "Engesvang", 
    "7451" : "Sunds", 
    "7470" : "Karup J", 
    "7480" : "Vildbjerg", 
    "7490" : "Aulum", 
    "7500" : "Holstebro", 
    "7540" : "Haderup", 
    "7550" : "Sørvad", 
    "7560" : "Hjerm", 
    "7570" : "Vemb", 
    "7600" : "Struer", 
    "7620" : "Lemvig", 
    "7650" : "Bøvlingbjerg", 
    "7660" : "Bækmarksbro", 
    "7673" : "Harboøre", 
    "7680" : "Thyborøn", 
    "7700" : "Thisted", 
    "7730" : "Hantholm", 
    "7741" : "Frøstrup", 
    "7742" : "Vesløs", 
    "7752" : "Snedsted", 
    "7755" : "Bedsted Thy", 
    "7760" : "Hurup Thy", 
    "7770" : "Vestervig", 
    "7790" : "Thyholm", 
    "7800" : "Skive", 
    "7830" : "Vinderup", 
    "7840" : "Højslev", 
    "7850" : "Stroholm Jyll.", 
    "7860" : "Spøttrup", 
    "7870" : "Roslev", 
    "7884" : "Fur", 
    "7900" : "Nykøbing Mors", 
    "7950" : "Erslev", 
    "7960" : "Karby", 
    "7970" : "Redsted M", 
    "7980" : "Vils", 
    "7990" : "Øster Assels", 
    "8000" : "Århus C", 
    "8100" : "Århus C", 
    "8200" : "Århus N", 
    "8210" : "Århus V", 
    "8220" : "Brabrand", 
    "8230" : "Åbyhøj", 
    "8240" : "Risskov", 
    "8250" : "Egå", 
    "8260" : "Viby J", 
    "8270" : "Højbjerg", 
    "8300" : "Odder", 
    "8305" : "Samsø", 
    "8310" : "Tranbjerg J", 
    "8320" : "Mårslet", 
    "8330" : "Beder", 
    "8340" : "Malling", 
    "8350" : "Hundslund", 
    "8355" : "Solbjerg", 
    "8361" : "Hasselager", 
    "8362" : "Hørning", 
    "8370" : "Hadsten", 
    "8380" : "Trige", 
    "8381" : "Mundelstrup", 
    "8382" : "Hinnerup", 
    "8400" : "Ebeltoft", 
    "8410" : "Rønde", 
    "8420" : "Knebel", 
    "8444" : "Balle", 
    "8450" : "Hammel", 
    "8462" : "Harlev J", 
    "8464" : "Galten", 
    "8471" : "Sabro", 
    "8472" : "Sporup", 
    "8500" : "Granaa", 
    "8520" : "Lystrup", 
    "8530" : "Hjortshøj", 
    "8541" : "Skødstrup", 
    "8543" : "Hornslet", 
    "8544" : "Mørke", 
    "8550" : "Ryomgård", 
    "8560" : "Kolind", 
    "8570" : "Trustrup", 
    "8581" : "Nimtofte", 
    "8585" : "Glesborg", 
    "8586" : "Ørum Djurs", 
    "8592" : "Anholt", 
    "8600" : "Silkeborg", 
    "8620" : "Kjellerup", 
    "8632" : "Lemming", 
    "8641" : "Sorring", 
    "8643" : "Ans By", 
    "8653" : "Them", 
    "8654" : "Byrup", 
    "8660" : "Skanderborg", 
    "8670" : "Låsby", 
    "8680" : "Ry", 
    "8700" : "Horsens", 
    "8721" : "Daugård", 
    "8722" : "Hedensted", 
    "8723" : "Løsning", 
    "8732" : "Hovedgård", 
    "8740" : "Brændstrup", 
    "8751" : "Gedved", 
    "8752" : "Østbirk", 
    "8760" : "Klovborg", 
    "8762" : "Flemming", 
    "8763" : "Rask Mølle", 
    "8766" : "Nørre Snede", 
    "8781" : "Stenderup", 
    "8783" : "Hornsyld", 
    "8800" : "Viborg", 
    "8830" : "Tjele", 
    "8831" : "Løgstrup", 
    "8832" : "Skals", 
    "8840" : "Rødkærsbro", 
    "8850" : "Bjeringbro", 
    "8860" : "Ulstrup", 
    "8870" : "Langå", 
    "8881" : "Thorsø", 
    "8882" : "Fårvang", 
    "8883" : "Gjern", 
    "8900" : "Randers", 
    "8950" : "Ørsted", 
    "8961" : "Allingåbro", 
    "8963" : "Auning", 
    "8970" : "Havndal", 
    "8981" : "Spentrup", 
    "8983" : "Gjerlev J", 
    "8990" : "Fårup", 
    "9000" : "Aalborg", 
    "9100" : "Aalborg", 
    "9200" : "Aalborg SV", 
    "9210" : "Aalborg SØ", 
    "9220" : "Aalborg Øst", 
    "9230" : "Svenstrup J", 
    "9240" : "Nibe", 
    "9260" : "Gistrup", 
    "9270" : "Klarup", 
    "9280" : "Storvorde", 
    "9293" : "Kongerslev", 
    "9300" : "Sæby", 
    "9310" : "Vodskov", 
    "9320" : "Hjallerup", 
    "9330" : "Dronninglund", 
    "9340" : "Asaa", 
    "9352" : "Dybvad", 
    "9362" : "Gandrup", 
    "9370" : "Hals", 
    "9380" : "Vestbjerg", 
    "9381" : "Sulsted", 
    "9382" : "Tylstrup", 
    "9400" : "Nørresundby", 
    "9430" : "Vadum", 
    "9440" : "Aabybro", 
    "9460" : "Brovst", 
    "9480" : "Løkken", 
    "9490" : "Pandrup", 
    "9492" : "Blokhus", 
    "9493" : "Saltum", 
    "9500" : "Hobro", 
    "9510" : "Arden", 
    "9520" : "Skørping", 
    "9530" : "Støvring", 
    "9541" : "Suldrup", 
    "9550" : "Mariager", 
    "9560" : "Hadsund", 
    "9574" : "Bælum", 
    "9575" : "Terndrup", 
    "9600" : "Aars", 
    "9610" : "Nørager", 
    "9620" : "Aalestrup", 
    "9631" : "Gedsted", 
    "9632" : "Møldrup", 
    "9640" : "Farsø", 
    "9670" : "Løgstør", 
    "9681" : "Ranum", 
    "9690" : "Fjerritslev", 
    "9700" : "Brønderslev", 
    "9740" : "Jerslev J", 
    "9750" : "Øster Vrå", 
    "9760" : "Vrå", 
    "9800" : "Hjørring", 
    "9830" : "Tårs", 
    "9850" : "Hirtshals", 
    "9870" : "Sindal", 
    "9881" : "Bindslev", 
    "9900" : "Frederikshavn", 
    "9940" : "Læsø", 
    "9970" : "Strandby", 
    "9981" : "Jerup", 
    "9982" : "Ålbæk", 
    "9990" : "Skagen"
};

var acity = {
    "frederiksberg" 	: "2000", 
    "københavn ø" 		: "2100", 
    "københavn n" 		: "2200", 
    "københavn s" : "2300", 
    "københavn nv" : "2400", 
    "københavn sv" : "2450", 
    "valby" : "2500", 
    "glostrup" : "2600", 
    "brøndby" : "2605", 
    "rødovre" : "2610", 
    "albertslund" : "2620", 
    "vallensbæk" : "2625", 
    "taastrup" : "2630", 
    "ishøj" : "2635", 
    "hedehusene" : "2640", 
    "hvidovre" : "2650", 
    "brøndby strand" : "2660", 
    "vallensbæk strand" : "2665", 
    "grave" : "2670", 
    "solrød strand" : "2680", 
    "karlslunde" : "2690", 
    "brønshøj" : "2700", 
    "vanløse" : "2720", 
    "herlev" : "2730", 
    "skovlunde" : "2740", 
    "ballerup" : "2750", 
    "måløv" : "2760", 
    "smørum" : "2765", 
    "kastrup" : "2770", 
    "dragør" : "2791", 
    "lyngby" : "2800", 
    "gentofte" : "2820", 
    "virum" : "2830", 
    "holte" : "2840", 
    "nærum" : "2850", 
    "søborg" : "2860", 
    "bagsværd" : "2880", 
    "hellerup" : "2900", 
    "charlottenlund" : "2920", 
    "klampenborg" : "2930", 
    "skodsborg" : "2942", 
    "vedbæk" : "2950", 
    "rungsted kyst" : "2960", 
    "hørsholm" : "2970", 
    "kokkedal" : "2980", 
    "nivå" : "2990", 
    "helsingør" : "3000", 
    "humlebæk" : "3050", 
    "espergærde" : "3060", 
    "snekkersten" : "3070", 
    "tikøb" : "3080", 
    "hornbæk" : "3100", 
    "dronningmølle" : "3120", 
    "ålsgårde" : "3140", 
    "hellebæk" : "3150", 
    "helsinge" : "3200", 
    "vejby" : "3210", 
    "tisvildeleje" : "3220", 
    "græsted" : "3230", 
    "gilleleje" : "3250", 
    "frederiksværk" : "3300", 
    "ølsted" : "3310", 
    "skævinge" : "3320", 
    "gørløse" : "3330", 
    "liseleje" : "3360", 
    "melby" : "3370", 
    "hundested" : "3390", 
    "hillerød" : "3400", 
    "allerød" : "3450", 
    "birkerød" : "3460", 
    "fredensborg" : "3480", 
    "kvistgård" : "3490", 
    "værløse" : "3500", 
    "farum" : "3520", 
    "lynge" : "3540", 
    "slangerup" : "3550", 
    "frederikssund" : "3600", 
    "jægerspris" : "3630", 
    "ølstykke" : "3650", 
    "stenløse" : "3660", 
    "veksø sjælland" : "3670", 
    "rønne" : "3700", 
    "aakirkrby" : "3720", 
    "nexø" : "3730", 
    "svaneke" : "3740", 
    "østermarie" : "3751", 
    "gudhjem" : "3760", 
    "allinge" : "3770", 
    "klemensker" : "3782", 
    "hasle" : "3790", 
    "roskilde" : "4000", 
    "jyllinge" : "4040", 
    "skibby" : "4050", 
    "kirkr såby" : "4060", 
    "kirke hyllinge" : "4070", 
    "ringsted" : "4100", 
    "viby sjælland" : "4130", 
    "borup" : "4140", 
    "herlufmagle" : "4160", 
    "glumsø" : "4171", 
    "fjenneslev" : "4173", 
    "jystrup midtsj." : "4174", 
    "sorø" : "4180", 
    "munke bjergby" : "4190", 
    "slagelse" : "4200", 
    "korsør" : "4220", 
    "skælskør" : "4230", 
    "vemmelev" : "4241", 
    "boeslunde" : "4242", 
    "rude" : "4243", 
    "fuglebjerg" : "4250", 
    "dalmose" : "4261", 
    "sandved" : "4262", 
    "høng" : "4270", 
    "gørlev" : "4281", 
    "ruds vedby" : "4291", 
    "dianalund" : "4293", 
    "stenlille" : "4295", 
    "nyrup" : "4296", 
    "holbæk" : "4300", 
    "lejre" : "4320", 
    "hvalsø" : "4330", 
    "tølløse" : "4340", 
    "ugerløse" : "4350", 
    "kirke eskilstrup" : "4360", 
    "store merløse" : "4370", 
    "vipperød" : "4390", 
    "kalundborg" : "4400", 
    "regstrup" : "4420", 
    "mørkøv" : "4440", 
    "jyderup" : "4450", 
    "snertinge" : "4460", 
    "svebølle" : "4470", 
    "store fuglede" : "4480", 
    "jerslev sj." : "4490", 
    "nykøbing sjælland" : "4500", 
    "svinninge" : "4520", 
    "gislinge" : "4532", 
    "hørve" : "4534", 
    "fårevejle" : "4540", 
    "asnæs" : "4550", 
    "vig" : "4560", 
    "gravinge" : "4571", 
    "nørre asmindrup" : "4572", 
    "højby" : "4573", 
    "rørvig" : "4581", 
    "sjællands odde" : "4583", 
    "føllenslev" : "4591", 
    "sejerø" : "4592", 
    "eskeblerg" : "4593", 
    "køge" : "4600", 
    "gadstrup" : "4621", 
    "havdrup" : "4622", 
    "lille skensved" : "4623", 
    "bjæverskov" : "4632", 
    "fakse" : "4640", 
    "hårlev" : "4652", 
    "fakse ladeplads" : "4654", 
    "store heddinge" : "4660", 
    "strøby" : "4671", 
    "klippinge" : "4672", 
    "rødvig stevns" : "4673", 
    "herfølge" : "4681", 
    "tureby" : "4682", 
    "rønnede" : "4683", 
    "holme-olstrup" : "4684", 
    "haslev" : "4690", 
    "næstved" : "4700", 
    "præstø" : "4720", 
    "tappernøje" : "4733", 
    "mern" : "4735", 
    "karrebæksminde" : "4736", 
    "lundby" : "4750", 
    "vordingborg" : "4760", 
    "kalvehave" : "4771", 
    "landebæk" : "4772", 
    "stensved" : "4773", 
    "stege" : "4780", 
    "borre" : "4791", 
    "askeby" : "4792", 
    "bogø by" : "4793", 
    "nykøbing f" : "4800", 
    "nørre alslev" : "4840", 
    "stubbekøbing" : "4850", 
    "guldborg" : "4862", 
    "eskilstrup" : "4863", 
    "horbelev" : "4871", 
    "idestrup" : "4872", 
    "væggerløse" : "4873", 
    "gedser" : "4874", 
    "nysted" : "4880", 
    "toreby l" : "4891", 
    "øster ulslev" : "4894", 
    "errindlev" : "4895", 
    "nakskov" : "4900", 
    "harpelunde" : "4912", 
    "horslunde" : "4913", 
    "søllested" : "4920", 
    "maribo" : "4930", 
    "bandholm" : "4941", 
    "torrig l" : "4943", 
    "fejø" : "4944", 
    "nørreballe" : "4951", 
    "stokkemarke" : "4952", 
    "karise" : "4953", 
    "holeby" : "4960", 
    "rødby" : "4970", 
    "dannemare" : "4983", 
    "sakskøbing" : "4990", 
    "odense c" : "5000", 
    "odense v" : "5200", 
    "odense nv" : "5210", 
    "odense sø" : "5220", 
    "odense m" : "5230", 
    "odense nø" : "5240", 
    "odense sv" : "5250", 
    "odense s" : "5260", 
    "odense n" : "5270", 
    "marslev" : "5290", 
    "kerteminde" : "5300", 
    "agedrup" : "5320", 
    "munkeby" : "5330", 
    "rynkeby" : "5350", 
    "mesinge" : "5370", 
    "dalby" : "5380", 
    "martofte" : "5390", 
    "bogense" : "5400", 
    "otterup" : "5450", 
    "morud" : "5462", 
    "harndrup" : "5463", 
    "brenderup fyn" : "5464", 
    "asperup" : "5466", 
    "sønderborg" : "5471", 
    "veflinge" : "5472", 
    "skamby" : "5485", 
    "blommenslyst" : "5491", 
    "vissenbjerg" : "5492", 
    "middelfart" : "5500", 
    "ullerslev" : "5540", 
    "langeskov" : "5550", 
    "aarup" : "5560", 
    "aaby" : "5580", 
    "gelsted" : "5591", 
    "ejby" : "5592", 
    "faaborg" : "5600", 
    "assens" : "5610", 
    "glamsbjerg" : "5620", 
    "ebberup" : "5631", 
    "millinge" : "5642", 
    "broby" : "5672", 
    "haarby" : "5683", 
    "tommerup" : "5690", 
    "svendborg" : "5700", 
    "ringe" : "5750", 
    "vester skerninge" : "5762", 
    "stenstrup" : "5771", 
    "kværndrup" : "5772", 
    "årslev" : "5792", 
    "nyborg" : "5800", 
    "ørbæk" : "5853", 
    "gislev" : "5854", 
    "ryslinge" : "5856", 
    "ferritslev fyn" : "5863", 
    "frørup" : "5871", 
    "hesselager" : "5874", 
    "skårup fyn" : "5881", 
    "vejstrup" : "5882", 
    "oure" : "5883", 
    "gudme" : "5884", 
    "gudbjerg sydfyn" : "5892", 
    "rudkøbing" : "5900", 
    "humble" : "5932", 
    "bagenkop" : "5935", 
    "tranekær" : "5953", 
    "marstal" : "5960", 
    "ærøskøbing" : "5970", 
    "søby ærø" : "5985", 
    "kolding" : "6000", 
    "egtved" : "6040", 
    "almind" : "6051", 
    "viuf" : "6052", 
    "jordrup" : "6064", 
    "christiansfeld" : "6070", 
    "bjert" : "6091", 
    "sønder stenderup" : "6092", 
    "sjølund" : "6093", 
    "hejls" : "6094", 
    "haderslev" : "6100", 
    "aabenraa" : "6200", 
    "rødekro" : "6230", 
    "løgumkloster" : "6240", 
    "bredebro" : "6261", 
    "tønder" : "6270", 
    "højer" : "6280", 
    "gråsten" : "6300", 
    "broager" : "6310", 
    "egernsund" : "6320", 
    "padborg" : "6330", 
    "kruså" : "6340", 
    "tinglev" : "6360", 
    "bylderup-bov" : "6372", 
    "bolderslev" : "6392", 
    "sønderborg" : "6400", 
    "nordborg" : "6430", 
    "augustenborg" : "6440", 
    "sydals" : "6470", 
    "vojens" : "6500", 
    "gram" : "6510", 
    "toftlund" : "6520", 
    "agerskov" : "6534", 
    "branderup j" : "6535", 
    "bevtoft" : "6541", 
    "sommersted" : "6560", 
    "vamdrup" : "6580", 
    "vejen" : "6600", 
    "gesten" : "6621", 
    "bække" : "6622", 
    "vorbasse" : "6623", 
    "rødding" : "6630", 
    "lunderskov" : "6640", 
    "brørup" : "6650", 
    "lintrup" : "6660", 
    "holsted" : "6670", 
    "hovborg" : "6682", 
    "føvling" : "6683", 
    "gørding" : "6690", 
    "esbjerg" : "6700", 
    "esbjerg" : "6701", 
    "esbjerg ø" : "6705", 
    "esbjerg v" : "6710", 
    "esbjerg n" : "6715", 
    "fanø" : "6720", 
    "tjæreborg" : "6731", 
    "bramming" : "6740", 
    "glejbjerg" : "6752", 
    "agerbæk" : "6753", 
    "ribe" : "6760", 
    "gredstedbro" : "6771", 
    "skærbæk" : "6780", 
    "rømø" : "6792", 
    "varde" : "6800", 
    "årre" : "6818", 
    "ansager" : "6823", 
    "nørre nebel" : "6830", 
    "oksbøl" : "6840", 
    "janderup vestj." : "6851", 
    "billum" : "6852", 
    "vejers strand" : "6853", 
    "henné" : "6854", 
    "ovtrup" : "6855", 
    "blåvand" : "6857", 
    "tistrup" : "6862", 
    "ølgod" : "6870", 
    "tarm" : "6880", 
    "hemmet" : "6893", 
    "skjern" : "6900", 
    "videbæk" : "6920", 
    "kibæk" : "6933", 
    "lem st." : "6940", 
    "ringkøbing" : "6950", 
    "hvide sande" : "6960", 
    "spjald" : "6971", 
    "ørnhøj" : "6973", 
    "tim" : "6980", 
    "ulfborg" : "6990", 
    "fredericia" : "7000", 
    "børkop" : "7080", 
    "vejle" : "7100", 
    "vejle øst" : "7120", 
    "juelsminde" : "7130", 
    "stouby" : "7140", 
    "barrit" : "7150", 
    "tørring" : "7160", 
    "uldum" : "7171", 
    "vonge" : "7173", 
    "bredsten" : "7182", 
    "randbøl" : "7183", 
    "vandel" : "7184", 
    "billund" : "7190", 
    "grindsted" : "7200", 
    "hejnsvig" : "7250", 
    "sønder omme" : "7260", 
    "stakroge" : "7270", 
    "sønder felding" : "7280", 
    "jelling" : "7300", 
    "gadbjerg" : "7321", 
    "give" : "7323", 
    "brande" : "7330", 
    "ejstrupholm" : "7361", 
    "hampen" : "7362", 
    "herning" : "7400", 
    "ikast" : "7430", 
    "bording" : "7441", 
    "engesvang" : "7442", 
    "sunds" : "7451", 
    "karup j" : "7470", 
    "vildbjerg" : "7480", 
    "aulum" : "7490", 
    "holstebro" : "7500", 
    "haderup" : "7540", 
    "sørvad" : "7550", 
    "hjerm" : "7560", 
    "vemb" : "7570", 
    "struer" : "7600", 
    "lemvig" : "7620", 
    "bøvlingbjerg" : "7650", 
    "bækmarksbro" : "7660", 
    "harboøre" : "7673", 
    "thyborøn" : "7680", 
    "thisted" : "7700", 
    "hantholm" : "7730", 
    "frøstrup" : "7741", 
    "vesløs" : "7742", 
    "snedsted" : "7752", 
    "bedsted thy" : "7755", 
    "hurup thy" : "7760", 
    "vestervig" : "7770", 
    "thyholm" : "7790", 
    "skive" : "7800", 
    "vinderup" : "7830", 
    "højslev" : "7840", 
    "stroholm jyll." : "7850", 
    "spøttrup" : "7860", 
    "roslev" : "7870", 
    "fur" : "7884", 
    "nykøbing mors" : "7900", 
    "erslev" : "7950", 
    "karby" : "7960", 
    "redsted m" : "7970", 
    "vils" : "7980", 
    "øster assels" : "7990", 
    "århus c" : "8000", 
    "århus n" : "8200", 
    "århus v" : "8210", 
    "brabrand" : "8220", 
    "åbyhøj" : "8230", 
    "risskov" : "8240", 
    "egå" : "8250", 
    "viby j" : "8260", 
    "højbjerg" : "8270", 
    "odder" : "8300", 
    "samsø" : "8305", 
    "tranbjerg j" : "8310", 
    "mårslet" : "8320", 
    "beder" : "8330", 
    "malling" : "8340", 
    "hundslund" : "8350", 
    "solbjerg" : "8355", 
    "hasselager" : "8361", 
    "hørning" : "8362", 
    "hadsten" : "8370", 
    "trige" : "8380", 
    "mundelstrup" : "8381", 
    "hinnerup" : "8382", 
    "ebeltoft" : "8400", 
    "rønde" : "8410", 
    "knebel" : "8420", 
    "balle" : "8444", 
    "hammel" : "8450", 
    "harlev j" : "8462", 
    "galten" : "8464", 
    "sabro" : "8471", 
    "sporup" : "8472", 
    "granaa" : "8500", 
    "lystrup" : "8520", 
    "hjortshøj" : "8530", 
    "skødstrup" : "8541", 
    "hornslet" : "8543", 
    "mørke" : "8544", 
    "ryomgård" : "8550", 
    "kolind" : "8560", 
    "trustrup" : "8570", 
    "nimtofte" : "8581", 
    "glesborg" : "8585", 
    "ørum djurs" : "8586", 
    "anholt" : "8592", 
    "silkeborg" : "8600", 
    "kjellerup" : "8620", 
    "lemming" : "8632", 
    "sorring" : "8641", 
    "ans by" : "8643", 
    "them" : "8653", 
    "byrup" : "8654", 
    "skanderborg" : "8660", 
    "låsby" : "8670", 
    "ry" : "8680", 
    "horsens" : "8700", 
    "daugård" : "8721", 
    "hedensted" : "8722", 
    "løsning" : "8723", 
    "hovedgård" : "8732", 
    "brændstrup" : "8740", 
    "gedved" : "8751", 
    "østbirk" : "8752", 
    "klovborg" : "8760", 
    "flemming" : "8762", 
    "rask mølle" : "8763", 
    "nørre snede" : "8766", 
    "stenderup" : "8781", 
    "hornsyld" : "8783", 
    "viborg" : "8800", 
    "tjele" : "8830", 
    "løgstrup" : "8831", 
    "skals" : "8832", 
    "rødkærsbro" : "8840", 
    "bjeringbro" : "8850", 
    "ulstrup" : "8860", 
    "langå" : "8870", 
    "thorsø" : "8881", 
    "fårvang" : "8882", 
    "gjern" : "8883", 
    "randers" : "8900", 
    "ørsted" : "8950", 
    "allingåbro" : "8961", 
    "auning" : "8963", 
    "havndal" : "8970", 
    "spentrup" : "8981", 
    "gjerlev j" : "8983", 
    "fårup" : "8990", 
    "aalborg" : "9000", 
    "aalborg sv" : "9200", 
    "aalborg sø" : "9210", 
    "aalborg øst" : "9220", 
    "svenstrup j" : "9230", 
    "nibe" : "9240", 
    "gistrup" : "9260", 
    "klarup" : "9270", 
    "storvorde" : "9280", 
    "kongerslev" : "9293", 
    "sæby" : "9300", 
    "vodskov" : "9310", 
    "hjallerup" : "9320", 
    "dronninglund" : "9330", 
    "asaa" : "9340", 
    "dybvad" : "9352", 
    "gandrup" : "9362", 
    "hals" : "9370", 
    "vestbjerg" : "9380", 
    "sulsted" : "9381", 
    "tylstrup" : "9382", 
    "nørresundby" : "9400", 
    "vadum" : "9430", 
    "aabybro" : "9440", 
    "brovst" : "9460", 
    "løkken" : "9480", 
    "pandrup" : "9490", 
    "blokhus" : "9492", 
    "saltum" : "9493", 
    "hobro" : "9500", 
    "arden" : "9510", 
    "skørping" : "9520", 
    "støvring" : "9530", 
    "suldrup" : "9541", 
    "mariager" : "9550", 
    "hadsund" : "9560", 
    "bælum" : "9574", 
    "terndrup" : "9575", 
    "aars" : "9600", 
    "nørager" : "9610", 
    "aalestrup" : "9620", 
    "gedsted" : "9631", 
    "møldrup" : "9632", 
    "farsø" : "9640", 
    "løgstør" : "9670", 
    "ranum" : "9681", 
    "fjerritslev" : "9690", 
    "brønderslev" : "9700", 
    "jerslev j" : "9740", 
    "øster vrå" : "9750", 
    "vrå" : "9760", 
    "hjørring" : "9800", 
    "tårs" : "9830", 
    "hirtshals" : "9850", 
    "sindal" : "9870", 
    "bindslev" : "9881", 
    "frederikshavn" : "9900", 
    "læsø" : "9940", 
    "strandby" : "9970", 
    "jerup" : "9981", 
    "ålbæk" : "9982", 
    "skagen" : "9990"
};
