var OP = navigator.userAgent.toLowerCase().indexOf("opera") != -1;
var IE = !OP && document.all;
if (IE == null) IE = false;
var FF = navigator.userAgent.toLowerCase().indexOf("firefox") != -1;

var jsessionid;
var name = "";
var version = "1";
var mode = 0;
var startmode = mode;
var title = "";
var uniqueid = "";
var selColor = "#0A246A";
var noColor = "#FFFFFF";
var errColor = "#FF0000";
var olditem;
var onSubmit = false;
var isChanged = false;
var isSaved = false;
var isClosed = false;
var lookup = false;
var foreignUNIDName;
var foreignUNIDValue;
var currentField = null;
var isRecord = true; //Nodig om te bepalen dat zich in een frame een record bevind;
var itemhasfocus = false;
var linkhasfocus = false;
var tabkey = false;
var sendalive = true;
var helpidname = "-1";
var closeW = false;
var isBeingSaved = false;
var lastitem = null;
var maxlookuprows = 18;
var lookupKey = "";
var lookupCol = 1;
var skip = false;
var skipextra = true;
var errorInRecord = false;
var iframesaved = false;
var debugFrame = null;
var bw;
var delfunctie;
var checkitemcounter = 0;
var isConcept = false;
var cw = false;
	
//dummy functie
function dummy() {}

function newDebugFrame()
{
	if (wt.debug)
	{
		debugFrame = window.open("about:blank", "_blank", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width=400, height=400");
		debugFrame.document.write("<br><hr>");
	}
}

function writeDebug(text)
{
	if (wt.debug)
	{
		debugFrame.document.write(text);
		debugFrame.window.scrollBy(100, 100);
	}
}

function writeDebugLine(text)
{
	writeDebug(text+"<br>");
}

function onSelectStart(event)
{
	event = getEvent(event);
	var item = getElement(event);
	return isContentEditable(item);
}

function quit(closeWindow)
{
	var cont = true;
	try {cont = beforeClose();} catch(e) {}

	if (cont && !onSubmit)
	{
		var xml = createXML(CLOSEFORM);
		if (xml != null && xml != "")
		{
			sendEmptyRequest(); // Dit wordt gedaan om met SSL de 12030 (keepalive) error tegen te gaan.
			
			cw = closeWindow;
			
			/*$.ajax({
				   type: "POST",
				   url: fixURL(IOSERVLETURL),
				   cache: false,
				   dataType: "xml",
				   data: string2XML(xml),
				   processData: false,
				   error: function (XMLHttpRequest, textStatus, errorThrown) 
				   {						    
					   alert("Er is een fout opgetreden: " + textStatus);
				   },
				   success: function (xmlDoc, textStatus) 
				   {	
					   var error = "";
					   var msg = "";
					
						try
						{
							error = getNodeValue("message", 0, "error", xmlDoc);
							msg = getNodeValue("message", 0, "msg", xmlDoc);
						}
						catch(e)
						{
							sendalive = false;
							onSubmit = false;
							alert(MSG_CONNECTION_SERVER_LOST);
							error = "";
							if(cw)
							{
								undoModal(false);
								
								if (!isClosed) 
								{
									isClosed = true;
									showPreviousFrame(isSaved);
								}					
							}
						}
					
						if (error != "")
						{
							alert(error);
							error = "";
							isSaved=false;
							isChanged=true;
							onSubmit=false;
							
							if (!undoModal(true)) focusCurrentFrame();
						}
						else
						{
							if (msg != "")
							{
								alert(msg);
								msg = "";
							}
							if (cw)
							{
								isChanged = false; 
								sendalive = false;
								onSubmit = false;
								var newURL = null;
								try {newURL = openNewURLAfterClose(xmlDoc);} catch(e) {}
					
								undoModal(false);
					
								if (!isClosed) 
								{
									isClosed = true;
									showPreviousFrame(isSaved, newURL);
								}
								try	{specificAfterClose();} catch (e) {}					
							}
						}
						try {printFilesToPrint(xmlDoc);} catch(e) {}
						try {downloadFilesToDownload(xmlDoc);} catch(e) {}					
				   }
				 });
			
			*/
			var xml_ajax_close = getXMLHttpRequest();
			
			xml_ajax_close.onreadystatechange = function()
			{
				try
				{
					if (xml_ajax_close.readyState == 4)
					{		
						if (xml_ajax_close.status == 200)
						{
							var xmlDoc = string2XML(xml_ajax_close.responseText);
						
							var error = "";
							var msg = "";
						
							try
							{
								error = getNodeValue("message", 0, "error", xmlDoc);
								msg = getNodeValue("message", 0, "msg", xmlDoc);
							}
							catch(e)
							{
								sendalive = false;
								onSubmit = false;
								alert(MSG_CONNECTION_SERVER_LOST);
								error = "";
								if(cw)
								{
									undoModal(false);
									
									if (!isClosed) 
									{
										isClosed = true;
										showPreviousFrame(isSaved);
									}					
								}
							}
						
							if (error != "")
							{
								alert(error);
								error = "";
								isSaved=false;
								isChanged=true;
								onSubmit=false;
								
								if (!undoModal(true)) focusCurrentFrame();
							}
							else
							{
								if (msg != "")
								{
									alert(msg);
									msg = "";
								}
								if (cw)
								{
									isChanged = false; 
									sendalive = false;
									onSubmit = false;
									var newURL = null;
									try {newURL = openNewURLAfterClose(xmlDoc);} catch(e) {}
						
									undoModal(false);
						
									if (!isClosed) 
									{
										isClosed = true;
										showPreviousFrame(isSaved, newURL);
									}
									try	{specificAfterClose();} catch (e) {}					
								}
							}
							try {printFilesToPrint(xmlDoc);} catch(e) {}
							try {downloadFilesToDownload(xmlDoc);} catch(e) {}
						}
						else
						{
							onSubmit = false;			
							alert(MSG_CONNECTION_SERVER_LOST + "\n - Status: " + xml_ajax_close.status);
						}
												
						xml_ajax_close = null;
						cw = false;
					}		
				}
				catch (e)
				{
					onSubmit = false;
					alert(e.message);
				}
			};
			
			if (xml_ajax_close != null)
			{
				try
				{
					xml_ajax_close.open("POST", fixURL(IOSERVLETURL), true);
					xml_ajax_close.setRequestHeader("Content-type", "application/x-www-form-URLencoded");

					onSubmit = true; // mag niet later staan i.v.m. met synchrone berichten 
					xml_ajax_close.send(xml);
				}
				catch (e) {alert(e.message);}
			}
		}
	}
	else if (!cont) if (lastitem != null) try {lastitem.focus();} catch (e) {focusCurrentFrame();}
}

function createXML(action)
{
	if (document.forms[0])
	{
		var el = document.forms[0].elements;
		var ell = el.length;
		var i = 0;
		var radioButton = "";
		var xml = "<form id=\"" + name + "\" version=\"" + version + "\" action=\"" + action + "\" uniqueid=\"" + el.uniqueid.value + "\" isSaved=\"" + isSaved + "\" isConcept=\"" + isConcept + "\">";
		var eli;
	
		while (i < ell)
		{
			eli	= el[i];
			
			if (getAttribute(eli, "block") == null)
			{
				switch(eli.tagName)
				{
				 	case "INPUT":
				 	{
					 	switch(eli.type)
					 	{
						 	case "text":
							{						
								xml = xml + "<field id=\"" + eli.id + "\">" + specialCharCheck(eli.value)+ "</field>";
								xml = xml + addFuidValue(xml, eli)
								break;
							}
							case "hidden":
							{
								
								xml = xml + "<field id=\"" + eli.id + "\">" + specialCharCheck(eli.value) + "</field>";
								
								break;
							}
							case "checkbox":
							{
								if (getAttribute(eli, "group")!=null && getAttribute(eli, "group")=="true")
								{
									//alleen bij de 1e input van de checkboxgroup de xml opbouwen
									var id = eli.id;
									if (id.substring(id.length-2, id.length) == "_0") 
									{										
										xml = xml + getCheckboxGroupValues(eli);									
									}
								}
								else
								{
									xml = xml + "<field id=\"" + eli.id + "\">" + eli.checked + "</field>";
								}
								break;
							}
							case "radio":
							{
								var rbname = eli.name;
								if(radioButton != rbname) // Er mag maar een field tag op het xmlform
								{													 		
							 		xml = xml + "<field id=\"" + rbname + "\">" + specialCharCheck(getRadioValue(rbname)) + "</field>";
								}
								break;
							}
							case "password":
							{
								xml = xml + "<field id=\"" + eli.id + "\">" + specialCharCheck(eli.value)+ "</field>";
								if (getAttribute(eli, "fuidname"))
								{
									var fuidValue = getAttribute(eli, "fuidvalue");
									if (fuidValue == null) fuidValue = "";
									xml = xml + "<field id=\"" + getAttribute(eli, "fuidname") + "\">" + fuidValue + "</field>";
								}
								break;
							}
	/*						Deze case is waarschijnlijk niet meer nodig.
							case "button":
							{
								try{xml = xml + "<field id=\"" + eli.id + "\">" + eli.unid + "</field>";}catch(e){}
								break;
							}
	*/
						}
						break;
				 	}
				 	case "SELECT":
				 	{						
				 		xml = xml + "<field id=\"" + eli.id + "\">" + specialCharCheck(eli.value) + "</field>";
						xml = xml + addFuidValue(xml, eli);		
					
						break;
				 	}
				 	case "TEXTAREA":
				 	{
						xml = xml + "<field id=\"" + eli.id + "\">" + specialCharCheck(eli.value) + "</field>";
						break;
				 	}
				} // end switch
			}
			i++;
		}
		xml = xml + "</form>";
	
		wt.previousXML = xml;
		// alert(xml);
		return xml;
	}
	else return "";
}

function addFuidValue(xml, eli)
{	
	var tmpXML = "";
	if (getAttribute(eli, "fuidname") != null)
	{
		var fuidValue = getAttribute(eli, "fuidvalue");
		if (fuidValue == null) fuidValue = "";
		tmpXML = "<field id=\"" + getAttribute(eli, "fuidname") + "\">" + fuidValue + "</field>";		
	}
	
	return tmpXML;
}

function getCheckboxGroupValues(eli)
{
	var k				= 0;
	var item			= eli;
	var name			= eli.id.substring(0, eli.id.length-2);		
	var xml_unid		= "<field id=\"" + getAttribute(eli, "fuidname") + "\">";
	var xml				= "<field id=\"" + name + "\">";		
	var first			= true;
	
	while(item != null)
	{
		if (item.checked)
		{
			if (!first) {xml   = xml + "_sep_";xml_unid = xml_unid + "_sep_";}
			else 		first = false;
			
			xml			= xml + specialCharCheck(item.value);
			xml_unid	= xml_unid + getAttribute(item, "fuidvalue");
		}
		
		k				= k + 1;				
		item			= document.getElementById(name + "_" + k);		
	}
	
	xml					= xml 	   + "</field>";
	xml_unid			= xml_unid + "</field>";
	
	return xml + xml_unid;
}

function excludePath(path)
{
	var pos = path.lastIndexOf("\\");
	if(pos != -1)
	{
		path = path.substring(pos+1,path.length);
		return path;
	}
	else return path;	
}

function setDelete(id)
{
	try
	{
		specificSetDelete(id);
	}
	catch (e)
	{
		if (confirm("Moet het bestand verwijderd worden?"))
		{
			isChanged = true;
			/*
			document.getElementById(id).fuidvalue = "";
			document.getElementById(id).value = "";
			*/
			document.getElementById(id).setAttribute("fuidvalue", "");
			document.getElementById(id).setAttribute("value", "");
			alert("Zodra u het record opslaat, zal het bestand worden verwijderd!");
		}
		else document.getElementById(id).deleted = "false";
	}
}

function checkBeforeDownload(uniqueid)
{
	if (uniqueid > 0)	download("/" + CONTEXTNAME + "/DownloadServlet;jsessionid=" + jsessionid + "?uniqueid="+uniqueid);
	else				alert("Er is geen bestand aan het record gekoppeld, als u net een bestand hebt toegevoegd, moet u het record een keer herladen");
}

function clearChangeFields()
{
	try
	{
		var fields = document.getElementsByTagName("INPUT");
		var l = fields.length;
		for (var i = 0; i<l; i++)
		{
			if(fields[i].changegroupid != null)
			{
				var cb = document.getElementById("c_"+fields[i].id);
				if(!cb.checked)fields[i].value = "";
			}
		}
	}
	catch(e){}
}

function saveConcept()
{
	if (checkForm())
	{	
		isConcept			= true;
		
		save(false, true);
				
		return true;
	}
	else return false;
}

function save(closeWindow, async)
{
	var test_onsub = onSubmit;
	var test_ibs = isBeingSaved;

	if (!onSubmit && !isBeingSaved)
	{
		try
		{
			if (mode == MODE_ADD)
			{
				document.getElementById("invmdw").fuidvalue = getUserUnid();
				document.getElementById("invmdw").value = getUser();
				document.getElementById("invdat").value = getDate();
				document.getElementById("invtijd").value = getTime();
			}
		}
		catch (e) {}

		try
		{
			document.getElementById("mutmdw").fuidvalue = getUserUnid();
			document.getElementById("mutmdw").value = getUser();
			document.getElementById("mutdat").value = getDate();
			document.getElementById("muttijd").value = getTime();
		}
		catch (e) {}
				
		isBeingSaved = true;
		var cont = true;
		try {cont = beforeSave();} catch(e) {}

		clearChangeFields(); // alle change velden die wel ingevuld zijn maar niet zijn aangevinkt worden leeg gemaakt.

		errorInRecord = !checkForm();

		if (cont && mode != MODE_READ && isChanged && !errorInRecord)
		{
			closeW = closeWindow;
			
			sendEmptyRequest(); // Dit wordt gedaan om met SSL de 12030 (keepalive) error tegen te gaan.
		/*				
			$.ajax({
				   type: "POST",
				   url: fixURL(IOSERVLETURL),
				   cache: false,
				   dataType: "xml",
				   data: string2XML(xml),
				   processData: false,
				   error: function (XMLHttpRequest, textStatus, errorThrown) 
				   {						    
					   alert("Er is een fout opgetreden: " + textStatus);
				   },
				   success: function (xmlDoc, textStatus) 
				   {	
						var error = getNodeValue("message", 0, "error", xmlDoc);

						if (error == "")
						{
							var msg = getNodeValue("message", 0, "msg", xmlDoc);
							if (msg != "") alert(msg);
							
							switch (mode)
							{
								case MODE_ADD:
								case MODE_FORCEADD:
								{
									try {afterSaveSucces();} catch(e) {}
									
									if (!isConcept)
									{
										document.forms[0].mode.value = MODE_EDIT;
										mode = parseInt(document.forms[0].mode.value);

										setTitle(title, mode);
										isChanged = false;
										isSaved = true;
										try {afterSave(closeW);} catch(e) {}
									}
									else isConcept = false;

									loopUploaders();
									onSubmit = false;
									isBeingSaved = false;
									if (closeW) quit(true);
									else if (lastitem != null) try {lastitem.focus();} catch (e) {}
									
									try {printFilesToPrint(xmlDoc);} catch(e) {}
									try {downloadFilesToDownload(xmlDoc);} catch(e) {}
									
									return true;
									break;
								}
								case MODE_EDIT:
								case MODE_FORCEEDIT:
								{
									if (!isConcept)
									{
										isChanged = false;
										isSaved = true;
										try {afterSave(closeW);} catch(e) {}
									}
									else isConcept = false;
									
									loopUploaders();
									onSubmit = false;
									isBeingSaved = false;
									if (closeW) quit(true);
									else if (lastitem != null) try {lastitem.focus();} catch (e) {}
															
									try {printFilesToPrint(xmlDoc);} catch(e) {}
									try {downloadFilesToDownload(xmlDoc);} catch(e) {}
									
									return true;
								}
							}								
						}
						else
						{
							alert(error);
							isChanged = true;
							onSubmit = false;
							isBeingSaved = false;
							isConcept = false;
							undoModal(true);
							try {specificErrorHandler();} catch (e){}
							return false;
						}			

				   }
				 });
			
			processbar();
			*/
			if (async == null) async = true;
			
			var xml_ajax_save = getXMLHttpRequest();				
			
			if (xml_ajax_save != null)
			{	
				xml_ajax_save.onreadystatechange = function()
				{
					if (xml_ajax_save.readyState == 4)
					{
						if (xml_ajax_save.status == 200)
						{
							var xmlDoc = string2XML(xml_ajax_save.responseText);
	
							var error = getNodeValue("message", 0, "error", xmlDoc);
	
							if (error == "")
							{
								var msg = getNodeValue("message", 0, "msg", xmlDoc);
								if (msg != "") alert(msg);
								
								switch (mode)
								{
									case MODE_ADD:
									case MODE_FORCEADD:
									{
										try {afterSaveSucces();} catch(e) {}
										
										if (!isConcept)
										{
											document.forms[0].mode.value = MODE_EDIT;
											mode = parseInt(document.forms[0].mode.value);
	
											setTitle(title, mode);
											isChanged = false;
											isSaved = true;
											try {afterSave(closeW);} catch(e) {}
										}
										else isConcept = false;
	
										loopUploaders();
										onSubmit = false;
										isBeingSaved = false;
										if (closeW) quit(true);
										else if (lastitem != null) try {lastitem.focus();} catch (e) {}
										
										try {printFilesToPrint(xmlDoc);} catch(e) {}
										try {downloadFilesToDownload(xmlDoc);} catch(e) {}
										
										return true;
										break;
									}
									case MODE_EDIT:
									case MODE_FORCEEDIT:
									{
										if (!isConcept)
										{
											isChanged = false;
											isSaved = true;
											try {afterSave(closeW);} catch(e) {}
										}
										else isConcept = false;
										
										loopUploaders();
										onSubmit = false;
										isBeingSaved = false;
										if (closeW) quit(true);
										else if (lastitem != null) try {lastitem.focus();} catch (e) {}
																
										try {printFilesToPrint(xmlDoc);} catch(e) {}
										try {downloadFilesToDownload(xmlDoc);} catch(e) {}
										
										return true; 
									}
								}								
							}
							else
							{
								alert(error);
								isChanged = true;
								onSubmit = false;
								isBeingSaved = false;
								isConcept = false;
								undoModal(true);
								try {specificErrorHandler();} catch (e){}
								return false;
							}			
						}
						else
						{
							onSubmit = false;
							isBeingSaved = false;
							alert(MSG_CONNECTION_SERVER_LOST + "\n - Status: " + xml_ajax_save.status);
							if (closeW) quit(true);
							return true;
						}
													
						xml_ajax_save = null;
					}
				}
				
				try
				{						
					xml_ajax_save.open("POST", fixURL(IOSERVLETURL), async);
					xml_ajax_save.setRequestHeader("Content-type", "application/x-www-form-URLencoded");

					onSubmit = true; // mag niet later staan i.v.m. met synchrone berichten
					xml_ajax_save.send(createXML(SAVEFORM));
					processbar();
				}
				catch (e) {alert(e.message);}
			}
			
			return true;
		}
		else
		{
			onSubmit 		= false;
			isBeingSaved 	= false;
			isConcept		= false;
			
			return false;
		}
	}
	else return false;
}

function processbar()
{
	try
	{
		if (isBeingSaved)
		{
			doModal();
			var defaultmsg = "Bezig met opslaan";
			var msg = getStatusMessage().replace(/&nbsp;/g, " ");
			if (msg.indexOf(defaultmsg) == -1 || msg.length >= (defaultmsg.length + 25)) setStatusMessage(defaultmsg, true);
			setStatusMessage(getStatusMessage() + "&nbsp;.", true);
			setTimeout("processbar()", 45);
		}
		else
		{
			setStatusMessage(nextmsg);
			undoModal(false);
		}
	}
	catch (e) {}
}

function loopUploaders()
{
	var el = document.forms[0].elements;
	var i = 0;

	while (i < el.length)
	{
		if(el[i].type == "file")
		{
			el[i].changed = "false";
			el[i].deleted = "false";
		}
		i++;
	}
}

function getMessageFieldById(mid, xmlDoc)
{
	main = xmlDoc.getElementsByTagName("message")[0];
	value = "";

	for (j=0;j<main.childNodes.length;j++)
	{
		cn = main.childNodes[j];
		// Netscape slaat lege nodes niet over, IE doet dit wel. Dus controle op type.
		if (cn.nodeType != 1) continue;

		if (getAttribute(cn, "id") == mid)
		{
			if (cn.firstChild != null) value = cn.firstChild.nodeValue;
		}
	}
	return value;
}

function init(sessionid)
{
	jsessionid 	= sessionid;	
	bw 			= getOrganisationCode() == "Bizzwise";
	
	try{initExtraLabels();}catch(e){}

	try
	{
		var ifs = window.frames;
		var j = ifs.length;
		for (var i = 0; i<j; i++)
		{
			if (ifs[i].name != "lookup" && ifs[i].name != "")
			{
				ifs[i].document.getElementById("titlebar").style.display = "inline";
				ifs[i].focusCurrentFrame();
			}
		}
	}
	catch(e){}
	
	var form = document.forms[0];
 	try{initMenus()}catch(e){}
 	mode = parseInt(form.mode.value);
  	if(isNaN(mode)) mode = MODE_READ;
  	startmode = mode;
	name = form.formname.value;
	version = form.formversion.value;

	title = form.title.value;
	if (title == "") title = name;

	initFields();

	try{initTabs();}catch(e){}

	uniqueid = form.uniqueid.value;
	foreignUNIDName = form.foreignUNIDName.value;
	foreignUNIDValue = form.foreignUNIDValue.value;

	if (window.specificInitOptions) specificInitOptions();
	if (window.specificInit) specificInit();

	var warningMsg = form.warningMsg.value;
	if (warningMsg != "") alert(warningMsg);
	setTimeout("sendAlive(30)", 30 * 1000);
	initDragOver();

	try
	{
		// TH: Dit is niet de bedoeling!
		if (name != "PrinterlijstWerkstation" && name != "Werkstation")
		document.getElementById("wsid").value = getWorkstation();
	}
	catch(e){}

	addEvents();	
	stopLoading();
}

function addEvents()
{
	document.onkeydown		= onKeyDownHandler;
	document.onkeypress		= onKeyPressHandler;
	document.onkeyup		= onKeyUpHandler;
	document.onselectstart	= onSelectStart;
	document.onclick		= onClickHandler;
	document.ondblclick		= onClickHandler;	
}

function onKeyPressHandler(event)
{
	event					= getEvent(event);
	if (isLoading()) return rejectEveryThing(event);
}

function initExtraLabels()
{
	var elnparameter = getParam("extralabelnames");

	if(elnparameter != "")
	{
		var elvparameter = getParam("extralabelvalues").replace("'","");
		var elsection = document.getElementById("extralabels");
		var elrows = "";

		elsection.style.display = "block";
		var elns = elnparameter.split(",");
		var elvs = elvparameter.split(",");
		for (var i = 0; i<elns.length; i++)
		{
			elrows += "<tr class=\"eltr\"><td class=\"eltd\">"+elns[i]+"</td><td class=\"eltd\">"+elvs[i]+"</td></tr>";
		}
		elsection.innerHTML = "Hoofdrecord gegevens: <br/><table class=\"eltable\">"+elrows+"</table>";
	}
}

function initTitle()
{
	setTitle(title, mode);
}

function setTitle(name, mode) // zet de titel van het window goed
{
	if (name != "")
	{
		try {specificSetTitle(name, mode);}
		catch (e)
		{
			try 
			{
				var extraTitle = "";
				if(numberOfVisibleTabs > 1) extraTitle = "  [Alt-1.."+numberOfTabs+": Tabkeuze] ";
				var t = name + " : " + MODE_STRINGS[mode] + extraTitle;
				wt.document.title = t;
			}
			catch (e2) {}
		}
	}
}

function initFields() // ga alle velden na en initialiseer ze
{
	if (mode != MODE_READ)
	{
		var el	= document.forms[0].elements;
		var ell = el.length;	
	
		for (var i = 0; i < ell; i++) setField(el[i]);
			
		var links	= document.getElementsByTagName("A");
		var linksl	= links.length;
		
		for (var i = 0; i < linksl; i++) setLink(links[i]);		
	}

	skipextra = false;
}

function setField(elI)
{
	if (getAttribute(elI, "type") != "hidden")
	{
		if (!elI.onblur && !elI.onfocus)
		{			
			elI.onblur 	= onBlurHandler;
			elI.onfocus = onFocusHandler;
		}
		
		if (getAttribute(elI, "valid") == null)
		{
			if (getAttribute(elI, "req") == "true")
			{
				if (isCheckBoxGroup(elI)) checkReqCheckBoxGroup(elI, true);
				else				
				{
					if (elI.value == "")
					{
						elI.setAttribute("valid", "false");
						setErrorClass(elI);
					}
					else elI.setAttribute("valid", "true");
				}
			}
			else
			{
				if (getAttribute(elI, "valid") != "false") elI.setAttribute("valid", "true");
			}
		}
	
		setOldQmapValue(elI);
	
		if (bw)
		{
			if (elI.changegroupid != null)
			{
				elI.setAttribute("valid", "true");
				setErrorClass(elI);
			}
	
			try
			{
				var gp = getGlobalParameter(elI.id);
				if (gp != "" && elI.value == "" && mode == MODE_ADD)
				{
					elI.value = gp;
					elI.setAttribute("valid", "true");
					setErrorClass(elI);
					elI.style.border = "1px solid yellow";
				}
			}
			catch(e) {}			
		}	
		
		if (getFType(elI) == "D") 
		{			
			if (getAttribute(elI, "valid") != "true")
			{
				elI.setAttribute("errmsg", getLabel(elI) + " dient van de vorm dd-mm-jjjj te zijn.");				
			}
		}
	}
}

function setLink(elI)
{
	if (!elI.onblur && !elI.onfocus)
	{
		elI.onblur 	= onBlurLinkHandler;
		elI.onfocus = onFocusLinkHandler;
	}
}

function onBlurLinkHandler()
{
	linkhasfocus = false;
}

function onFocusLinkHandler()
{
	linkhasfocus = true;
}

function focusFirstElement() //Ga naar het eerste geldig invoerveld
{
	// Probeer naar het eerste veld te gaan ..
	if (mode != MODE_READ)
	{
		var iframe;

		if (visibleTabPages == "") 	iframe = document.getElementsByTagName("iframe");
		else 						iframe = visibleTabPages[activeTab].getElementsByTagName("iframe");

		fields			= document.getElementsByTagName("input"); 
		b 				= true;
		var hasFocus 	= false;
		i 				= 0;
		var fl			= fields.length;
		var fi;

		while (b)
		{
			if (iframe.length > 0)
			{
				b		 = false;
				hasFocus = true;

				window.frames[iframe[0].name].focus();
			}				
			else if (fl > 0 && i < fl)
			{
				fi 		= fields[i];
				
				if (fi.className.indexOf("readonly") == -1 && isItemVisible(fi))
				{
					b 	= false;

					hasFocus 	= switchTabToField(fi);
					fi.focus();					
				}
	
				i = i + 1;
	
				if (fl == i+1) b = false;
			}
			else b = false;				
		}
		// Als er nu nog nergens focus is gegeven dan het body focus geven

		if(!hasFocus) window.focus();
	}
	else
	{
		window.focus();
	}
}

function onKeyDownHandler(event)
{
	event = getEvent(event);
	
	if (!isLoading() && !isLookupOpen() && !isMessageBoxOpen())
	{
		var item = getElement(event);

	 	if (event.altKey)
	  	{
	  		switch(event.keyCode)
			{
				/*G*/case 71: {if(item.unique == "true") getUniqueNumber(item); } break;
				/**/ case 18: {return false; break;}
				/**/ case 36: {event.keyCode = 37; return false; break;}
				/**/ case 37: {return false; break;}
				/**/ case 39: {return false; break;}
				/*1*/case 49: {checkItem(item); try{switchTo(0);} catch (e) {} break;}
				/*2*/case 50: {checkItem(item); try{switchTo(1);} catch (e) {} break;}
				/*3*/case 51: {checkItem(item); try{switchTo(2);} catch (e) {} break;}
				/*4*/case 52: {checkItem(item); try{switchTo(3);} catch (e) {} break;}
				/*5*/case 53: {checkItem(item); try{switchTo(4);} catch (e) {} break;} // tab module
				/*6*/case 54: {checkItem(item); try{switchTo(5);} catch (e) {} break;}
				/*7*/case 55: {checkItem(item); try{switchTo(6);} catch (e) {} break;}
				/*8*/case 56: {checkItem(item); try{switchTo(7);} catch (e) {} break;}
				/*9*/case 57: {checkItem(item); try{switchTo(8);} catch (e) {} break;}
				/*0*/case 48: {checkItem(item); try{switchTo(9);} catch (e) {} break;}
		 		/*N*/case 78: {writeDebug("<hr>");           break;}
				/*F4*/ case 115: {event.keyCode = 30; return false; break;}
				default:
				{					
					try
					{
						event.keyCode = 0;
					}
					catch (e) {}
					rejectEveryThing(event);
					return false;
				}
				break;
			}
		}

		if(event.ctrlKey)
		{
	  		switch(event.keyCode)
			{
				/*B*/ case 66: {event.keyCode = 0; return false; break;}
		 		/*E*/ case 69: {event.keyCode = 0; return false; break;}
		 		/*F*/ case 70: {event.keyCode = 0; return false; break;}
		 		/*H*/ case 72: {event.keyCode = 0; return false; break;}
		 		/*I*/ case 73: {event.keyCode = 0; return false; break;}
		 		/*L*/ case 76: {event.keyCode = 0; return false; break;}
		 		/*N*/ case 78: {event.keyCode = 0; return false; break;}
		 		/*O*/ case 79: {event.keyCode = 0; return false; break;}
		 		/*R*/ case 82: {event.keyCode = 0; return false; break;}
				/*S*/ case 83: {checkItem(item); save(false); return false;} break;//opslaan
				/*V*/ case 86: {isChanged = true; item.isChanged = "true";} break;
				/*W*/ case 87: {event.keyCode = 0; return false; break;}
				/*F1*/ case 112:{try{openHelp(name,item,"UIRecord",true);}catch(e) {} return false; } break;//help				
		   	}
	 	}
		else
		{
			switch(event.keyCode)
			{
				/*BSP*/case 8:  {if(!isContentEditable(item)) {return false;}else{isChanged = true; item.isChanged = "true";} break;}
				/*Tab*/case 9:  {tabkey = true; if(mode == MODE_READ) {return false;}break;}
				/*ENT*/case 13: {if (item.tagName == "TEXTAREA") {isChanged = true;} return focusNextElement(item, event); break;}
				/*SHFT*/case 16: {return true; break;}
				/*ESC*/case 27: {askQuit(); return false; } break;//formulier sluiten
				/*INS*/case 45: {isChanged = true; insertPreviousData(item); rejectEveryThing(event); try {item.focus();} catch (e) {} return false; break;}
				/*F1*/case 112: {try{openHelp(name, item,"UIRecord",false);} catch(e){} return false; } break;//help
				/*F3*/case 114: {event.keyCode=0; try{focusPreviousElement(item, event);}catch(e){} return false; break;}
				/*F4*/case 115: {checkItem(item); selectAction(item, "F4", jsessionid); event.cancelBubble = true; event.keyCode = 30; return false;} break;//opzoeken
				/*F5*/case 116: {checkItem(item); selectAction(item, "F5", jsessionid); return refreshCurrentFrame(false, event); break;}
				/*F6*/case 117: {checkItem(item); saveAndClose(true); return false; break;} //opslaan en afsluiten
				/*F7*/case 118: {checkItem(item); if(checkTab() && activeTab > 0)switchTo(activeTab - 1); return false; break;}
				/*F8*/case 119: {checkItem(item); if(activeTab + 1 >= numberOfVisibleTabs) {saveAndClose(true);} else {if(checkTab()) {switchTo(activeTab + 1);}} return false; break;}
				/*F9*/case 120: {if (window.specificGlobalActionF9)  {specificGlobalActionF9(item);}  event.keyCode = 0; return false; break;}
				/*F10*/case 121: 
				{
					if (item.tagName == "TEXTAREA") {zoomTextArea(item); event.keyCode = 0;}
					else if (window.specificGlobalActionF10) 
					{
						checkItem(item); 
						specificGlobalActionF10(item);
					} 
					
					event.keyCode = 0; 
					return false; 
				
					break;
				}
		   		/*F11*/case 122: {if (window.specificGlobalActionF11) {checkItem(item); specificGlobalActionF11(item);} event.keyCode = 0; return false; break;}		   		
		   		/*F12*/case 123: {if (window.specificGlobalActionF12) {checkItem(item); specificGlobalActionF12(item);} if (!wt.debug) {event.keyCode = 0; return false;} break;}		   		
				default: {if(mode != MODE_READ) {isChanged = true; item.isChanged = "true";}}
			}
		}
	}
	else 
	{
		if (!(cal != null && !cal.hidden) && !isMessageBoxOpen()) return rejectEveryThing(event);
	}
}

function onBlurHandler(event)
{
	event = getEvent(event);
	var item = getElement(event);

	if (canElementHaveFocus(item))
	{
		item.className = item.className.replace(" selected","");
		item.value = item.value; // Nodig om de waarde te deselecteren (er is geen deselect() functie)
		setStatusMessage("");

		checkitemcounter = 0;

 		checkItem(item);

		itemhasfocus = false;

		if (IE && tabkey) {setTimeout("checkFocus()", 25);}

		try {onBlurSpecial(item);} catch (e) {}

		item.isChanged = "false";
	}
	
	ep = false
}

function checkItem(item)
{
	checkitemcounter = checkitemcounter + 1;

	if (!lookup /*&& mode != MODE_READ*/)
	{
		if (getAttribute(item, "allowmultiplevalues") == "true")
		{
			item.values	= item.value.replace(/(, |,)/g, "_sep_"); // Een komma in een waarde werkt niet goed!
		}

		try {checkInput(item);} catch(e) {}
		try {checkSpecial(item, event);} 
		catch(e) 
		{
			//voor mozilla browser:
			try{checkSpecial(item);} catch(e){}
		}
		try {checkSpecial2(item, event);} catch(e) {}

		setOldQmapValue(item);
		setErrorClass(item);
	}
}

function checkFocus()
{
	if (!itemhasfocus && !linkhasfocus && !lookup && !wt.dialog) gotoFirst();
	tabkey = false;
	wt.dialog = false;
}

function setErrorClass(item, force)
{	
	if (force == null) force = false;
		
	if ((mode != MODE_READ && isContentEditable(item)) || force)
	{
		var estr	= " error";

		if (item.className.indexOf(estr) > -1) item.className = item.className.replace(estr, "");

		if (getAttribute(item, "valid") != "true") item.className = item.className + estr;
		else 
		{
			if (getAttribute(item, "errmsg") != "")	item.setAttribute("errmsg", "");
		}
	}
}

function onKeyUpHandler(event)
{
	return recordOnKeyUpHandler(event, mode);
}

function recordOnKeyUpHandler(event, mode)
{
	if (!isLoading())
	{
	    event = getEvent(event);
	    var item = getElement(event);

		try
		{
			if ((mode != MODE_READ) && isValidInputKey(event.keyCode)) isValidInput(item);		
			if (mode != MODE_READ) setErrorClass(item);
		}
		catch (e) {}
	}
	else return rejectEveryThing(event);
}

function isValidInputKey(kc)
{
	return !((kc == 35) || (kc == 36) || (kc == 37) || (kc == 39) || (kc == 9) || (kc == 13) || (kc == 16))
}

function onFocusHandler(event)
{	
	itemhasfocus = true;
    event = getEvent(event);
    var item = getElement(event);
    var originalItem = item;
    lastitem = item;	
	
	if (skip)
	{
		skip = false;
		return false;
	}

	if(event.shiftKey)
	{
		try
		{
			var prev = getPreviousValidElement(item);
			if (prev != null)
			{
				if (item.id != prev.id) prev.focus();
				if (prev.type == "text" || prev.type == "password") prev.select();
				item = prev;
			}
			else if (item.type == "text" || item.type == "password") item.select();
		}
		catch(e){}
	}
	else
	{
		try
		{
			var next = getNextValidElement(item);

			if (next != null)
			{
				if (item.id != next.id) next.focus();
				if (next.type == "text" || next.type == "password") next.select();
				item = next;
			}
			else if (isContentEditable(item)) item.select();
			else gotofirst();
		}
		catch(e){}
	}

	var ccf = document.getElementById("c_"+item.id);

	if (getAttribute(item, "valid") == "true" && isContentEditable(item))
	{
		item.oldValue = item.value;
		if (getAttribute(item, "qmapping") != null) item.oldQmapValue = item.value;
		if (item.className.indexOf("selected") == -1) item.className += " selected";
		if(ccf != null && !ccf.checked && originalItem != item)
		{
			if(getAttribute(item, "req") == "true")				
			{
				if (isCheckBoxGroup(item)) checkReqCheckBoxGroup(item, true)
				else
				{
					if (item.value == "")
					{
						item.setAttribute("valid", "false");
						setErrorClass(item);
					}
				}
			}
		}
	}
	else if(ccf != null && ccf.checked && originalItem != item)// als er focus wordt gezet op een checkbox van een change_field
	{
		// hij wordt uitgevinkt en dus is het veld in orde
		item.setAttribute("valid", "true");
		setErrorClass(item);
		if (item.className.indexOf("selected") == -1) item.className += " selected";
	}

	var extramessage = "";
	try {extramessage = extraLookupMessage(item);} catch (e) {}

	var msg = "";

	if ((getAttribute(item, "qmapping") != null || getFType(item) == "D") && getFType(item) != "PW2" && item.readOnly == false)
	{
		msg = "[F4: Zoeken";
		if (extramessage != null && extramessage != "") msg = msg + ", F5: " + extramessage;
	}
	else if (extramessage != null && extramessage != "") msg = msg + "[F5: " + extramessage;
	else if (item.tagName == "TEXTAREA") msg = "[F10: Vergroten";

	var globalmsg = "";

	try
	{
		var op = "[";
		if (msg != "") op = ", ";
		var sgm = specificGlobalMessage(item);
		if (sgm != null & sgm != "") globalmsg = op + sgm;
	}
	catch (e) {globalmsg = ""}

	msg = msg + globalmsg;

	if (msg != "") msg = msg + "] ";
	setStatusMessage(msg);
}

function getPreviousValidElement(item) 
{
	if (canElementHaveFocus(item)) return item;
	else
	{
		var f = false;

		var el;

		if (visibleTabPages == "") el = document.getElementsByTagName("*");
		else el = visibleTabPages[activeTab].getElementsByTagName("*");

		var ell = el.length;
		for (var i = ell-1; i>-1; i--)
		{
			if(item.id && item.id == el[i].id) f = true;
			if(f)
			{
				if (canElementHaveFocus(el[i]))
				{
					return el[i];
				}
				if(i == 0) gotoFirst();
			}
		}
		if(!f){return null;}
	}
}

function getNextValidElement(item) 
{
	if (canElementHaveFocus(item)) return item;
	else
	{
		var f = false;
		var el;

		if (visibleTabPages == "") el = document.getElementsByTagName("*");
		else el = visibleTabPages[activeTab].getElementsByTagName("*");
		
		var ell = el.length;
		for (var i = 0; i<ell; i++)
		{
			if(item.id && item.id == el[i].id) f = true;
			if(f)
			{
				if (canElementHaveFocus(el[i]))
				{
					return el[i];
				}
				if(i == ell-1) gotoFirst();
			}
		}
		if(!f){return null;}
	}
}

function canElementHaveFocus(item)
{
	return (item.tagName == "INPUT" || item.tagName == "SELECT" || item.tagName == "TEXTAREA" || item.tagName == "BUTTON") && 
		   (item.type == "text" || item.type == "password" || item.type == "file" || item.type == "textarea" || item.type == "select-one" || item.type == "radio" || item.type == "button" || item.type == "checkbox") && 
		   (isContentEditable(item) || item.type == "select-one" || item.type == "radio" || item.type == "button" || item.type == "checkbox") && isItemVisible(item);
}

function isItemVisible(item)
{
	var visible = true;

	if (item.style)
	{
		visible = visible && (item.style.visible != "hidden");
		visible = visible && (item.style.display != "none");
	}
	
	if (item.type) visible = visible && (item.type != "hidden");

	if (!visible) return false;
	else
	{
		var parentitem = item.parentNode;
		if (parentitem != null) return isItemVisible(parentitem); else return true;
	}
}


// de eerste classindicatie is het type van het veld!
function getFType(item)
{
	return item.className.split(" ")[0];
}

function needsValidCheck(item)
{
	switch(getFType(item))
	{
		case "A": return true; break;
		case "A1": return true; break;
		case "A2": return true; break;
		case "A3": return true; break;
		case "A4": return true; break;
		case "A5": return true; break;
		case "A6": return true; break;
		case "N": return true; break;
		case "NL": return true; break;
		case "N2": return true; break;
		case "N3": return true; break;
		case "N4": return true; break;
		case "NE": return true; break;
		case "NE2": return true; break;
		case "P": return true; break;
		case "P2": return true; break;
		case "P3": return true; break;
		case "P4": return true; break;
		case "M": return true; break;
		case "M2": return true; break;
		case "M3": return true; break;
		case "D": return true; break;
		case "T": return true; break;
		case "K": return true; break;
		case "S": return true; break;
		case "IP4": return true; break;
		case "PW2": return true; break;
		case "EM": return true; break;
		case "WS": return true; break;
		default : return false; break;
	}
}

function isValidInput(item)
{
	if(needsValidCheck(item))
	{
		var ftype = getFType(item);
		var newValue = item.value;
		var oldValid = getAttribute(item, "valid");
		var arg1 = getAttribute(item, "arg1");
		var arg2 = getAttribute(item, "arg2");
		//transform value to proper input
		transformedNewValue = transform(newValue, ftype, arg1, arg2);
		if (transformedNewValue!=newValue) {item.value = transformedNewValue; newValue = transformedNewValue;}
		//alert("value :"+item.value+"\nisValid? :"+isValid(newValue, ftype, arg1, arg2)+"\nisCorrectType? :"+isCorrectType(newValue, ftype, arg1, arg2)+"\ntransformValue :"+transform(newValue, ftype, arg1, arg2));
		if (isValid(newValue, ftype, arg1, arg2))
		{
			//alert("test");
			if(isCorrectType(newValue, ftype, arg1, arg2))
			{
				// ftype N3 is voor getallen die geen 0 mogen zijn.
				if((ftype == "N2" || ftype == "N4") && newValue == "-") return false;
				if(ftype == "N3") if(parseFloat(newValue) == 0) return false;
				item.oldValue = item.value;
				return true;
			}
			else
			{
				if(item.oldValue && (ftype != "D" && ftype != "T" && ftype !="K" && ftype != "S" && ftype !="EM" && ftype != "WS" && ftype != "IP4")) item.value = item.oldValue;
				else if(ftype == "D" || ftype == "T" || ftype == "K" || ftype == "S" || ftype == "EM" || ftype == "WS" || ftype == "IP4"){item.value = newValue;}
				else item.value = "";
				return false;
			}
		}
		else
		{
			if(item.oldValue && (ftype != "D" && ftype != "T" && ftype != "K" && ftype != "S" && ftype != "EM" && ftype != "WS" && ftype != "IP4"))
			{
				item.value = item.oldValue;
			}
			else item.value = "";

			if (oldValid == "true") return true; else return false;
		}
	}
	else return true;
}

function checkInput(item)
{
	if(mode != MODE_READ)
	{				
	    var oldValid = getAttribute(item, "valid");

	    if (item.isChanged == "true") copyBeginEndValue(item);

	    var oldValue = item.oldValue;
	    item.setAttribute("valid", ""+isValidInput(item));
	    var cb = document.getElementById("c_"+item.id);
		
		if (item.tagName == "SELECT")
		{					
			if (getAttribute(item, "fuidname") != null && getAttribute(item, "fuidname") != "")
			{
				var n = item.childNodes;
				var k = 0;
				var found = false;
				
				while (k < n.length && !found)
				{
					found = (n[k].value == item.value);
					
					if (!found)	k = k + 1;
				}
											
				item.setAttribute("fuidvalue", getAttribute(n[k], "fuidvalue"));				
			}
		}
		
		if (item.tagName != "TEXTAREA")	item.value = trim(item.value);

		if (getAttribute(item, "req") == "true" && (cb == null || cb.checked))
		{		
			if (isCheckBoxGroup(item)) checkReqCheckBoxGroup(item, true);
			else
			{
				if (getAttribute(item, "qmapping") != null) quickQmapLookup(item, oldValid);			
				else
				{					
					if (item.value == "")
					{										
						item.setAttribute("valid", "false");
						if (item.fuidname) item.fuidvalue = "";
						emptyQmappingFields(item);
					}				
				}
			}
		}
		else
		{
			if (item.value == "") 	emptyQmappingFields(item);
			else					quickQmapLookup(item,oldValid);			
		}

		if (getAttribute(item, "unique") == "true" && isChanged) checkUniqueValue(item);
				
		if (getFType(item) == "D") 
		{			
			if (getAttribute(item, "valid") != "true")
			{
				item.setAttribute("errmsg", getLabel(item) + " dient van de vorm dd-mm-jjjj te zijn.");				
			}
		}
	}
}

function isCheckBoxGroup(item)
{		
	return (getAttribute(item,"type") == "checkbox" && getAttribute(item,"group") == "true"	);	
}

function checkReqCheckBoxGroup(eli, setErrClass)
{	
	var id = eli.id;

	if (id.substring(id.length-2, id.length) == "_0") 
	{
		var k				= 0;
		var item			= eli;
		var name			= eli.id.substring(0, eli.id.length-2);				
		var found			= false
		
		while(item != null && !found)
		{
			if (item.checked)
			{
				found		= true;
			}
			else
			{		
				k			= k + 1;				
				item		= document.getElementById(name + "_" + k);
			}		
		}
		
		if (found) eli.setAttribute("valid", "true");
		else	   eli.setAttribute("valid", "false");

		if (setErrClass) setErrorClass(eli);
	}
}

function quickQmapLookup(item, oldValid)
{
	var allowmultiplevalues	= item.allowmultiplevalues == "true";
	var itemid 				= item.id;
	var keyValue;
	
	if (allowmultiplevalues) keyValue = corr(item.values);
	else 					 
	{
		var t = item.value;
		var ft = getFType(item);

		if (ft == "N" || ft == "N2" || ft == "N3" || ft == "N4") 
		{
			t = t.replace(/,/g, ".");		
		}
		
		keyValue = corr(t);
	}

	var it = "";
	try {it = specialItem(item, "");} catch (e) {it = "";}
	if (it == null) it = "";
	if (it != "") item = it;

 	if (getAttribute(item, "qmapping") != null)
 	{
 		var newValue;
 		
		if (allowmultiplevalues) newValue = item.values;
		else newValue = item.value;

 		if (getAttribute(item, "oldQmapValue") != newValue)
 		{
	 		if (allowmultiplevalues) item.oldQmapValue = item.values;
	 		else item.oldQmapValue = item.value;
	 		
	 		item.isChanged = "true";
	 		var i = 0;
	 		var j = 0;
	 		var url = IOSERVLETURL + "?action=10&uniqueid=" + uniqueid +"&name="+name+"&item="+itemid;

			var queryid = "";
			try {queryid = specialQueryId(item, "F4");} catch (e) {queryid = "";}
			if (queryid == null) queryid = "";
		
			if (queryid == "")
			{
				queryid = getAttribute(item, "queryid");
			}

			url = url + "&queryid=" + queryid;
	 		url = url + "&key=" + keyValue;

	 		if (window.extraQmapParameters && !skipextra) url = url + window.extraQmapParameters(item, getAttribute(item, "queryid"));

			var fuidname = getAttribute(item, "fuidname");
			var bfuidname = false;
			var checkFields = getAttribute(item, "qmapping").split("_<split>_");
			var cl = checkFields.length;

	 		while (i<cl)
 			{
	 			if (j == 1 && fuidname)
	 			{
					url = url+"&A"+j+"="+fuidname+"&V"+j+"="+fuidname;
					bfuidname = true;
				}
				else
				{
					url = url+"&A"+j+"="+checkFields[i]+"&V"+j+"="+checkFields[i+1];
	 				i = i + 2;
				}

	 			j++;
 			}

			if (fuidname && !bfuidname) url = url+"&A"+j+"="+fuidname+"&V"+j+"="+fuidname;

 			processXMLDoc(url, "afterServerCheck");
	 	}
	 	else item.setAttribute("valid", oldValid);
 	}
}

function checkUniqueValue(item)
{
	var field = item.id;
	var value = corr(item.value);
	var fuidstr = "";
	var extraUniqueCheckParameters = "";

	if (item.fuidname)
	{
		fuidstr = "&foreignUNIDName=" + item.fuidname + "&foreignUNIDValue=" + item.fuidvalue;
	}
	try{extraUniqueCheckParameters = getExtraUniqueCheckParameters()}catch(e){}
	url = IOSERVLETURL + "?action=13&name=" + name + "&field=" + field + "&value=" + value + "&uniqueid=" + uniqueid + fuidstr + extraUniqueCheckParameters;

	if(value != "")processXMLDoc(url, "afterServerCheck");
}

function sendAlive(seconds)
{
	if (sendalive)
	{
  		var url = IOSERVLETURL + ";jsessionid=" + jsessionid + "?action=3&name="+name+"&uniqueid="+uniqueid;
  		
  		processXMLDoc(url, null, true, true);
   		setTimeout("sendAlive(" + seconds + ")", seconds * 1000);
   	}
}

function lookupInTable(item, fkey, jsessionid, width)
{
	var it = "";
	try {it = specialItem(item, fkey);} catch (e) {it = "";}
	if (it == null) it = "";
	if (it != "") item = it;

	queryid = "";
	try {queryid = specialQueryId(item, fkey);} catch (e) {queryid = "";}
	if (queryid == null) queryid = "";

	if (queryid == "")
	{
		if (fkey == null || fkey == "F4" || it != "") queryid = getAttribute(item, "queryid");
	}

	if (queryid == null) queryid = "";

  	if (queryid != "")
  	{
  		startLoading();
		lookup = true;
  		currentField = item; // wordt gebruikt in UIWindow.js
  		var exp;
  		try {exp = extraLookupParameters(item, queryid, fkey);}
  		catch(e) {exp = ""}
  		if (exp == null) exp = "";
  		qm = getAttribute(item, "qmapping").split("_<split>_");
  		source = qm[0];
  		target = qm[1];

  		try {lookupKey = lookupSearchKey(item, fkey);}
  		catch (e) {}
  		if (lookupKey == null) lookupKey = "";

		var mlr = null;
		try {mlr = maxLookupRows(queryid);} catch (e) {mrl = null;}
		if (mlr == null) mlr = maxlookuprows;

		if (!IE) mlr = mlr - 3;

		openLookup(item, "/" + CONTEXTNAME + "/jsp/atsc/UITableIFrame.jsp;jsessionid=" + jsessionid + "?queryid=" + queryid +"&mode="+MODE_SELECT+"&source="+ source + "&target=" +target + "&maxrows=" + mlr + exp, jsessionid, width);			
  	}
}

function openWebSite(item, fkey)
{
	if (fkey != "F5")
	{
		var fieldname = item.id;
		if(fieldname.substring(0,1)=="i")
		{
			fieldname = fieldname.substring(1,fieldname.length);
		}

		var url = document.getElementById(fieldname).value;
		if(url!="")
		{
			if(url.indexOf("http://") != -1) window.open(url);
			else window.open("http://"+url);
		}
		else alert("Er is geen website ingevuld");
	}
}

function sendemail(item, fkey)
{
	if (fkey != "F5")
	{
		var fieldname = item.id;
		
		if (fieldname.substring(0,1)=="i") fieldname = fieldname.substring(1,fieldname.length);
		
		var emailadr=document.getElementById(fieldname).value;
		
		if (emailadr!="") window.open("mailto:"+emailadr);
		else alert("Er is geen e-mailadres ingevuld");
	}
}

function selectdate(item, fkey)
{
	if (fkey != "F5")
	{	
		var fieldname;
		if (getAttribute(item, "fieldid") != null) fieldname = getAttribute(item, "fieldid");
		else fieldname = item.id;

		var dateitem = document.getElementById(fieldname);
		currentField = dateitem;
		isChanged = true;
		
		showCalendar(dateitem.id, "%d-%m-%Y");			
	}
}

function uirecordselecttime(item)
{
	selectTime(item);
	isChanged = true;
}

function uniquewarning(item)
{
	alert(UNIQUE_WARNING);
}

function selectAction(item, fkey, jsessionid)
{
	if (!isReadOnly(item) && item.type != "password")
	{
		isChanged = true;
		var ftype = getFType(item);

		switch(ftype)
		{
				case "WS": openWebSite(item, fkey); break;
				case "EM": sendemail(item, fkey); break;
				case "D": selectdate(item, fkey); break;
				case "A1": lookupInTable(item, fkey, jsessionid); break;
				case "UL": openUploadWindow(item.filefield); break;
				default: lookupInTable(item, fkey, jsessionid); break;
		}
	}
}

function removeLookupOption(input)
{
	input.disabledLookupField = "true";
	input.qmapping = "";
	input.queryid = "";
	image = document.getElementById("i"+input.id);
	if(image != null) image.style.visibility = "hidden";
}

function addLookupOption(input,qmapping,queryid)
{
	input.disabledLookupField = "false";
	input.qmapping = qmapping;
	input.queryid = queryid;
	image = document.getElementById("i"+input.id);
	if(image != null) image.style.visibility = "";
}

function afterServerCheck(recXML)
{
	var ioservletresponseTag = recXML.getElementsByTagName("ioservletresponse")[0];
	var type = ioservletresponseTag.getAttribute("type");

	var requestFieldTag = recXML.getElementsByTagName("requestfield")[0];
	
	var requestFieldElement;

	if (document.forms[0] != null) requestFieldElement = document.forms[0].elements[requestFieldTag.getAttribute("id")];
	else requestFieldElement = window.parent.opener.vArguments[0].forms[0].elements[requestFieldTag.getAttribute("id")];

	var qmapfields = recXML.getElementsByTagName("qmapfield");
	var hasMoreResults = requestFieldTag.getAttribute("moreresults") == "true";

	var errmsg = requestFieldTag.getAttribute("errmsg");

	if (errmsg != null && errmsg != "") // Er is een fout
	{
		requestFieldElement.setAttribute("errmsg", errmsg);

		if (type == "quicklookup")
		{
			if(hasMoreResults)
			{
				try
				{
					lookupKey = requestFieldElement.value.toLowerCase();
					lookupInTable(requestFieldElement, "F4");
				}
				catch(e)
				{
					alert(1 +"\n"+ e.message);
				}
			}
			
			if (requestFieldElement.getAttribute("allowvaluesnotinlist") == "false") // Waarde moet overeenkomen met tabel
			{			
				if (requestFieldElement.getAttribute("req") == "true" || requestFieldElement.value != "") requestFieldElement.setAttribute("valid", "false");
				else emptyQmappingFields(requestFieldElement);
			}
			else // Alle waarden zijn toegestaan
			{
				if (requestFieldElement.getAttribute("req") == "true" && requestFieldElement.value == "") requestFieldElement.setAttribute("valid", "false");
				else
				{
					//requestFieldElement.setAttribute("valid", "true");
					checkItem(requestFieldElement);
					emptyQmappingFields(requestFieldElement);
				}
			}
		}
		else if (type == "uniquecheck")
		{
			requestFieldElement.setAttribute("valid", "false");
		}

		setErrorClass(requestFieldElement);
		isChanged = true;
	}
	else // Geen fout
	{
		var allowmultiplevalues = (requestFieldElement.allowmultiplevalues == "true");
		var val					= requestFieldTag.getAttribute("value");
	
		if (!allowmultiplevalues) requestFieldElement.value = val;
		else 
		{
			requestFieldElement.values = val;
			requestFieldElement.value = val.replace(/_sep_/g, ", ");
		}
		
		requestFieldElement.removeAttribute("errmsg");		
		requestFieldElement.setAttribute("valid", "true");

		var ql = qmapfields.length;
		var qf;
		var waarde;

		for(var k=0; k<ql; k++)
		{
			qf = qmapfields[k];
			waarde = qf.getAttribute("value");

			if(waarde == "null" || waarde == "&nbsp;") waarde = "";
			if (waarde.indexOf("_<newline>_") > -1) waarde = waarde.replace(/_<newline>_/g, "\n");

			try
			{
				isChanged = true;
				var naam = qf.getAttribute("id");

				if (naam == requestFieldElement.getAttribute("fuidname"))
				{
					requestFieldElement.setAttribute("fuidvalue", waarde);
				}
				else
				{
					var el = document.forms[0].elements[naam];

					el.value = waarde;					
					checkItem(el);
				}
			}
			catch(e){}
		}

		/*RB: 06-04-2004

		Dit is er in gebouwd om ervoor te zorgen dat gegevens van een andere relatie overgenomen kunnen worden
		daarna moeten ze opgeslagen worden in het nieuwe relatierecord.
		Op zich zou dit niet nodig moeten zijn omdat de uniquecheck altijd na de quickqmaplookup plaatsvindt.
		Echter op een of andere manier zet die quickmapLookup een variabele waardoor de uniquecheck die er dan
		achteraan komt het betreffende veld niet meer op valid zet.
		*/

		// Controleren of dit nog nodig is

		if (type == "uniquecheck" && requestFieldElement.qmapping != null)
		{			
			requestFieldElement.setAttribute("valid", "true");
			setErrorClass(requestFieldElement);
		}
	}

	try{specificAfterServerCheck(requestFieldElement,recXML);}catch(e){}
}

function emptyQmappingFields(item)
{
	if (!item.fuidname || item.fuidname.indexOf("sysfls_unid") == -1)
	{
		empty = true;
	
		try {empty = emptyQmapField(item);} catch (e) {empty = true;}
	
		if (getAttribute(item, "qmapping") != null && empty)
		{
			item.fuidvalue = "";
	
			if (item.oldQmapValue != null && item.oldQmapValue != "")
			{
				var i = 3;
				var qMapFields = getAttribute(item, "qmapping").split("_<split>_");
				var l = qMapFields.length;
				var el;
	
				while (i<l)
				{
					el = document.getElementById(qMapFields[i]);
					el.value = "";
					el.fuidvalue = "";
					checkItem(el);
	
					if(el.qmapping && el.qmapping != "") emptyQmappingFields(el);
					i = i + 2;
				}
			}
		}
	}
}

function setOldQmapValue(item)
{
	var qmf = getAttribute(item, "qmapping");
	
	if (qmf != null)
	{
		item.oldQmapValue = item.value;
		
		var i = 3;
		var qMapFields = qmf.split("_<split>_");
		var ql = qMapFields.length;
		var qf;
		var el;

		while (i<ql)
		{
			qf = qMapFields[i];
			el = document.forms[0].elements[qf];
			
			if (el != null && getAttribute(el, "qmapping") != null) setOldQmapValue(el);

			i = i + 2;
		}
	}
}

function saveAndClose() // met F6
{
	if (isChanged) save(true); else quit(true);
}

function askQuit() // met esc
{
	try
	{
		if (!isLookupOpen() && !onSubmit)
		{
			var linkwindow		= document.getElementById("linkwindow");
			var isopen			= false;
		
			if (linkwindow != null) isopen = linkwindow.style.visibility != "hidden";
		
			if (!isopen)
			{		
				var v = true;
				
				try {v = beforeAskQuit();} catch(e){}
		
				if (mode != MODE_READ && isChanged && v)
				{					
					message(getApplicationName(), "Wilt u de wijzigingen opslaan?", processQuit);
				}
				else quit(true);
			}			
		}
	}
	catch (e) {}	
}

function processQuit(v, m)
{
     if 		(v == 1) save(true);
	 else if 	(v == 2) quit(true);

	 return true;
}

function checkForm()
{
	return checkTabForm(true);
}

function checkTabForm(checkType, msg, spanObj)
{
	var valide = true;
	if(checkType)	var el = document.forms[0].elements;
	else
	{
		if (spanObj == null) var el = getElementsByTagNames(visibleTabPages[activeTab], "INPUT,TEXTAREA,SELECT");
		else				 var el = getElementsByTagNames(spanObj, "INPUT,TEXTAREA,SELECT");
	}
	var ell = el.length;
	var xEl = [];
	var p = 0;

	for(k = 0; k < ell; k++)
	{
		if (getAttribute(el[k], "valid") == "false" && getAttribute(el[k], "block") == null && getAttribute(el[k], "skipreq") == null)
		{
			valide = false;
			xEl[p] = el[k];
			p++;
		}
	}
	var xEll = xEl.length;

	if(!valide)
	{
		var invalidElement;
		var em = "De volgende fouten zijn gevonden:\n\n";
		for(k = 0; k < xEll; k++)
		{
			invalidElement  = document.getElementById(xEl[k].id);						
			linvalidElement = document.getElementById("l"+replaceAll(xEl[k].id, "_hidden", ""));
			
			if(linvalidElement != null)		em = em + "'" + replaceAll(linvalidElement.innerHTML, " .", "") + "' is ongeldig!\n";
			else							em = em + "'" + invalidElement.id + "' is ongeldig!\n";

			var ind = "     ";

			if(getAttribute(invalidElement, "errmsg") != null && getAttribute(invalidElement, "errmsg") != "") em = em + ind + getAttribute(invalidElement, "errmsg").replace(/\n/g, "\n" + ind) + "\n";
		}
		if(checkType)	var fi = xEl[0];
		if(checkType)
		{
			if (msg == null) {msg = true;}
			if (getTab(fi.id) == activeTab && msg)
			{
				var coninueAfterSpecificErrorMsg = true;
				try{coninueAfterSpecificErrorMsg = specificErrorMsg();}catch(e){coninueAfterSpecificErrorMsg = true;}
				if(coninueAfterSpecificErrorMsg) alert(em);
			}
		}
		if(checkType)	switchTo(getTab(fi.id), true);

		if (spanObj != null)
		{
			alert(em);
		}

		try
		{
			if (!isLookupOpen())
			{			
				if(checkType)	fi.focus();
				else			xEl[0].focus();
			}
			else focusLookup();
		}
		catch (e) {}
	}
	return valide;
}

function specialCharCheck(input)
{
	var amposand=/&/g;
	var lesserThan=/</g;
	var greaterThan=/>/g;

	input = input.replace(amposand,"&amp;");
	input = input.replace(lesserThan,"&lt;");
	input = input.replace(greaterThan,"&gt;");
	return input;
}

function checkCheckBox(id)
{
	id.checked=true;
}

function getDate()
{
	return document.getElementById("nowdate").value;
}

function getTime()
{
	return document.getElementById("nowtime").value;
}

function changeItemStatus(item, value, className, readOnly, valid)
{
	if (value != null)	item.value = value;
	item.className 		= className;
	item.readOnly 		= readOnly;
	
	if (valid != null)	item.setAttribute("valid", valid);
	setErrorClass(item);
}

function onClickHandler(event)
{
	event = getEvent(event);
	
	if (isLookupOpen()) 
	{	
		focusCurrentFrame();
	}
	else if (lwin != null) 
	{
		try {lwin.focus();} catch (e) {}
	}
	
	try {hidemenuie5(window.event);} catch (e) {}
	
	if (event.ctrlKey) 
	{
		var uri;
		
		try {uri = specificEclipseURI();} catch (e) {uri = document.location.hostname + document.location.pathname;}
		
		openEclipse(uri);
	}	
}

function help()
{	
	return false;
}

function gotoChangeField(item)
{
	try
	{
		var b = item.id.substring(3);
		var iname = "change_"+b;
		switchTo(getTab(iname));
		document.getElementById(iname).focus();
		document.getElementById("c_change_"+item.id.substring(3)).checked = true;
		isChanged = true;
	}catch(e){}
}

function copyBeginEndValue(item)
{
	var sid = item.id;
	var s = "begin";
	var e = "end";

	if (sid.match("^" + s) != null)
	{
		var eid = sid.replace(s, e);
		var eitem = document.getElementById(eid);

		if (eitem != null && getAttribute(item, "valid") == "true")
		{
			eitem.value = item.value;
			checkItem(eitem);
		}
	}
}

function zoomTextArea(item)
{
	if (item.tagName == "TEXTAREA")
	{
		var memoTitle = document.getElementById("l" + item.id);
		if(memoTitle == null) memoTitle = item.id;
		else memoTitle = memoTitle.innerHTML;
		var vArguments = [];
	    vArguments[0] = item;
	    vArguments[1] = memoTitle
	    vArguments[2] = "uirecord";
		window.showModalDialog(fixURL("/" + CONTEXTNAME + "/jsp/atsc/TextArea.jsp"), vArguments, MODAL_DIALOG_FEATURES_ZOOM);
	}
}

function insertPreviousData(item)
{
	var xmlDoc	= string2XML(wt.previousXML);
	var fields	= xmlDoc.getElementsByTagName("field");
	var fl		= fields.length;
	var found	= false;
	var field;
	var child;

	for (var i = 0; i < fl && !found; i++)
	{
		field	= fields[i];

		if (getAttribute(field, "id") == item.id)
		{
			child		= field.firstChild;

			if (child == null) item.value = ""; else item.value	= child.nodeValue;

			b 			= true;

			checkItem(item);
		}
	}
}

function htmlEdit(id)
{
	isChanged = true;

	var vArguments			= [];
	setVArguments(vArguments, window, document.getElementById(id), document.getElementById(id + "span"), "DownloadServlet", getAttribute(document.getElementById(id), "width"), getAttribute(document.getElementById(id), "stylesheet"));
	
	if (IE) showModalDialog('/' + CONTEXTNAME + '/htmlarea/editor.jsp;jsessionid=' + jsessionid, vArguments,'resizable: yes; help: no; status: no; scroll: no; dialogWidth: 800px; dialogHeight: 600px;');
	else 
	{
		var ww 				= window.open('/' + CONTEXTNAME + '/htmlarea/editor.jsp;jsessionid=' + jsessionid, "mozeditwindow", "width=800px, height=600px, help=no, resizable=yes, status=no, scroll=no");
		ww.dialogArguments 	= vArguments;
	}
		
	return false;
}

function setVArguments(vArguments, window, fieldToEdit, fieldSpan, servletString, width, stylesheet)
{
	for (var i = 0; i < 6; i++)
	{
		vArguments[0] = window;
		vArguments[1] = fieldToEdit;
		vArguments[2] = fieldSpan;
		vArguments[3] = servletString;
		vArguments[4] = width;
		vArguments[5] = stylesheet;
	}

	var otherArguments	= vArguments.length;

	for (var j = 6; j < otherArguments; j++)
	{
		vArguments[j]	= vArguments[j];
	}
	
	return vArguments;
}

function openUploadWindow(itemid)
{
	isChanged = true;
	var vArguments 	= [];
	vArguments[0] = uniqueid;
	vArguments[1] = name;
	vArguments[2] = document.getElementById(itemid);
	vArguments[3] = window;
	var height = 300;
	var width = 500;

	if(vArguments[2].accept != "") height += 20;
	if(vArguments[2].dimension != "") height += 20;
	if(vArguments[2].maxdimension != "") height += 20;
	if(vArguments[2].mindimension != "") height += 20;
	
	if (IE) window.showModalDialog("/" + CONTEXTNAME + "/jsp/atsc/Upload.jsp;jsessionid=" + jsessionid, vArguments,"edge: Raised; center: yes; help: No; resizable: yes; status: No; scroll: No; dialogWidth: " + width + "px; dialogHeight:" + height + "px;");
	else 
	{
		var ww 				= window.open("/" + CONTEXTNAME + "/jsp/atsc/Upload.jsp;jsessionid=" + jsessionid, "mozeditwindow", "width=" + width + "px, height=" + height + "px, help=no, resizable=yes, status=no, scroll=no");
		ww.dialogArguments 	= vArguments;
	}
	
}

function copyToClipboard(v, o)
{
   var copyArea = document.getElementById("copyArea");

   copyArea.value = v;

   var tr = copyArea.createTextRange();

   tr.execCommand("Copy");

   copyArea.value = "";

   alert(o + " op klembord geplaatst.\n\n" + v);
}

function getLabel(item)
{
	try
	{
		var la1 	= document.getElementById("l" + item.id).innerHTML;
		var la2		= "" + trim(la1.replace(/\s\./g, ""));

		if (la2.charAt(la2.length - 1) == ".") la2 = la2.substring(0, la2.length - 1);
		
		return la2;
	}
	catch (e) {return "";}	 
}

function setCurrentUser(id)
{
	var u		= document.getElementById(id);
	
	if (u != null)
	{
		u.value = getUser();

		checkItem(u);
	}
	
	return false;
}

function isReadOnly(item)
{
	var at = getAttribute(item, "readonly");

	if (at != null)	return at;	
	else return false;
}

function deleteRecord(table, unidName, name, uniqueid, queryid, functie)
{
	delfunctie = functie;
	var url = IOSERVLETURL + "?table="  + table + "&unidName=" + unidName + "&name=" + name + "&uniqueid=" + uniqueid + "&queryid=" + queryid + "&action=" + DELETEFORM;
	processXMLDoc(url, "afterDeleteRecord", true);
}

function afterDeleteRecord(recXML)
{
	var tmp = delfunctie;
	delfunctie = null;
	
	var errorTag = recXML.getElementsByTagName("error")[0];

	var errmsg = errorTag.getAttribute("msg");

	if (errmsg != null && errmsg != "") // Er is een fout
	{
		alert(errmsg);
	}
	else // Geen fout
	{
		if(tmp != null)
			eval(tmp + "()");
	}
}

function toString(q)
{
	
	var res = "";
	if (q != null && q != "undefined") res = q;
	
	return res; 
}
