/*******************************************************************
 * Copyright (c) 2002-2007 More Optimized Registration Elements AS *
 *******************************************************************/

var skipLookup = false;

function lookup(lookupUrl) {
	if (document.getElementById) { // Level 1 DOM
		document.getElementById('lookup').src = lookupUrl;
	} else if (document.all) { // Old IE
		document.all.lookup.src = lookupUrl;
	}
}

function lookupZipcode(zipcode, targetfield, urlprefix, focusfield) {
	if (skipLookup) return;
	if (!urlprefix) urlprefix = "";
	if (zipcode.length > 0) {
		zipcodetarget = targetfield;
		targetfield.value = trans_WAIT;
		if (document.getElementById) { // Level 1 DOM
			document.getElementById('lookup').src = urlprefix + "lookup/zipcodelookup.jsp?zipcode=" + zipcode;
		} else if (document.all) { // Old IE
			document.all.lookup.src = urlprefix + "lookup/zipcodelookup.jsp?zipcode=" + zipcode;
		}
		if (focusfield) {
			focusfield.focus();
		}
	}
}

function lookupCalculation(qId, targetfield, updateqid, updatevalue, urlprefix, focusfield, targetRowId, wizardId) {
	if (skipLookup) return;
	if (!urlprefix) urlprefix = "";
	if (qId.length > 0) {
		calculatetarget = targetfield;
		targetfield.value = trans_WAIT;
		var lookupUrl = urlprefix + "lookup/calculationlookup.jsp?updatevalue=" + updatevalue + "&updateqid=" + updateqid + "&questionid=" + qId + "&wizardid=" + wizardId;
		if (targetRowId) {
			lookupUrl += "&updaterowid=" + targetRowId;
		}
		var value = lookupRequest(lookupUrl); // lookup with Ajax
		var displayTarget = document.qform[targetfield.name + '_display'];
		if (displayTarget) {
			displayTarget.value = value;
		}
		targetfield.value = value;
		var targetName = this.calculatetarget.name;
		// If the target field has an onChange, invoke it so values depending on it are updated
		if (this.window["onChange" + targetName] !== undefined) {
			this.window["onChange" + targetName]();
		}
		if (focusfield) {
			focusfield.focus();
		}
	}
}

function lookupStoreCalculation(qId, updateqid, updatevalue, targetRowId, wizardId) {
	var urlprefix = "";
	if (qId.length > 0) {
		var lookupUrl = urlprefix + "lookup/calculationlookup.jsp?updatevalue=" + updatevalue + "&updateqid=" + updateqid + "&questionid=" + qId + "&wizardid=" + wizardId;
		if (targetRowId) {
			lookupUrl += "&updaterowid=" + targetRowId;
		}
		var value = lookupRequest(lookupUrl); // lookup with Ajax
		//alert('Got value = ' + value);
		sendvalueLookup(qId, value, targetRowId, urlprefix, wizardId);
	}
}

function sendvalueLookup(qId, updatevalue, rowId, urlprefix, wizardId) {
	if (skipLookup) return;
	if (!urlprefix) urlprefix = "";
	if (qId.length > 0) {
		var lookupUrl = urlprefix + "lookup/sendvaluelookup.jsp?updateqid=" + qId + "&updatevalue=" + updatevalue + "&wizardid=" + wizardId;
		if (rowId) {
			lookupUrl += "&updaterowid=" + rowId;
		}
		var value = lookupRequest(lookupUrl); // lookup with Ajax
	}
}

function lookupOrgnr(orgnrfield, orgnr, nametarget, adrtarget, ziptarget, citytarget, emailtarget, urlprefix) {
	if (skipLookup) return;
	if (!urlprefix) urlprefix = "";
	if (orgnr.length > 0) {
		var orgnr = orgnr.replace(/\s/gi, "");
		if (!isValidOrgnr(orgnr)) {
			isValid = false;
			window.event.cancelBubble = true;
			if (window.cancelHideQuestionHelp !== undefined) {
				//alert("cancelhidequestionhelp");
				window.cancelHideQuestionHelp = true;
			}
			if (orgnrfield) orgnrfield.focus();
			//showValidateHelp('<%=result%>', <%=elmerAlert%>, '<%=qText%>', '<%=fieldName%>', true, <%=personId.isValid()%>);
			//function showValidateHelp(message, elmerAlert, qtext, fieldname, iserror, hideHelp) {
			var msg = isNaN(orgnr) ? trans_ORG_NUMBER : trans_ORG_NUMBER_INVALID;
			showValidateHelp(msg, true, trans_ORG_NUMBER_TITLE, orgnrfield.name, true, false);
			return false;
		}
		hideQuestionHelp();
		hideQuestionIcons(orgnrfield.name);
		orgnametarget = nametarget;
		orgnametarget.value = trans_WAIT2;
		if (adrtarget != 0) {
			orgadrtarget = adrtarget;
		}
		if (ziptarget != 0) {
			orgziptarget = ziptarget;
		}
		if (citytarget != 0) {
			orgcitytarget = citytarget;
		}
		if (emailtarget != 0) {
			orgemailtarget = emailtarget;
		}
		
		if (document.getElementById) { // Level 1 DOM
			document.getElementById('lookup').src = urlprefix + "lookup/orgnrlookup.jsp?orgnr=" + orgnr;
		} else if (document.all) { // Old IE
			document.all.lookup.src = urlprefix + "lookup/orgnrlookup.jsp?orgnr=" + orgnr;
		}
	}
}

function isValidOrgnr(orgnr) {
	if (!orgnr || !orgnr.length || orgnr.length != 9) return false;
	var key = new Array(3, 2, 7, 6, 5, 4, 3, 2); // Weights
	var orgId = new Array(9);
	for (var i=0;i<orgnr.length;i++){
		var num = orgnr.charAt(i);
		if (!isNaN(num)) {
			orgId[i] = parseInt(num);
		} else {
			return false;
		}
	}
	// Checksum
	var checkSum = 0;
	for (var i=0;i<8;i++){
		checkSum += (parseInt(orgId[i]) * parseInt(key[i]));
	}
	var mod = parseInt(checkSum) % 11;
	if (mod == 1) {
		return false;
	}
	if (mod == 0) {
		return orgId[8] == 0;
	} else {
		return ((11 - mod) == orgId[8]);
	}
}
function lookupGabnr(knr, gnr, bnr, fnr, snr, depEienNavn, depEienPadr, depEienPnr, depEienPsted, depEierNavn, depEierPadr, depEierPnr, depEierPsted) {
	if (skipLookup) return;
	if (gnr.length > 0) {
		document.eiennavntarget = depEienNavn;
		document.eienpadrtarget = depEienPadr;
		document.eienpnrtarget = depEienPnr;
		document.eienpstedtarget = depEienPsted;

		document.eiernavntarget = depEierNavn;
		document.eierpadrtarget = depEierPadr;
		document.eierpnrtarget = depEierPnr;
		document.eierpstedtarget = depEierPsted;

		depEienNavn.value = trans_WAIT3;
		document.all.lookup.src = "lookup/gablookup.jsp?knr=" + knr + "&gnr=" + gnr + "&bnr=" + bnr + "&fnr=" + fnr + "&snr=" + snr;
	}
}

function lookupFnr(fnrfield, fnametarget, snametarget, adrtarget, postnrtarget, postplacetarget, gendertarget, deadtarget, urlprefix) {
	if (skipLookup) return;
	if (! fnrfield) { 
		alert("Error: no reference to fnr field"); 
		return false; 
	}
	var fnr = fnrfield.value;
	if (!urlprefix) urlprefix = "";
	if (fnr.length > 0) {
		fnr = fnr.replace(/ /g, ''); // Replace all whitechars
		if (isNaN(fnr)) {
			alert(trans_BIRTHNUMBER);
			window.event.cancelBubble = true;
			return false;
		} else if (fnr.length != 11) {
			alert(trans_BIRTHNUMBER_LENGTH);
			window.event.cancelBubble = true;
			return false;
		}
		fnrfield.value = fnr;
		document.fnametarget = fnametarget;
		if (document.fnametarget) {
			document.fnametarget.value = trans_WAIT4;
		}
		document.snametarget = snametarget;
		document.adrtarget = adrtarget;
		document.postnrtarget = postnrtarget;
		document.postplacetarget = postplacetarget;
		document.gendertarget = gendertarget;
		document.deadtarget = deadtarget;
		if (document.getElementById) { // Level 1 DOM
			document.getElementById('lookup').src = urlprefix + "lookup/fnrlookup.jsp?fnr=" + fnr;
		} else if (document.all) { // Old IE
			document.all.lookup.src = urlprefix + "lookup/fnrlookup.jsp?fnr=" + fnr;
		}
	}
}

function lookupRequest(url, alertResponse) {
	//window.alert("url: " + url);
	var request = null;
	try {request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
	try {request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
	try {request = new XMLHttpRequest(); } catch(e) {}
	request.open("GET", url + '&random='+Math.random(), false);
	request.send(null);
	if (request.readyState == 4 && request.status == 200) {
		return request.responseText;
	} else {
		//window.alert("readyState: " + request.readyState + ", status: " + request.status);
		return '';
	}
}
	
function pluginLookup(wizardId, questionId, lookupValue, pluginId, lookupValueId) {
	var lookupUrl = "lookup/pluginlookup.jsp?wizardid=" + wizardId + "&questionid=" + questionId + "&questionid=" + questionId + "&lookupvalue=" + lookupValue + "&lookupvalueid=" + lookupValueId + "&pluginid=" + pluginId;
	var lookupResult = lookupRequest(lookupUrl);
	var fieldChanges = lookupResult.split('|');
	
	for (var fieldChangeIndex in fieldChanges) {
		var fieldChange = fieldChanges[fieldChangeIndex];
		var changeComponents = fieldChange.split('=');
		var fieldName = changeComponents[0];
		var fieldValue = changeComponents[1];
		var fieldRef = 'document.qform.' + fieldName;
		var field = eval(fieldRef);
		if (field) field.value = fieldValue;
	}
}

