var varSelectedCountry = "DK";
var objInputBy = null;
var objInputPostnr = null;
var objByFejlTekst = null;

// ** Lægger valgt funktion/program på objectet som eventhandler
// ** script courtesy of Lasse Reichstein Nielsen **
//	elem:		elementet der skal have påklistret event-handleren
//	type:		event-typen (onblur/-focus/-click etc.)
//				skrives uden "on" i starten ('onblur' --> 'blur' etc.)
//	funktion:	programmet der skal håndtere eventen
function setEventHandler(elem,type,funktion) {
	if (elem.addEventListener) {
		elem.addEventListener(type,funktion,false);
	}
	else if (elem.attachEvent) {
		elem.attachEvent("on"+type,funktion);
	}
	else {
		var ontype = "on"+type;
		var old = elem[ontype];
		if (old) {
			elem[ontype] = function(event) {
				var res = old(event);
				return funktion(event)&&res;
			}
		}
		else {
			elem[ontype] = funktion;
		}
	}
}

function defineEvent(e) {
	element = false;
	if (window.event) { // if IE
		var e = window.event;   // Grab the event.
		var element = e.srcElement;
	}
	else { // if Mozilla
		var element = e.target;
	}
	if (element.nodeType == 3) { // defeat Safari bug
		element = element.parentNode;
	}
	return element;
}

function toggleDisabled(f,e,sw) {
	if (((f) && (document.forms[f])) && ((e) && (document.forms[f].elements[e]))) {
		var obj = document.forms[f].elements[e];
		if (sw) {
			if (sw == "t") {
				obj.disabled = true;
			}
			else if (sw == "f") {
				obj.disabled = false;
			}
		}
		else {
			if (obj.disabled) {
				obj.disabled = false;
			}
			else {
				obj.disabled = true;
			}
		}
	}	
}

// ** tjekker et form-felt for om det indeholder andet end numeriske tegn.
// ** hvis dette er tilfældet gives en besked, hvorefter feltets indhold slettes,
//    feltet markeres med valgfri farve eller specifik css-class og feltet fokuseres
//	f:	formens navn eller id (kræves)
//	e:	elementets navn eller id (kræves)
function validateText(f,e) {
	if (document.forms[f].elements[e].value.match(/.*(<|>|\\).*/)) {
		alert("Der er blevet indtastet ulovlige tegn, såsom '<', '>' og '\'.");
		document.forms[f].elements[e].value = "";
		document.forms[f].elements[e].focus();
		document.forms[f].elements[e].errBubble = true;
		return false;
	}
	else {
		document.forms[f].elements[e].errBubble = false;
		return true;
	}
}


// ** tjekker et form-felt for om det indeholder andet end numeriske tegn.
// ** hvis dette er tilfældet gives en besked, hvorefter feltets indhold slettes,
//    feltet markeres med valgfri farve eller specifik css-class og feltet fokuseres
//	f:	formens navn eller id (kræves)
//	e:	elementets navn eller id (kræves)
function validateNumeric(f,e) {
	if (document.forms[f].elements[e].value.match(/\D/)) {
		alert("Der må kun indtastes tal i dette felt.");
		document.forms[f].elements[e].value = "";
		document.forms[f].elements[e].focus();
		document.forms[f].elements[e].errBubble = true;
		return false;
	}
	else {
		document.forms[f].elements[e].errBubble = false;
		return true;
	}
}



// Inits zip-code checker
// Required fields: Two inputs of type "text" with references to the dummy-classes "automatiskpostnrby" for the city-field 
// and "automatiskpostnr" for the zip-code field
function initAutomatiskPostnr() {
	for (i = 0; i < document.getElementsByTagName("input").length; i++) {
		var inp = document.getElementsByTagName("input")[i];
		if (inp.type.toLowerCase() == "text" && inp.className.toLowerCase().indexOf("automatiskpostnrby") != -1) {
			objInputBy = inp;
			setEventHandler(inp,"blur",automatiskPostnrFraByHandler);
		}

		else if (inp.type.toLowerCase() == "text" && inp.className.toLowerCase().indexOf("automatiskpostnr") != -1) {
			objInputPostnr = inp;
			setEventHandler(inp,"blur",automatiskByFraPostnrHandler);
		}
	}
//    for () {
//    	objByFejlTekst = 
//    }

}

function automatiskPostnrFraByHandler(e) {
	if (element = defineEvent(e)) {
		if (element.id) { el = element.id; } else if (element.name) { el = element.name; }
		var f = element.form.id;
		if (postnrArray && typeof(postnrArray) == "object") {
			automatiskPostnrFraBy(f,el);
		}
	}
}

function automatiskByFraPostnrHandler(e) {
	if (element = defineEvent(e)) {
		if (element.id) { el = element.id; } else if (element.name) { el = element.name; }
		var f = element.form.id;
		if (postnrArray && typeof(postnrArray) == "object") {
			automatiskByFraPostnr(f,el);
		}
	}
}

function automatiskPostnrFraBy(f,el) {
	var goAhead = false;
	var inputPostnr = objInputPostnr;
	var varBy = document.forms[f].elements[el].value;

	if (varSelectedCountry != null && validateText(f,el)) {
		var varByA = varBy;
		var varByAA = varBy;
		if (varByA.toLowerCase().indexOf("å") >= 0 || varByA.toLowerCase().indexOf("Å") >= 0) {
			varByA = varByA.replace(/Å/g, "Aa");
			varByA = varByA.replace(/å/g, "aa");
		}
		if (varByAA.toLowerCase().indexOf("aa") >= 0) {
			varByAA = varByAA.replace(/Aa/g, "Å");
			varByAA = varByAA.replace(/aa/g, "å");
		}
		if (varSelectedCountry != "") {
			inputPostnr.value = "";
			for (loop=0; loop < postnrArray.length; loop++) {
				if (varSelectedCountry.toLowerCase() == postnrArray[loop][0].toLowerCase() && (varBy.toLowerCase() == postnrArray[loop][2].toLowerCase() || varByA.toLowerCase() == postnrArray[loop][2].toLowerCase() || varByAA.toLowerCase() == postnrArray[loop][2].toLowerCase())) {
					inputPostnr.value = postnrArray[loop][1];
					document.forms[f].elements[el].value = postnrArray[loop][2];
					goAhead = true;
					break;
				}
			}
			if (!goAhead) {
				var suggestedCitys = "";
				var ceiling = 0;
				for (loop=0; loop < postnrArray.length; loop++) {
					if (varSelectedCountry.toLowerCase() == postnrArray[loop][0].toLowerCase() && (postnrArray[loop][2].toLowerCase().indexOf(varBy.toLowerCase()) >= 0 || postnrArray[loop][2].toLowerCase().indexOf(varByA.toLowerCase()) >= 0 || postnrArray[loop][2].toLowerCase().indexOf(varByAA.toLowerCase()) >= 0)) {
						if (ceiling < 10) {
							suggestedCitys += postnrArray[loop][1] + " " + postnrArray[loop][2] + "\n";
							ceiling++;
						}
						else {
							break;
						}
					}
				}
				var message = "Den pågældende by kan desværre ikke findes.";
				if (suggestedCitys != "") {
					message += "\n\nHer er nogle alternative forslag:\n\n" + suggestedCitys;
				}
				message += "\n\nVil du prøve at skrive bynavnet ind igen?";
				if (varBy != "" && confirm(message)) {
					document.forms[f].elements[el].value = "";
					document.forms[f].elements[el].focus();
				}
			}
		}
	}
}

function automatiskByFraPostnr(f,el) {
	var goAhead = false;
	var inputBy = objInputBy;
	var varPostnr = document.forms[f].elements[el].value;
	if (varSelectedCountry != null && validateNumeric(f,el)) {
		if (varPostnr != null) {
			inputBy.value = "";
			for (loop=0; loop < postnrArray.length; loop++) {
				if (varSelectedCountry.toLowerCase() == postnrArray[loop][0].toLowerCase() && varPostnr == postnrArray[loop][1]) {
					inputBy.value = postnrArray[loop][2];
					goAhead = true;
					break;
				}
			}
			if (!goAhead) {
				var message = "Det pågældende postnummer kan desværre ikke genkendes.";
				if (varPostnr != "" && confirm(message)) {
					document.forms[f].elements[el].value = "";
					document.forms[f].elements[el].focus();
				}
			}
		}
	}
}

setEventHandler(window,"load",initAutomatiskPostnr);
