﻿var currentRecordNr;function ax_loadBody(ASP, Random) {	my_loadBody(ASP, Random);}function ax_getQueryFields(targetDiv, table) {	var url = "/4daction/ax_getQueryFields/" + targetDiv + my_getStates() + "&table=" + table;	options = {};	options.timeout = 40000;	HTTP.get(url, ax_setQueryFields, options);		function ax_setQueryFields(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			cb_error(error);		}		else {			redrawElements(response, "", targetDiv, table, "")		}	}}function ax_findRecords(selection, rootDiv, parameters) {	$(rootDiv + "Record").innerHTML = "";		var path = "";	var pathElement = document.getElementsByName("axPath")[0];	if(pathElement)		path = pathElement.value;		var valueId = rootDiv + path + "QueryValue";	var valueText = $(valueId).value;	if(valueText != "") {		$(valueId).value = "";		var tableId = rootDiv + path + "QueryFile";		var table = 2;		var tableElement = $(tableId);		if(tableElement)			table = tableElement.value;				var fieldId = rootDiv + path + "QuerySelectedField";		var field = 0;		var fieldElement = $(fieldId);		if(fieldElement)			field = fieldElement.value;		var selection = "1";				url = "/4daction/ax_findRecords";		var options;		options = {};		options.timeout = 400000;		var theValues = {};		theValues["ASP"] = my_asp? my_asp: gup("ASP");		theValues["Random"] = my_ran? my_ran: gup("Random");		theValues["div"] = rootDiv;		theValues["path"] = path;		theValues["value"] = valueText;		theValues["table"] = table;		theValues["field"] = field;		theValues["clearSelection"] = selection;		if(parameters) {			theValues["axParameters"] = parameters;		}				//Kaller custom funksjon. Morten 2008.11.27		custom_FindRecords(theValues);				HTTP.post(url, theValues, ax_recordsFound, null);	}		function ax_recordsFound(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			cb_error(error);		}		else {			var records = getXMLElement(response, "records");			if(records > 500 ) {				var target = $("r" + rootDiv);				target.innerHTML = "<div style='clear: both;padding-top: 10px;'>Fant " + records + " registreringer. Du m&aring; begrense s&oslash;ket ditt.</div>";			}			else {				ax_getRecords(path, rootDiv, table, 1, records, 1);			}		}	}}function ax_getRecords(path, div, table, from, to, clearSelection, parameters) {	var url = "/4daction/ax_getRecords";	var options;	options = {};	options.timeout = 400000;	var theValues = new Array();	theValues["ASP"] = my_asp? my_asp: gup("ASP");	theValues["Random"] = my_ran? my_ran: gup("Random");	theValues["div"] = div;	theValues["table"] = table;	theValues["from"] = from;	theValues["to"] = to;	theValues["clearSelection"] = clearSelection;	if(parameters)		theValues["axParameters"] = parameters;	HTTP.post(url, theValues, setRecords, null);		function setRecords(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error);		}		else {			redrawElements(response, path, div, table, "click")		}			}}/********* OBJECT FOR CREATING DATA AREA ***************/function ax_Output(div, table, parameters, saveRecordDiv) {	var path = "";	var grid = this;	this.div = div;	this.path = path;	this.newPath = "";	//this.onrowclick = rowclicked();		//henter div som html skal inn i.	var area = $(div);	if(area) {		if(table) {			//henter søkefelt fra serveren			if(!path)				path = "";			var url = "/4daction/ax_getOutputArea"			var options;			options = {};			options.timeout = 400000;			var theValues = new Array();			theValues["ASP"] = my_asp? my_asp: gup("ASP");			theValues["Random"] = my_ran? my_ran: gup("Random");			theValues["div"] = div;			theValues["table"] = table;			if(parameters)				theValues["axParameters"] = parameters;			HTTP.post(url, theValues, setOutputArea, null);		}	}		function setOutputArea(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			cb_error(error);		}		else {			//Fjerner eventuell record i toppen			if(!saveRecordDiv)				$(div + "Record").innerHTML = "";			redrawElements(response, "", div, table, "")						//setter onchange på tabell select			var selectId = div + path + "QueryFile";			var select = $(selectId);			if(select)				select.onchange = selectChange;						var searchID = div + path + "QueryValue";			var sElement = $(searchID);			if(sElement) {				sElement.onkeydown = keystroke;			}			//skal det hentes records?			var records = parseInt(getXMLElement(response, "records"));			//grid.newPath = getXMLElement(response, "axPath");			if(true) {				ax_getRecords("", div, table, 0, records, "1");			}		}	}		function selectChange (e) {		var obj = eventTrigger (e);		var table = obj.value;		grid = new ax_Output(div, table, grid.newPath);	}}/********* END OBJECT FOR CREATING DATA AREA ***********/function eventTrigger (e) {    if (! e)    	e = event;	return e.target || e.srcElement;}	function onClick(id, area, method, table, type) {	var x = method.indexOf("?");	var theMethod = "";	var theParameters = "";	var url = "";	var options = {};	var theValues = {};	if(x > -1) {		theMethod = method.substring(0, x);		theParameters += "&" + method.substring(x + 1, method.length);	}	else {		theMethod = method;	}	if(theParameters.indexOf("&source=")==-1) {		var sourceElement = getParentByClass($(id), "output");		if(sourceElement)			theParameters += "&source=" + sourceElement.id;	}		switch (theMethod) {		case "getRelatedRecords":			if(id.charAt(0) != "L") {				url = "/4daction/ax_getRelatedRecords";				options.timeout = 400000;				theValues["ASP"] = my_asp? my_asp: gup("ASP");				theValues["Random"] = my_ran? my_ran: gup("Random");				theValues["id"] = id;				theValues["table"] = table;				theValues["div"] = area;				theValues["buttongroup"] = "expanded";				if(theParameters)					theValues["axParameters"] = theParameters;				HTTP.post(url, theValues, setRecords, null);				break;			}		case "getRecord":			if(id.charAt(0) != "L") {				url = "/4daction/ax_getRecord"				options.timeout = 400000;				theValues["ASP"] = my_asp? my_asp: gup("ASP");				theValues["Random"] = my_ran? my_ran: gup("Random");				theValues["id"] = id;				theValues["table"] = table;				theValues["div"] = area;				if(theParameters)					theValues["axParameters"] = theParameters;				HTTP.post(url, theValues, setRecords, null);				break;			}		default:			customOnClick(id, area, table, theMethod, type, theParameters);	}		function setRecords(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error);		}		else {			var path = getXMLElement(response, "path");						//markere valgt rad			switch (type) {				case "none":					break;				case "expand":					id = id.substring(2,id.length);				case "duplicate":				default:					setSelectedRow(id, area);			}			redrawElements(response, path, area, table);		}			}}function setArea (response, path, area, table, type, id) {	var error = getXMLElement(response, "error");	if(error.length>0) {		cb_error(error);	}	else {		/*		var html = getXMLElement(response, "html");		var target = getXMLElement(response, "target");		*/	}		}function onCellClick(cell, method) {	switch (method) {		case "onCellClick":			alert(cell.innerHTML);			return;		default:			return;	}}function onCollapse (div, path) {	div.style.display = "none";	id_c = div.id;	id_x = "x" + id_c.substring(1, id_c.length);	$(id_x).style.display = "inline";	//skjule expand	//id_e = path + "e" + id_c.substring(1, id_c.length);	id_e = "r" + id_c.substring(3, id_c.length);	var outputElement = $(id_e);	if(!outputElement) {		alert("[onCollapse] Fant ikke html-element med id: " + id_e);	}	else {		 outputElement.style.display = "none";	}}function updateHidden(root, single, input) {	if(!single) {		var inputsInput = getElements("", "input", root);		var inputsTextarea = getElements("", "textarea", root);		var inputsSelect = getElements("", "select", root);		var hidden = getElements("old", "div", root);		var found = false;		var i = 0;		var j = 0;		for(i = 0; i < hidden.length; i++) {			found = false;			for(j = 0; j < inputsInput.length; j++) {				if(hidden[i].id.substring(1, hidden[i].id.length) == inputsInput[j].id.substring(1, inputsInput[j].id.length)) {					if(inputsInput[j].type == "checkbox") {						hidden[i].innerHTML = inputsInput[j].checked?inputsInput[j].value: "";					}					else {						hidden[i].innerHTML = inputsInput[j].value;					}					j = inputsInput.length + 1;					found = true;				}				}			if(!found) {				for(j = 0; j < inputsTextarea.length; j++) {					if(hidden[i].id.substring(1, hidden[i].id.length) == inputsTextarea[j].id.substring(1, inputsTextarea[j].id.length)) {						hidden[i].innerHTML = inputsTextarea[j].value;						j = inputsTextarea.length + 1;						found = true;					}						}			}			if(!found) {				for(j = 0; j < inputsSelect.length; j++) {					if(hidden[i].id.substring(1, hidden[i].id.length) == inputsSelect[j].id.substring(1, inputsSelect[j].id.length)) {						hidden[i].innerHTML = inputsSelect[j].value;						j = inputsSelect.length + 1;					}						}			}		}	}	else {		var iID = root.id;		if(iID) {			var hID = "h" + iID.substring(1, iID.length);			var hElement = $(hID);			if(hElement) {				if(input) {					hElement.innerHTML = input;				}				else {					hElement.innerHTML = root.value;				}			}		}	}}function getHidden(root, array, type) {	var exclude = false;	var notValidated = {length: 0};	var hidden = getElements("old", "div", root);	var hiddenTA = getElements("old", "textarea", root);	var inputs = getElements("", "input", root);	var i = 0;	for(i = 0; i < inputs.length; i++) {		if(type == "input") exclude = getParentByClass(inputs[i], "output");		if(!exclude) {			if(inputs[i].type == "hidden") {				array[inputs[i].id] = inputs[i].value;				if(HasClassName(inputs[i], "mandatory")) {					if(inputs[i].value == "") {						notValidated[inputs[i].id] = inputs[i];						notValidated.length++;					}				}			}		}	}		for(i = 0; i < hiddenTA.length; i++) {		hidden[hidden.length] = hiddenTA[i];	}	for(i = 0; i < hidden.length; i++) {		if(type == "input") exclude = getParentByClass(hidden[i], "output");		if(!exclude) {			var newValue = hidden[i].tagName.toLowerCase() == "textarea"? hidden[i].value: hidden[i].innerHTML;			array[hidden[i].id] = newValue;			if(HasClassName(hidden[i], "mandatory")) {				if(newValue == "") {					notValidated[hidden[i].id] = hidden[i];					notValidated.length++;				}			}		}	}	return notValidated;}function ax_saveRecord(button, theValues, path, area, table) {	url = "/4daction/ax_saveRecord";	var options;	options = {};	options.timeout = 400000;	HTTP.post(url, theValues, recordSaved, null);		//alert($("htest[3]3.E16").innerHTML.charCodeAt(6));	//alert(theValues["hview[14]1.E4"]);		function recordSaved(response) {		var top = theValues["isOnTop"];		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error, top);		}		else {			redrawElements(response, path, area, table);			if(top)				cancelPopup(top);						var row = theValues["refresh1"]? "r_" + theValues["refresh1"]: "";			customRecordSaved(button, response, path, area, table, row, theValues);					}	}}function ax_saveRecords(body, path, area, table) {	url = "/4daction/ax_saveRecords";	var options;	options = {};	options.timeout = 400000;	HTTP.post(url, body, recordsSaved, null);		function recordsSaved(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error);		}		else {			redrawElements(response, path, area, table);		}	}}var relate;var searchInput;var relateTimer;function selectRelated(e) {	var input = eventTrigger(e);	 if (! e)    	e = event;    var keyCode = e.keyCode;    var att = 0;    var cr = 13;    var tab = 9;    var up = 38;    var down = 40;    var backspace = 8;    switch (true) {    	case keyCode==cr:    		input.onblur(e);    		break;    	case keyCode==up:    		selectNextRelated(false, input);    		break;    	case keyCode==down:    		selectNextRelated(true, input);    		break;    	case ((keyCode<48) && (keyCode!=backspace) && (keyCode!=att)):    		break;    	default:    		searchInput = input;			if($("queryRelated").innerHTML != searchInput.value) {				var timeout = 200;				if(relate)					clearTimeout(relate);				$("queryRelated").innerHTML = searchInput.value;				if(searchInput.value != "") {					relate = setTimeout("ax_selectRelated();", timeout);				}				else {					$("selectRelated").style.display = "none";				}			}			break;    }}function selectNextRelated(down, input) {	var liste = $("selectRelated");	var next = 0;	var scroll = 0;	if(liste) {		if(liste.style.display == "block") {			var relaterte = getElements("relatedChoice", "div", liste);			for(var i = 0; i < relaterte.length; i++) {				if(HasClassName(relaterte[i], "selectedRelated")) {					RemoveClassName(relaterte[i], "selectedRelated");					if(down) {						next = (i+1) % relaterte.length;						scroll = relaterte[i].clientHeight;					}					else {						next = i==0? relaterte.length-1: i-1;						scroll = -relaterte[i].clientHeight;					}				}			}			if(scroll == 0) scroll = 14;			myScrollPosition(liste, next, relaterte.length, scroll);			AddClassName(relaterte[next], "selectedRelated");			var ieValue = relaterte[next].innerHTML;			var area = $("selectRelated");			relateClick(relaterte[next], input, ieValue, area, true)		}	}}function ax_selectRelated(noDisplay) {	var url = "/4daction/ax_selectRelated";	var theValues = new Array();	theValues["ASP"] = my_asp? my_asp: gup("ASP");	theValues["Random"] = my_ran? my_ran: gup("Random");	var name = searchInput.getAttribute("name");	theValues["name"] = name;	theValues["value"] =  searchInput.value;	theValues["id"] = searchInput.id;	theValues["fieldName"] = axLongFieldName(axFile(searchInput.id), axField(searchInput.id));		selectRelatedParameters(theValues);		var options;	options = {};	options.timeout = 400000;	HTTP.post(url, theValues, selectedRelated, null);		function selectedRelated(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			cb_error(error);		}		else {			area = $("selectRelated");			if((area.style.display != "block") && (!noDisplay)){				area.style.display = "block";				var ePos = getObjPos(searchInput);				area.style.width = searchInput.clientWidth + "px";				var height = searchInput.offsetHeight;				area.style.top = ePos[0] + height + "px";				area.style.left = ePos[1] + "px";			}					if(searchInput.value == "")				area.style.display = "none";			var html = getXMLElement(response, "html");			area.innerHTML = html;						//set Actions			divs = getElements("", "div", "selectRelated");			for(var i = 0; i < divs.length; i++) {				divs[i].onclick = click; 			}					}							function click (e) {			var div = eventTrigger (e);			relateClick(div, null, null, area);		}	}}function relateClick(div, input, text, area, keepOpen) {	var setFocus_ = false;	if(!input) {		setFocus_ = true;		input = searchInput;		window.clearTimeout(relateTimer);	}	else { //autorelate	}	if(text) {		input.value = text;	}	else {		input.value = div.innerHTML;	}	var inputId = input.id;	var name = input.getAttribute("name");	var hiddenId = "h" + input.id.substring(1, input.id.length);	var hiddenElement = $(hiddenId);	if(hiddenElement) {		var value = div.getAttribute("name");		hiddenElement.innerHTML = value;				//Oppdater eventuelt relaterte felt.		//ax_redrawRelated(inputId, name, value);				//Finner relaterte felt		var divId = div.id;		var hidden = getElements("hidden", "div", area);		var relatedHidden = {};		var i = 0;		for(i = 0; i < hidden.length; i++) {			if(hidden[i].id.indexOf(divId + "_") != -1) {				relatedHidden[hidden[i].id.substring(divId.length + 1)] = hidden[i].innerHTML;			}		}		//Fyller ut relaterte		var inputArea = getParentByClass(input, "row");		if(!inputArea)			inputArea = getParentByClass(input, "inputArea");					if(inputArea) {			for(name in relatedHidden) {				inputAreaElements = getElements("", "", inputArea);				for(i = 0; i < inputAreaElements.length; i++) {					if(inputAreaElements[i].getAttribute("name") == name) {						if(!HasClassName(inputAreaElements[i], "input"))							setValueById(inputAreaElements[i].id, relatedHidden[name]);					}				}			}		}				//Eventuelle kalkulaeringer på raden		customInput(input.id, "", value);			}	else {		//cb_error("[relateClick] Fant ikke tilhørende hidden element");	}	if(!keepOpen)		hideSelectRelated();	if(setFocus_) searchInput.focus();}function ax_redrawRelated(id, name, value) {	var url = "/4daction/ax_redrawRelated" + my_getStates() + "&id=" + id + "&name=" + name + "&value=" + value;	options = {};	options.timeout = 400000;	HTTP.get(url, setRedrawRelated, options);	return;		function setRedrawRelated(response) {		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error);		}		else {			hideSelectRelated();			searchInput.focus();			redrawElements(response, "", "", "");		}	}}function hideSelectRelated() {	select = $("selectRelated");	select.innerHMTL = "";	select.style.display = "none";	query = $("queryRelated");	if(query)		query.innerHTML = "";}function onLoosingFocus(input) {	}function onGettingFocus(input) {	clearTimeout(relate);	searchInput = input;	if(input.getAttribute("format")) {		var old = getValueByElementId(input.id);		if(old)			setValueById(input.id, old);	}	var type = input.type;	switch (type) {		case "text":			input.select();			break;		default:			break;	}	//query = $("queryRelated");	//query.innerHTML = input.value;}function editRecord(button, area, path, table, record, parameters) {	var top = isOnTop(button);	var id = button.getAttribute("name");	var method = "getRecord?modify=1" + (parameters? "&axParameters=" + parameters: "") + (top? "&isOnTop=" + button.id: "");	onClick(id, area, method, table, "click")}function displayRecord(button, area, path, table, record, parameters) {	var top = isOnTop(button);	var id = button.getAttribute("name");	var method = "getRecord?modify=" + (parameters? "&axParameters=" + parameters: "") + (top? "&isOnTop=" + button.id: "");	onClick(id, area, method, table, "click")}function editRecords(button, area, path, table, parameters) {	var records =  getParentByClass (button, "output");	if(records) {		//Skjuler enkel editering		$(area + "Record").innerHTML = "";		var oddElements = getElements("odd", "div", records);		var evenElements = getElements("even", "div", records);		var allElements = new Array();		allElements = allElements.concat(oddElements);		allElements = allElements.concat(evenElements);		var utvalg = "";		var id = "";		for(var i = 0; i < allElements.length; i++) {			id = allElements[i].id;			if(id) {				utvalg += (i==0 ? "" : " ") + id;			}		}		var parameters = "&modify=1" + "&utvalg=" + utvalg + "&title=0&info=0" + parameters ;		ax_getRecords(path, area, table, 0, 0, 1, parameters);	}	else {		alert("[editRecords] Finner ikke liste med id: " + records);	}}function saveRecord (button, area, path, table, record, parameters) {	var top = isOnTop(button);	var btnName = button.getAttribute("name");	var theValues = {};	//er det et eller flere inkluderte outputareas?	var validated = {ok: true};	var utvalg = "";	var deleted = "";	var recordDiv = area + "Record" + (top? "Window": "");	var outputareas = getElements("output", "div", recordDiv);	getNotNestedByClass(outputareas, "output");	var i = 0;	for(i = 0; i < outputareas.length; i++) {		validated = validateSelection(outputareas[i]);		if(validated.ok) {			for(name in validated.theValues) {				switch (name) {					case "utvalg":						utvalg += validated.theValues[name];						break;					case "deleted":						deleted += validated.theValues[name];						break;					default:						theValues[name] = validated.theValues[name];						break;				}			}		}		else {			break;		}	}		if(validated.ok) {		var notValid = {length: 0};		if(top)			notValid = getHidden(recordDiv, theValues, "input");		else			notValid = getHidden(btnName, theValues, "input");		if(notValid.length > 0) {			notValidated(notValid, "input", true);		}		else {						var tableName = "[" + axFileName(table) + "]";			var recordId = area + "Record";									if(customValidateRecord(tableName, recordId)) {				theValues["ASP"] = my_asp? my_asp: gup("ASP");				theValues["Random"] = my_ran? my_ran: gup("Random");				theValues["table"] = table;				theValues["record"] = record;				theValues["div"] = area;				theValues["path"] = path;				theValues["utvalg"] = utvalg;				theValues["deleted"] = deleted;				var id = "[" +  table + "]" + record;				theValues["id"] = id;				if(parameters)					theValues["axParameters"] = parameters;				if(top)					theValues["isOnTop"] = button.id;							if($(area)) {					var oddElements = getElements("odd", "div", area);					var evenElements = getElements("even", "div", area);					var allElements = new Array();					allElements = allElements.concat(oddElements);					allElements = allElements.concat(evenElements);					var count = 0;					for(i = 0; i < allElements.length; i++) {						if( allElements[i].id.indexOf(id) > -1 ) {							count++;							theValues["refresh" + count] = allElements[i].id;						}					}				}				ax_saveRecord(button, theValues, path, area, table);			}		}	}	else {		displayError("[saveRecord] Et outputarea kunne ikke valideres");	}}function saveDuplicate(button, area, path, table, record, parameters) {	saveRecord(button, area, path, table, record, parameters);}function saveRecords(button, area, path, table, parameters) {	var selection = getParentByClass (button, "output");	if(selection) {		var validated = validateSelection(selection);		if(validated.ok) {			validated.theValues["ASP"] = my_asp? my_asp: gup("ASP");			validated.theValues["Random"] = my_ran? my_ran: gup("Random");			validated.theValues["div"] = area;			validated.theValues["path"] = path;			validated.theValues["div"] = area;			validated.theValues["table"] = table;			if(parameters)				validated.theValues["axParameters"] = parameters;							ax_saveRecords(validated.theValues, path, area, table);		}	}}function newRecord(button, area, path, table, parameters) {	var method = "getRecord?modify=1&record=-1" + (parameters? "&axParameters=" + parameters: "");	onClick(path, area, method, table);}function redrawElements(xmlDoc, path, area, table) {	/*er det en redirect?*/	var redirect = getXMLElement(xmlDoc, "redirect");	if(redirect) {		var target = getAttribute(redirect, "target");		doRedirect(redirect, target);	}	else {		var rowAction, cellActions, expandAction;		//Et annet area?		newArea = getXMLElement(xmlDoc, "area");		if(newArea)			area = newArea;				//er det message? skal ikke komme hit hvis det var error...		var message = getXMLElement(xmlDoc, "message");		$("message").innerHTML = message;		$("message").style.display = message!=""? "block": "none";		$("error").style.display = "none";		$("error").innerHTML = "";			//Er dette en expand?		var expandId = getXMLElement(xmlDoc, "expand");		if(expandId) {			expandElement = $("x_o" + expandId.substring(1, expandId.length));			collapseElement = $("c_o" + expandId.substring(1, expandId.length));			outputElement = $(expandId);			expandElement.style.display = "none";			collapseElement.style.display = "block";				outputElement.style.display = "block";		}				//Fylle ut områder og sette actions på ny html		replaceArea = xmlDoc.getElementsByTagName("replace");		var htmlReplaceId, htmlReplaceElement, content, highlight, popup, width, height;		var i = 0;		for( i = 0; i < replaceArea.length; i++) {			popup = replaceArea[i].getAttribute("onTop") == 1;			htmlReplaceId = popup? replaceArea[i].getAttribute("id") + "Window": replaceArea[i].getAttribute("id");			htmlReplaceElement = $(htmlReplaceId);			if(htmlReplaceElement) {									//leter etter attributter for popup				if(popup) {					var bg = $("disableBackground");					var size = getPageSize();					bg.style.width = size[0] + "px";					bg.style.height = size[1] + "px";					width = parseInt(replaceArea[i].getAttribute("width"));					height = parseInt(replaceArea[i].getAttribute("height"));					if(!width) width = 0;					if(!height) height = 0;					htmlReplaceElement.style.width = width>0? width + "px": "";					htmlReplaceElement.style.height = height>0? height + "px": "";					center = myCenter(bg, size[0], size[1], 0);					bg.style.display = "block";					var center = [0, 0];					if(HasClassName(htmlReplaceElement, "content")) {						var popupDiv = $("popup");						if(popupDiv)							center = myCenter(popupDiv, width, height);							popupDiv.style.display = "block";					}					else {						center = myCenter(htmlReplaceElement, width, height);						htmlReplaceElement.style.display = "block";					}																		}				else {					//setter den synlig					htmlReplaceElement.style.display = "block";				}				htmlReplaceElement.style.display = "block";				content = replaceArea[i].getElementsByTagName("content")[0].textContent;				if(!content) {					content = replaceArea[i].getElementsByTagName("content")[0].text; //getXMLElement(replaceArea[i], "content");				}				if(content) {					htmlReplaceElement.innerHTML = content;				}				rowAction = getXMLElement(replaceArea[i], "OnRowClick");				cellActions = replaceArea[i].getElementsByTagName("OnCellClick");				//var cellAction = getXMLElement(replaceArea[i], "OnCellClick");				expandAction = getXMLElement(replaceArea[i], "OnExpandClick");									//sette actions på expand og rader					setActions(rowAction, cellActions, expandAction, htmlReplaceElement);								//skroller til første replace				if(i == 0) setFocus(htmlReplaceElement);			}			else {				cb_error("[redrawElements: replaceArea] Fant ikke html-elementet med id: " + htmlReplaceId);			}					highlight = replaceArea[i].getAttribute("highlight");			if(highlight) {				stopp = highlight.indexOf("[");				theArea = stopp>-1? "L" + highlight.substring(1,stopp): highlight;				setSelectedRow(highlight, theArea);			}		}				//slette elementer		var remove = xmlDoc.getElementsByTagName("delete");		for(i = 0; i < remove.length; i++) {			removeElement(remove[i].getAttribute("id"));		}				//Legge til i område		addToArea = xmlDoc.getElementsByTagName("add");		var htmlAddToId, htmlAddToElement;		for( i = 0; i < addToArea.length; i++) {			htmlAddToId = addToArea[i].getAttribute("id");			htmlAddToElement = $(htmlAddToId);			if(htmlAddToElement) {				content = addToArea[i].getElementsByTagName("content")[0].textContent;				if(!content)					content = getXMLElement(addToArea[i], "content");				if(content) {					var tagName = htmlAddToElement.tagName.toLowerCase();					switch (tagName) {						case "table":							if(htmlAddToElement.lastChild) {								if(htmlAddToElement.lastChild.tagName.toLowerCase() == "tbody") {									htmlAddToElement.lastChild.innerHTML += content;									break;								}							}							htmlAddToElement.innerHTML += content;								break;						default:							htmlAddToElement.innerHTML += content;							break;					}									}				rowAction = getXMLElement(addToArea[i], "OnRowClick");				cellActions = addToArea[i].getElementsByTagName("OnCellClick");				//var cellAction = getXMLElement(addToArea[i], "OnCellClick");				expandAction = getXMLElement(addToArea[i], "OnExpandClick");										//sette actions på expand og rader					setActions(rowAction, cellActions, expandAction, htmlAddToElement);			}			else {				cb_error("[redrawElements: addToArea] Fant ikke html-elementet med id: " + htmlAddToId);				}					highlight = addToArea[i].getAttribute("highlight");				if(highlight) {				stop = highlight.indexOf("[");				theArea = stop>-1? "L" + highlight.substring(1,stop): highlight;				setSelectedRow(highlight, theArea);			}		}				//skjule elementer		var hide = xmlDoc.getElementsByTagName("hide");		for(var i = 0; i < hide.length; i++) {			hideElement(hide[i].getAttribute("id"));		}				//vise elementer		var show = xmlDoc.getElementsByTagName("show");		for(var i = 0; i < show.length; i++) {			showElement(show[i].getAttribute("id"));		}				//custom action		customRedrawElements(xmlDoc, path, area, table);						//Vise hjelpetekster?		//visHjelp();	}		function setActions(rowAction, cellActions, expandAction, htmlElement) {		if((rowAction) || (cellActions)) {			if(HasClassName(htmlElement, "row")) {				var rows = [htmlElement];			}			else {				var odd = getElements("odd", "div", htmlElement);				var even = getElements("even", "div", htmlElement);				var rows = new Array();				rows = rows.concat(odd);				rows = rows.concat(even);			}						var id = "";			for(var i = 0; i < rows.length; i++) {				columns = rows[i].getElementsByTagName("div");				for(var j=0; j < columns.length; j++) {					colname = columns[j].getAttribute("name");					if(!rowAction) {						for(var k=0; k < cellActions.length; k++) {							id = cellActions[k].getAttribute("id");							if(id == colname) {								columns[k].onclick = function(e) { click(e) };							}							else {							}						}					}					else {						columns[j].onclick = function(e) { click(e) };					}				}									}		}		if (expandAction) {			var xodd = getElements("x_odd", "div", htmlElement);			var xeven = getElements("x_even", "div", htmlElement);			var codd = getElements("c_odd", "div", htmlElement);			var ceven = getElements("c_even", "div", htmlElement);			var x_elements = new Array();			var c_elements = new Array();			x_elements = x_elements.concat(xodd);			x_elements = x_elements.concat(xeven);			c_elements = c_elements.concat(codd);			c_elements = c_elements.concat(ceven);			for(var k = 0; k < x_elements.length; k++) {				x_elements[k].onclick = expand;				c_elements[k].onclick = collapse;			}		}					/*			Setter funksjoner på input. 			Skal finne alle elementer av klasse «output» innenfor denne replace, 			så finne alle inputs innenfor hver av disse, 			så legge egen onblur-metode på siste text eller textarea. 		*/		var outputareas = getElements("output", "div", htmlElement);		if(outputareas.length > 0) {			for(var i=0; i < outputareas.length; i++) {				setInputActions(outputareas[i], true);			}		}		else {			setInputActions(htmlElement, false);		}				//setter funksjoner på select		var selects = getElements("", "select", htmlElement);		for(var k = 0; k < selects.length; k++) {			selects[k].onfocus = gotFocus;			selects[k].onblur = lostFocus;		}				//setter funksjoner på breaks		var breaks = getElements("br_visible", "div", htmlElement)		for(var k = 0; k < breaks.length; k++) {			breaks[k].onclick = breakClick;		}		breaks = getElements("br_hidden", "div", htmlElement)		for(var k = 0; k < breaks.length; k++) {			breaks[k].onclick = breakClick;		}				//Setter på deleterow		var delrows = getElements("delPict", "div", htmlElement);		var delId = "";		for(var k = 0; k < delrows.length; k++) {			delrows[k].onclick = deleteRow;		}	}		function setInputActions(area, differentLast) {		var inputs = getElements("", "input", area);		var lastId = "";		for(var j = 0; j < inputs.length; j++) {			if(inputs[j].id != "") {				if(HasClassName(inputs[j], "relate")) {					inputs[j].onkeyup = selectRelated;				}				inputType = inputs[j].type;				if(inputType == "checkbox") {					inputs[j].onclick = cbxClick;				}				else {					inputs[j].onfocus = gotFocus;					if(inputs[j].id != area.id + "QueryValue") {						inputs[j].onblur = lostFocus;						if(inputType == "text") lastId = inputs[j].id;					}				}			}		}						//setter funksjoner på textareas		var textareas = getElements("", "textarea", area);		for(j = 0; j < textareas.length; j++) {			textareas[j].onfocus = gotFocus;			textareas[j].onblur = lostFocus;			lastId = textareas[j].id > lastId? textareas[j].id: lastId;		}						if(differentLast) {			//Setter egen funksjon på siste textarea eller textfelt			var addrow = getXMLElement(xmlDoc, "addrows");			if((lastId) && (addrow)) {				var lastElement = $(lastId);				if(lastElement) {					lastElement.onblur = lastLostFocus;				}			}		}	}			function click (e) {		var cell = eventTrigger (e);		var id = cell.id;		var name = cell.getAttribute("name");				var cellAction = "";		//Midlertidig løsning...		for(var i=0; i < cellActions.length; i++) {			if(cellActions[i].getAttribute("id") == name) {				cellAction = cellActions[i].textContent;				if(!cellAction) //For IE					cellAction = cellActions[i].text;				i = cellActions.length;			}		}		if(!cellAction) {//rowclick			var row = cell.parentNode;			var id = row.id;			onClick(id, area, rowAction, table, "row");		}		else { //cellClick			onClick(id, area, cellAction, table, "cell");		}	}		function expand (e) {		var obj = eventTrigger (e);		var id = obj.id;				onClick(id, area, expandAction, table, "expand");	}	function collapse (e) {		var obj = eventTrigger (e);		onCollapse(obj, path);	}		function gotFocus (e) {		var area = eventTrigger (e);		onGettingFocus(area);	}		function lastLostFocus(e) {		lostFocus(e);		var element = eventTrigger(e);		//validerer her		var row = getParentByClass(element, "row");		if(row) {			var array = [];			var notValid = getHidden(row, array);			var empty = emptyRow(row);			if((notValid.length > 0) || (empty)) {				notValidated(notValid, "output", false);			}			else {								var newRow = axAddOutputRow(element);			}		}	}		function cbxClick(e) {		var obj = eventTrigger (e);		if(obj) {			id = "h" + obj.id.substring(1, obj.id.length);			value = obj.checked? obj.value: "";			oldObj = $(id);			if(oldObj)				oldObj.innerHTML = value;		}	}		function breakClick(e) {		var obj = eventTrigger (e);		if(obj) {			var parent = obj.parentNode;			if(parent) {				var div = getElements("break_content", "div", parent)[0];				if(div) {					if(HasClassName(obj, "br_visible")) {						RemoveClassName(obj, "br_visible");						AddClassName(obj, "br_hidden");						AddClassName(div, "hidden");					}					else {						RemoveClassName(obj, "br_hidden");						AddClassName(obj, "br_visible");						RemoveClassName(div, "hidden");					}				}			}		}	}}function deleteRow(e) {	var delElement = eventTrigger (e);	var row = $(delElement.id.substring(2));	if(row) {		//Disable input		var inputs = getElements("", "input", row);		for(var i = 0; i < inputs.length; i++) {			inputs[i].setAttribute("disabled", "disabled");		}		AddClassName(row, "del");		RemoveClassName(delElement, "delPict");		AddClassName(delElement, "undelPict");		delElement.onclick = unDeleteRow;				//Kjøre custom funksjon		customRowDeleted(delElement.id, true);	}	else {		displayError("[delrows] Finner ikke element med id: " + delElement.id.substring(2));	}}function unDeleteRow(e) {	var delElement = eventTrigger (e);	var row = $(delElement.id.substring(2));	if(row) {		//Enable input		var inputs = getElements("", "input", row);		for(var i = 0; i < inputs.length; i++) {			inputs[i].removeAttribute("disabled");		}		RemoveClassName(row, "del");		RemoveClassName(delElement, "undelPict");		AddClassName(delElement, "delPict");		delElement.onclick = deleteRow;				//Kjøre custom funksjon		customRowDeleted(delElement.id, false);	}	else {		displayError("[delrows] Finner ikke element med id: " + delElement.id.substring(2));	}}function lostFocus(e) {	var inputFld = eventTrigger (e);	var hasRelate = inputFld.onkeyup != undefined;	var softRelated = HasClassName(inputFld, "softRelation");	if(hasRelate) {		var area = $("selectRelated");		if(area) {			var theDisplay = area.style.display;			if(inputFld.value == "") theDisplay = "doDelete";			switch (theDisplay) {				case "doDelete":					var name = inputFld.getAttribute("name");					axSetValueById(inputFld.id, name, inputFld.value);					hideSelectRelated();					break;				case "":				case "none":					hideSelectRelated();					//searchInput.value = "";					//customInput(searchInput.id, "", "");					break;				case "block":					var rows = getElements("selectedRelated", "div", area);					if(!rows[0])						var row = $("relatedChoice1");					else 						var row = rows[0];					if(row) {						//venter 200ms med onBlur, slik at et evt klikk et annet sted kan kjøres istedet.						if(inputFld.value != "") {							var ieValue = row.innerHTML;							relateTimer = window.setTimeout(function() {relateClick(row, inputFld, ieValue, area)}, 200);						}					}					else {						if((inputFld.getAttribute("nonvalidinput") == "1") || (softRelated)){							var name = inputFld.getAttribute("name");							axSetValueById(inputFld.id, name, inputFld.value);							hideSelectRelated();														if(softRelated) {								var root = getRecordElement(inputFld.id);								if(root) {									var fields = getElements("theNameField", "input", root);									for(var i = 0; i < fields.length; i++) {										fields[i].value = inputFld.value;									}								}							}						}						else {							//Fant ingen relaterte							hideSelectRelated();							searchInput.value = "";							customInput(searchInput.id, "", "");						}					}					break;				default:					break;				}		}	}	else {		var type = inputFld.type;		var newValue = getValueById(inputFld.id);		var OK = validateInput(newValue, inputFld.id);		if(OK[0] == "1") {			axSetValueById(inputFld.id, inputFld.getAttribute("name"), OK[1]);		}		else if(OK[0] == "0") {			if(OK[1] != newValue) {				var setValue = OK[1];			}			else {				var setValue = getValueByID(inputFld.id);			}			axSetValueById(inputFld.id, inputFld.getAttribute("name"), setValue);			setTimeout(function () {mySetFocus(inputFld)}, 100);		}	}}function deleteRecord(button, area, path, table, record, parameters) {	var top = isOnTop(button);	var txt = customDeleteText(table);	if(txt.length == 0)		txt = "Vil du virkelig slette?";	var slett = confirm(txt);	if(slett) {		var name = button.getAttribute("name");		var theValues = new Array();		getHidden(name, theValues, "input");		theValues["ASP"] = my_asp? my_asp: gup("ASP");		theValues["Random"] = my_ran? my_ran: gup("Random");		theValues["table"] = table;		theValues["record"] = record;		theValues["div"] = area;		theValues["path"] = path;		var id = "[" +  table + "]" + record;		theValues["id"] = id;		if(parameters)			theValues["axParameters"] = parameters;		if(top)			theValues["isOnTop"] = button.id;			ax_deleteRecord(theValues);	}}function ax_deleteRecord(theValues) {	url = "/4daction/ax_deleteRecord";	var options;	options = {};	options.timeout = 400000;	HTTP.post(url, theValues, recordDeleted, null);		function recordDeleted(response) {		var top = theValues["isOnTop"];		var error = getXMLElement(response, "error");		if(error.length>0) {			displayError(error, top);		}		else {			redrawElements(response, theValues["path"], theValues["area"], theValues["table"]);			if(top)				cancelPopup(top);			recordIsDeleted(theValues); //custom method		}			}}function setSelectedRow(id, area) {	var newSelected = $(id);	var firstChar = newSelected? id.charAt(0): "";	if(firstChar != "i") {		var oldSelected = getElements("selectedRow", "div", area);		if(oldSelected.length == 0)			oldSelected = getElements("selectedRow", "tr", area);		for(var i = 0; i < oldSelected.length; i++) {			RemoveClassName(oldSelected[i], "selectedRow");		}		if(newSelected)			AddClassName(newSelected, "selectedRow", false);	}}function doRedirect(url, target) {	if(!target) {		window.location = url;	}	else {		window.open(url,target);	}}function newExpanded (button, area, path, table, parameters) {	newRecord(button, area, path, table, parameters);}function duplicateRecord(button, area, path, table, record, parameters) {	var top = isOnTop(button);	var id = button.getAttribute("name");	var method = "getRecord?modify=1" + "&duplicate=1" + (parameters? "&axParameters=" + parameters: "") + (top? "&isOnTop=" + button.id: "");	onClick(id, area, method, table, "duplicate");}function displayError(error, onTop) {	if(onTop) {		alert(error);	}	else {		$("debug").innerHTML = "";		$("message").innerHTML = "";		$("error").innerHTML = error + "<br />";		$("error").style.display = "block";		setFocus($("error"));	}}function displayDebug(msg) {	$("error").innerHTML = "";	$("message").innerHTML = "";	$("debug").innerHTML += msg + "<br />";	$("debug").style.display = "block";	setFocus($("debug"));}function cancel(obj) {	if(obj)		obj.innerHTML = "";}function cancelRecord(button, area) {	if(!(cancelPopup(button.id))) {		cancel($(area + "Record"));	}}function cancelRecords() {	alert("Ikke implementert");}function cancelPopup(id /* eller element*/) {	var source;	if(typeof id == "object")		source = id;	else		source = $(id);	var popupElement = getParentByClass(source, "popupWindow");	if(popupElement) {		var dim = document.getElementById("disableBackground");		popupElement.style.display = "";		var content = getElements("content", "div", popupElement);		if(content.length > 0) {			content[0].innerHTML = "";		}		else {			popupElement.innerHTML = "";		}		if(dim)			dim.style.display = "";		return true;	}	return false;}/************* FELTFUNKSJONER **************************/function axPathId(id) {	var pos = id.indexOf(".");	return pos>-1? id.substring(0, pos): id;}function axFile(id) {	var file = id.substring(id.indexOf("[")+1, id.indexOf("]"));	return parseInt(file);}function axRecord(id) {	var record;	var pos = id.indexOf("]");	if(pos != -1) {		record = id.substring(pos + 1);		var pos = record.indexOf("[");		if(pos != -1) {			record = record.substring(0, pos);			pos = record.indexOf(".");			if(pos != -1)				record = record.substring(0, pos);		}		else {			pos = record.indexOf(".");			if(pos != -1)				record = record.substring(0, pos);		}	}	else {		displayError("[axReplaceRecordId] Feil format på id.");	}	return record;}function axField(id) {	var field = id;	var pos = field.indexOf(".");	while(pos>-1) {		field = field.substring(pos+2, id.length);		pos = field.indexOf(".");	}	return parseInt(field);}function axLongFieldName(file, field) {	if((!isNaN(file)) && (!isNaN(field))) { 		var theTableName = fileName[file];		var theFieldNames = fieldNames[file];		var theFieldName = theFieldNames[field];		return "[" + theTableName + "]" + theFieldName;	}	else {		displayError("[axLongFieldName] Parameterne m&aring; v&aelig;re tall.");		}}function axFieldName(file, field) {	var theFieldNames = fieldNames[file];	var theFieldName = theFieldNames[field];	return theFieldName;}function axFileName(file) {	 return fileName[file];}function axFileNo(tableName) {	var pos = tableName.indexOf("[");	if(pos>-1)		tableName = tableName.substring(pos+1, tableName.indexOf("]"));	var table = fileNo[tableName];	if(!table) {		displayError("Ugyldig tabellnavn i kall til axFileNo (" + tableName+ ")");		return undefined;	}	else {		return table;	}}function axFieldNo(fieldName, file) {	if(!file) {		var pos = fieldName.indexOf("[");		if(pos>-1) {			tableName = fieldName.substring(pos+1, fieldName.indexOf("]"));			file = fileNo[tableName];			if (!file) {				displayError("Ugyldig tabellnavn i kall til axFieldNo (" + name+ ")");				return undefined;			}			else {				fieldName = fieldName.substring(fieldName.indexOf("]")+1, fieldName.length);			}		}	}	var fieldNos = fieldNo[file];	if(!fieldNos) {		displayError("Ugyldig feltnavn i kall til axFieldNo (" + name+ ")");		return undefined;	}	else {		return fieldNos[fieldName];	}}function axIdFieldName(id) {	var element = $(id);	if(element) {		var name = element.name;		if(!name) name = element.getAttribute("name");		if(name) {			var file = parseInt(name.substring(name.indexOf("[")+1, name.indexOf("]")));			var field = parseInt(name.substring(name.indexOf("]")+1, name.length));			if(!isNaN(field)) {				return axLongFieldName(file, field);			}			else {				return "[" + axFileName(file) + "]" + name.substring(name.indexOf("]")+1, name.length);			}		}	}	return "";}function axRelatedFile(id) {	var relatedFile = "0";	var pos = id.indexOf("[");	var path = id.substring(pos+1, id.length);	pos = id.indexOf("[");	if(pos>-1) {		path = id.substring(pos+1, path.length);		pos = id.indexOf("[");		while(pos>-1) {			path = id.substring(pos+1, path.length);			pos = id.indexOf("[");		}		pos = path.indexOf("]");		relatedFile = path.substring(0, pos);				}	return parseInt(relatedFile);}function axRelatedRecord(id) {	var relatedRecord = "0";	var pos = id.indexOf("[");	var path = id.substring(pos+1, id.length);	pos = id.indexOf("[");	if(pos>-1) {		path = id.substring(pos+1, path.length);		pos = id.indexOf("[");		while(pos>-1) {			path = id.substring(pos+1, path.length);			pos = id.indexOf("[");		}		pos = path.indexOf("]");		path = path.substring(pos, path.length);		pos = path.indexOf(".");		if(pos>-1) {			relatedRecord = path.substring(0, pos);		}		else {			relatedRecord = path;		}	}	return parseInt(relatedRecord);}function axGetIdFromLongName(name) {	var file = axFileNo(name);	var field = axFieldNo(name);	if(!field) {		return "[" + file + name.substring(name.indexOf("]"));		}	else {		if((file>0 ) && (field>0)) {			return "[" + file + "]" + field;		}		else if (file != 0) {			return "[" + file + "]";		}		else {			return "";		}	}}function axFileNameFromFieldname(name) {	var pos = name.lastIndexOf("]");	if(pos != -1) 		return name.substring(0, pos + 1);		return name;}/************* END FELTFUNKSJONER **************************/function validateInput(value, id) {	var newValue, oldValue;	newValue = value;	var oldElement = $("h" + id.substring(1));	if(oldElement) {		oldValue = oldElement.textContent		if(newValue != oldValue)			return customValidateInput(id, oldValue, newValue)		else			return ["1", newValue];	}	else {		return ["1", newValue];	}}function axAddOutputRow(element) {	var newRow;		//var clearDiv = document.createElement("div");	//clearDiv.setAttribute("style", "clear: both");		var row = getParentByClass(element, "oRow");		if(row) {		var area = row.parentNode;		if(area) {			newRow = row.cloneNode(true);			newRow.id = axReplaceRecordId(row.id);			//tømmer innholdet i inputs innenfor			var rowColumns = getElements("", "", newRow);			var oldrowColumns = getElements("", "", row);			for(var i = 0; i < rowColumns.length; i++) {				if(HasClassName(rowColumns[i], "relate")) {					rowColumns[i].onkeyup = selectRelated;				}				tag = rowColumns[i].tagName.toUpperCase();				id = rowColumns[i].id				className = rowColumns[i].className;				if(id) 					rowColumns[i].id = axReplaceRecordId(id);								switch (tag) {					case "INPUT":						type = rowColumns[i].type.toUpperCase();						switch (type) {							case "TEXT":								rowColumns[i].value = "";								rowColumns[i].setAttribute("value", "");								rowColumns[i].onblur = oldrowColumns[i].onblur;								break;							case "TEXTAREA":								rowColumns[i].value = "";								rowColumns[i].setAttribute("value", "");								rowColumns[i].innerHTML = "";								break;							case "CHECKBOX":								rowColumns[i].value = oldrowColumns[i].value;								rowColumns[i].setAttribute("value", oldrowColumns[i].value);								rowColumns[i].onclick = oldrowColumns[i].onclick;								break;							default:						}												break;					case "TEXTAREA":						rowColumns[i].value = "";						rowColumns[i].setAttribute("value", "");						rowColumns[i].innerHTML = "";						break;					case "DIV":						if(HasClassName(rowColumns[i], "D")) rowColumns[i].innerHTML = "";						if(HasClassName(rowColumns[i], "V")) rowColumns[i].innerHTML = "";						switch (className) {							case "old":							case "old mandatory":								rowColumns[i].innerHTML = "";								break;							case "delPict":							case "undelPict":								var delId = "d" + rowColumns[i].id.substring(1);								rowColumns[i].onclick = deleteRow;								break;						}						break;					case "SELECT":						// alert("select ikke implementert");						// bruke samme verdi?						break;					case "OPTION":						break;					default:										}			}						element.onblur = lostFocus;			insertAfter(area, newRow, row);			//insertAfter(area, newRow, clearDiv);			var rowColumnsInput = getElements("", "input", newRow);			var focusElement;			for(var i = 0; i < rowColumnsInput.length; i++) {				if(rowColumnsInput[i].type != "hidden") {					focusElement = rowColumnsInput[i];					break;				}			}			if(focusElement) {				var focus = function() { focusElement.focus() };				setTimeout (focus, 100);			}						var defaultValues = getElements("input", "div", newRow);			for(var i = 0; i < defaultValues.length; i++) {				theID = "o" + defaultValues[i].id.substring(1);				if($(theID)) {					axSetValueById(theID, defaultValues[i].getAttribute("name"), defaultValues[i].innerHTML);				}				else {				}			}					}	}	return newRow;}function insertAfter(parent, node, referenceNode) {	parent.insertBefore(node, referenceNode.nextSibling);}function axReplaceRecordId(id) {	var newRecord = axRecord(id);	newRecord = newRecord>0? -3: newRecord-1;	var newId = id;	var pos1 = id.indexOf("]");	if(pos1 != -1) {		id = id.substring(pos1);		var pos2 = id.indexOf("[");		if(pos2 != -1) {			newId = newId.substring(0, pos1 + 1) + newRecord + newId.substring(pos1 + pos2);		}		else {			newId = newId.substring(0, pos1 + 1) + newRecord;		}	}	else {		displayError("[axReplaceRecordId] Feil format på id.");	}	return newId;}function notValidated(notValid, type, doAlert) {	for(idName in notValid) {		if(idName != "length") {			label = (type=="output"? getColumnLabel(idName): getLabel(idName));			if(label) {				if(doAlert) {					alert(label + " er obligatorisk.");					input = $((type=="output"? "o": "i") + idName.substring(1));					if(input) setTimeout(function() {input.focus()}, 100);				}				break;			}		}	}}/************** GET OG SET FUNKSJONER **********************/function getLabel(id) {	var pos = id.lastIndexOf(".");	if(pos!=-1) {		iLabelId = "i" + id.substring(1, pos + 1) + "L" + id.substring(pos + 2);		oLabelId = "o" + id.substring(1, pos + 1) + "L" + id.substring(pos + 2);		labelElement = $(iLabelId);		if(labelElement) {			return labelElement.innerHTML;		}		else {			labelElement = $(oLabelId);			if(labelElement)				return labelElement.innerHTML;		}	}	return "";}function getColumnLabel(id) {	id = "o" + id.substring(1);	var labelId = "";	var theLabel;	var pos1 = id.lastIndexOf("]");	var pos2 = id.lastIndexOf(".");	if((pos1 != -1) && (pos2 != -1)) {		labelId = "o" + id.substring(1,pos1 + 1) + ".h" + id.substring(pos2 + 2);		labelElement = $(labelId);		if(labelElement) {			theLabel = labelElement.innerHTML;		}		else {			pos1 = id.indexOf("]");			pos2 = id.substring(pos1).indexOf("[");		 	if(pos2 !=-1) {		 		labelId = id.substring(0, pos1 +1) +id.substring(pos1 + pos2);		 		pos1 = labelId.lastIndexOf(".");		 		if(pos1 != -1) {		 			labelId = labelId.substring(0, pos1) + ".h" + labelId.substring(pos1+2);		 			labelElement = $(labelId);		 			if(labelElement) {		 				theLabel = labelElement.innerHTML;		 			}		 			else {		 				theLabel = "unknown label";					}				}			}		}	}	return theLabel;}/* Hjelpefunksjoner for skreddersømsfunksjonene */function getParentByClass(element, className) {	var parent = element.parentNode;	while(parent) {		if(HasClassName(parent, className)) {			break;		}		parent = parent.parentNode;	}	return parent;}function getParentByTagname(element, tagName) {	var parent = element.parentNode;	while(parent) {		if(parent.tagName.toLowerCase() == tagName.toLowerCase()) {			break;		}		parent = parent.parentNode;	}	return parent;}function getRecordElement (id) {	var parent = getParentByClass($(id), "oRow");	if(parent) return parent;		var onTopParent = getParentByClass($(id), "popupWindow");	if(onTopParent) return onTopParent;		var area = getArea(id);	return $(area + "Record");}function getParentElement(id) {	var area = getArea(id);	top = isOnTop(id);	return $(area + "Record" + (top? "Window": ""));}function getArea (id) {  var name = id.substring(0,id.indexOf("["));  var name = name.substring(name.indexOf("_")+2);  return name;}function isRowDeleted (id) {	var row = getRecordElement(id);	if(row) {		var theId = row.id;		theId = "d" + theId.substring(1);		var del = $(theId);		if(del) {			if(HasClassName(del, "undelPict")) {				return true;			}		}	}	return false;}/* isNewRow skal returnere true dersom 1ste (mandatory) felt ikke er fylt ut */function isNewRow (id) {	var row = getRecordElement(id);	var mandatory = getElements("mandatory", "", row);	if(mandatory.length > 0) {		return mandatory[0].innerHTML == "";	}	return false;}function setValue(id, value) {	var element = $(id)	if(element) {		var formatedValue;		var className = element.getAttribute("class");		if(!HasClassName(element, "input")) {			format = element.getAttribute("format")			if(format) {				if(format.length > 0) {					formatedValue = theString(value, format);				}			}			setValueById(id, formatedValue? formatedValue: value);		}	}}function getElementsFromName(className, tagName, root, name) {	var array = [];	var elements = getElements(className, tagName, root);	for(var i = elements.length - 1; i >= 0; i--) {		if(elements[i].getAttribute("name") == name) {			array[array.length] = elements[i];		}	}	return array;}function getNotNestedByClass(array, className) {	for(var i = array.length - 1; i >= 0; i--) {		if(getChildByClass(array[i], className))			array.splice(i, 1);	}}function getChildByClass(element, className) {	var children = element.childNodes;	var ELEMENT_NODE = 1;	for(var i = 0; i < children.length; i++) {		if(children[i].nodeType == ELEMENT_NODE) {			if(HasClassName(children[i], className)) {				return children[i];				break;			}			else {				child = getChildByClass(children[i], className);				if(child) {					return child;					break;				}			}				}	}	return undefined;}/* Funksjoner for skreddersøm *//* axSetValueFromName, Let opper til du finner enten en kalsse av oRow eller areaRecord, Let deretter etter den cellen med gitt navn */function axSetValue(id, name, value) {	return axSetValueById(id, axGetIdFromLongName(name), value);}function axSetValueById(id, name, value) {	if (axID(id)) {	var container = getRecordElement(id);	if(container) {		var elements = getElementsFromName("", "", container, name);		for(var i = 0; i < elements.length; i++) {			setValue(elements[i].id, value);		}	}	}}/* axSetValueFromName, Let opper til du finner areaRecord, Let deretter etter den cellen med gitt navn */function axSetParentValue (id, name, value) {	var area = getArea(id);	var container = $(area + "Record");	var elements = getElementsFromName("", "", container, axGetIdFromLongName(name));	for(var i = 0; i < elements.length; i++) {		setValue(elements[i].id, value);	}	}function axGetValue(id, name) {	return axGetValueById(id, axGetIdFromLongName(name));}function axGetValueById(id, name) {	var root = getRecordElement(id);	var elements = getElementsFromName("", "", root, name); 	for(var i = 0; i < elements.length; i++) {		if(HasClassName(elements[i], "old")) return elements[i].innerHTML;	}	if(elements.length > 0) {		if(!HasClassName(elements[0], "input")) {			return getValueById(elements[0].id);		}		else if(elements.length > 1) {			return getValueById(elements[1].id);		}	}	return undefined;}function getValueByElementId(id) {	var element = $(id);	if(element) {		return axGetValueById(id, element.getAttribute("name"));	}}function setValueByElementId(id, value) {	var element = $(id);	if(element) {		axSetValueById(id, element.getAttribute("name"), value);	}}function axGetParentValue(id, name) {	var root = getParentElement(id);	var elements = getElementsFromName("", "", root, axGetIdFromLongName(name)); 	for(var i = 0; i < elements.length; i++) {		if(HasClassName(elements[i], "old")) return elements[i].innerHTML;	}	if(elements.length > 0) {		if(!HasClassName(elements[0], "input")) {			return getValueById(elements[0].id);		}		else if(elements.length > 1) {			return getValueById(elements[1].id);		}	}	return undefined;}function getNumberById(id, name) {	return theNum(getValueById(id, name));}function axGetNumber(id, name) {	return theNum(axGetValue(id, name));}function axGetParentNumber(id, name) {	return theNum(axGetParentValue(id, name));}/* axGetSum, Let opper til du finner areaRecord, Let deretter etter alle cellen med gitt navn. Summer disse dersom de ikke er slettet og mandatory feltet er fylt ut */function axGetSum(id, name) {	var area = getArea(id);	var ids = getIdsFromName("", "", getParentElement(id), name, "o" + area);	var sum = 0.0;	for(var i = 0; i < ids.length; i++) {		if((!isRowDeleted(ids[i])) && (!isNewRow(ids[i]))) {			sum += getNumberById(ids[i], name);		}	}	return sum;}function getIdsFromName(className, tagname, root, name, prefix) {	return getIdsFromId(className, tagname, root, axGetIdFromLongName(name), prefix);}function getIdsFromId(className, tagName, root, theId, prefix) {	/*theId = [25]3 = axGetIdFormLongName("[Ordrelinjer]Netto")*/	var ids = [];	var elements = getElementsFromName("", "", root, theId);	var elementIds = [];	for(var i = elements.length - 1; i >= 0; i--) {		if (!HasClassName(elements[i], "Head")) {				theId = elements[i].id;			theId = prefix + theId.substring(theId.indexOf("["));			index = arrayFirstIndexOf(ids, theId);			if(index == -1) {				ids[ids.length] = theId;			}		}	}	return ids;}/* axGetIncluded skal lete opp til den finner areaRecord. Leter deretter alle celler med navnet og returnerer alle verdier i alle cellers old verdier i et array uavhengig av om de er slettet el. */function axGetIncluded (id, name) {	var area = getArea(id);	var ids = getIdsFromName("", "", getParentElement(id), name, "o" + area);	for (var i = 0; i<ids.length; i++) {		ids[i] = getValueByElementId(ids[i]);	}	return ids;}function axGetIncludedNumbers (id, name) {	var verdier = axGetIncluded(id, name);	for(var i = 0; i < verdier.length; i++) {		verdier[i] = theReal(verdier[i]);	}	return verdier;}/* axSetIncluded skal sette celleverdier. Let opp til den finner areaRecord. Leter deretter alle celler og oppdaterer disses verdier uavhengig av om de er slettet el. *//* var array brutto = axGetIncludedNumbers(id, "[Ordrelinjer]Netto"); var mva = axGetParentNumber (id, "[Ordre]MVA"); axSetIncluded(id, "[Ordrelinjer]Brutto, brutto); */ function axSetIncluded (id, name, values) {	var area = getArea(id);	var ids = getIdsFromName("", "", getParentElement(id), name, "o" + area);	for (var i = 0; i<ids.length; i++) {		ids[i] = setValueByElementId(ids[i], values[i]);	}}function axSetFocus(id, name) {	var root;	if(id.indexOf("Record")!=-1) {		var area = getArea(id);		root = $(area + "Record");	}		else {			root = $(id);	}	if(root) {		var elements = getElementsFromName("", "", root, axGetIdFromLongName(name));		for(var i = 0; i < elements.length; i++) {			if((!HasClassName(elements[i], "old")) && (!HasClassName(elements[i], "input"))) {				setFocus(elements[i]);				if(elements[i].focus) {					elements[i].focus();				}			}		}			}}/***************** END GET OG SET FUNKSJONER **********************/function axUpdateTable(id, name) {	var areaId = getAreaFromId(id);	areaId = areaId + "Record";	var area = $(areaId);	if(area) {		var outputs = getElements("output", "div", area);		getNotNestedByClass(outputs, "output");		var rows;		for(var i = 0; i < outputs.length; i++) {			rows = getElements("row", "div", outputs[i]);			for(var j = 0; j < rows.length; j++) {				customUpdateRow(rows[j].id, name);			}			if(rows.length>0) customUpdateRowEnd(rows[0].id, name);		}	}}function theReal (nr) {	nr = nr.replace(".", "");	return parseFloat(nr.replace(",","."));}function validateSelection (area) {	var validated = {ok: true, theValues: {utvalg: "", deleted: ""}};	var rows = getElements("row", "div", area);	var rowValues = {}; var notValid = {};	var allValid = true;	var id = "";	for(var i = 0; i < rows.length; i++) {		//validerer hver enkelt rad		notValid = getHidden(rows[i], rowValues);		if((notValid.length > 0) && (!HasClassName(rows[i], "del"))) {			if(i == rows.length - 1) {  //Ta ikke med siste elementet om det ikke validerer				//notValidated(notValid, "output", true);				//validated.ok = false;			}			else {				var inputs = getElements("", "input", rows[i]);				var firstInput;				for(var i = 0; i < inputs.length; i++) {					if(inputs[i].type != "hidden") {						firstInput = inputs[i];						break;					}				}				if(firstInput) {					if(!("h" + firstInput.id.substring(1) in notValid)) {						notValidated(notValid, "output", true);						validated.ok = false;					}					}			}			break;		}		else {			var empty = emptyRow(rows[i]);			if((!HasClassName(rows[i], "del")) && (!(empty))) {				for(id in rowValues) {					validated.theValues[id] = rowValues[id];					delete rowValues[id];				}			}						id = rows[i].id;			if(id) {				validated.theValues["utvalg"] += (i==0 ? "" : " ") + id;				if(HasClassName(rows[i], "del"))					validated.theValues["deleted"] += (validated.theValues["deleted"].length==0? "" : " ") + id;			}		}	}	return validated;}function axDisplayRecord(area, path, table, record, modify) {	var id = area + "[" + table + "]" + record;	var method =  "getRecord?source=" + (modify? "&modify=1": "");	onClick(id, area, method, table, "none");}function mySetFocus(obj) {	if(obj.focus)		obj.focus();}function SetLogoutCookie(name, value) {	var exdate = new Date();	exdate.setDate(exdate.getDate() + 1);	var expires = "; expires=" + exdate.toGMTString();	document.cookie = name + "=" + value + expires+"; path=/";}function Checklogout(name) {	var c_start = document.cookie.indexOf(name + "=");	if (c_start != -1) {		c_start = c_start + (name.length + 1);		c_end = document.cookie.indexOf(";",c_start)		if (c_end == -1) {			c_end = document.cookie.length;		}		if(document.cookie.substring(c_start,c_end) == "true") {			return true;		}               	}	return false;}function cookiesEnabled(name) {	if(!name) name = "test_"	Set_Cookie(name, 1);	if(Get_Cookie(name)) {		Delete_Cookie(name);		return true;	}	return false;	}function RedirectToLoginPage(name) {	if (Checklogout(name)) {		window.location = window.location.protocol + "//" + window.location.hostname + "/4daction/ax";	}}function checkForHttps() {	var protocol = window.location.protocol;	if(protocol == "http:") {		if(!(isTestServer(window.location.host))) {			window.location = "https://" + window.location.hostname.replace("www.", "") + window.location.pathname;		}	}}function isTestServer(host) {	var isTest = false;	var test = host.indexOf("test");	var ip = Math.max(Math.max(host.indexOf("10."),host.indexOf("192.")), host.indexOf("127."));	if((test > -1) || (ip == 0)) {		isTest = true;	}	return isTest;}function isOnTop (element) {	if(getParentByClass(element, "popupWindow"))		return true;	return false;}function moveRowDown(id, area) {	id = "r_" + id;	var row = $(id);	var theArea = $(area);	setSelectedRow(id, area);	if((row) && (theArea)) {		var rows = getElements("oRow", "div", theArea);		var ii = rows.length;		if(ii>1) {			for(var i = 0; i < ii; i++) {				if(rows[i].id == id) {					removeElement(id);					if(i < ii-2) {						theArea.insertBefore(rows[i], rows[i+2]);					}					else if(i == ii-2) { //Til bunn						theArea.appendChild(rows[i]);					}					else if (i == ii-1) { //Siste						theArea.insertBefore(rows[i], rows[0]);					}				}			}		}	}}function windowResized() {	dimBg = $("disableBackground");	var eSize;	if(dimBg) {		if(dimBg.style.display == "block") {			var pSize = getPageSize();			dimBg.style.width = pSize[0] + "px";			dimBg.style.height = pSize[1] + "px";		}	}	var popup = $("popup");	if(popup) {		if(popup.style.display == "block") {			eSize = getElementSize(popup);			myCenter(popup, eSize[0], eSize[1]);			myRelatedFollow();		}	}}function windowOnScroll(e) {	dimBg = $("disableBackground");	var eSize;	if(dimBg) {		if((dimBg.style.display == "block") && (!window.scrollMaxX)){			eSize = getElementSize(dimBg);			myCenter(dimBg, eSize[0], eSize[1], 0);			}	}	var popup = $("popup");	if(popup) {		if(popup.style.display == "block") {			eSize = getElementSize(popup);			myCenter(popup, eSize[0], eSize[1]);			myRelatedFollow();		}	}}function getAxParameter(theValues, name) {	var value = "";	var parameters = "";	parameters = theValues.axParameters;	if(parameters) {		parameters = parameters.replace("&amp;", "&");		var pos = parameters.indexOf("&" + name + "=");		if(pos > -1 ) {			value = parameters.substring(pos + 2 + name.length);			pos = value.indexOf("&");			if(pos > - 1)					value = value.substring(0, pos);			return value;		}	}	return undefined;}function getFormValue(theValues, id, record) {	var pos = id.indexOf("]");	if(pos > -1) {		var theId = "i" + theValues["div"] + id.substring(0, pos + 1) + record + ".E" + id.substring(pos + 1);		if(theValues[theId])			return theValues[theId];	}	return undefined;}function emptyRow(root) {	var inputs = getElements("E", "input", root);	for(var i = 0; i < inputs.length; i ++ ) {		if(inputs[i].value.length > 0)			return false;	}	var options = getElements("", "option", root);	for(var i = 0; i < options.length; i ++ ) 		if((options[i].checked== true) && (options[i].value != 0)  && (options[i].value != "")) {			return false;	}	return true;}function WA_Logout(name) {	Delete_Cookie(name + "_" + gup("ASP"), "/");	if(!(customLogout(name)))		window.location = window.location.protocol + "//" + window.location.hostname + "/";}function WindowOnLoad() {	customWindowOnLoad();}function myRelatedFollow() {	var selRelated = $("selectRelated");	if(selRelated.style.display == "block") {			var ePos = getObjPos(searchInput);			var height = searchInput.offsetHeight;			selRelated.style.top = ePos[0] + height + "px";			selRelated.style.left = ePos[1] + "px";	}}function axID(id) {	if (id.indexOf("[")<0) {		return false;	}	else {		return true;	}}