var BLANKURL 		= "/jsp/atsc/blank.html";
var nextmsg = "";
var modalitem;
var ifd;
var vArguments = [];
var lwin = null;
var previousWindowURL = "";
var doUpdateFrameSet = true;
var focusCurrentFrameDone = false;

document.oncontextmenu = contextHandler;

var wt = getFrameSetWindow();

if(wt.ui && wt.ui.window)
{
	ui.window = wt.ui.window;
}
else
{
	ui.window = {
		current_frame_name: "w0",
		last_table_frame: null, //this is the last table frame that called deselectOtherTables
		frame_urls: {},
		updateFrameURL: function(frameName)
		{
			ui.window.frame_urls[frameName] = ui.window.getFrame(frameName).location.href;
		},
		getFrameURL: function(frameName)
		{
			return ui.window.frame_urls[frameName];
		},
		getCurrentFrame: function()
		{
			return ui.window.getFrame(ui.window.current_frame_name);
		},
		
		getFrame: function(frame_name)
		{
			if(typeof(wt) == "undefined" || !wt){ return null; }
			var frame							= wt[frame_name];
			if(typeof(frame) != "undefined" && frame != null)
			{
				if(typeof(frame.document) == "undefined")
				{
					frame							= $.atsc.window.getWindowFromFrame(frame);
				}
			}
			
			return frame;
		},
		getTopmostWindow: function()
		{
			return window.top;
		},
		isTopWindow: function(wnd)
		{
			if(typeof(wt) == "undefined" || wt == null)	{ return wnd == window.top; }
			else if(wnd == wt)							{ return true; }
			return false;
		}
	};
}

function getFrameSetWindow()
{
	var www = getFrameSetWindowR(window);
	
	if (www == null) {www = window;}

	return www;
}

function getFrameSetWindowR(wwindow)
{
	try
	{
		var wwd	= wwindow.document;
		
		if (wwd)
		{
			var ww 	= wwindow.frameSetTopPage
			
			if (!ww) 
			{	
				if (wwindow.parent && wwindow.parent != wwindow) 
				{
					if (wwindow.parent.document.location) return getFrameSetWindowR(wwindow.parent);
					else return wwindow;
				}
				else return wwindow;
			}
			else return wwindow;
		}
		else {return wwindow;}
	}
	catch (e) {return wwindow;}
}

function initDragOver(bd)
{
	if (bd == null) var body = document.body; else var body = bd;
	
	body.ondragstart = noDragDrop;
	body.ondragenter = noDragDrop;
	body.ondragover = noDragDrop;
	body.ondragleave = noDragDrop;
	body.ondragend = noDragDrop;
	body.ondrop = noDragDrop;
}

function noDragDrop()
{
	return false;
}

function askQuitApplication()
{
	if (wt.dialogArguments == null)
	{
		if (!wt.logout)
		{
			if (getFrame(wt.currentFrameName).isChanged)
			{
				return "Uw wijzigingen gaan verloren!";
				//event.returnValue	= "Uw wijzigingen gaan verloren!";
			}
			else
			{
				return getApplicationName() + " wordt afgesloten!";
				//event.returnValue	= getApplicationName() + " wordt afgesloten!";
			}
		}
	}
}

function done()
{
}

function quitApplication()
{
	if (wt.dialogArguments == null)
	{
		/* 
		id = wt.oldws;
	
		if (id != null)
		{
			var d = new Date();
	    	d.setFullYear(d.getFullYear()+1);
			Set_Cookie("ws", id, d, "/", false);
		}
		*/
		
		// Indien alle child windows gesloten zijn dan sessie op server opheffen
		var mp = wt.mainparent;
	
		if (mp == null) mp = wt.name;
	
		var mpcookie = Get_Cookie(mp);
		var mpcounter;
		if (mpcookie == null) mpcounter = 0; else mpcounter = parseInt(mpcookie);
	
		if (isNaN(mpcounter)) mpcounter = 0;
	
		var d = new Date();
	    d.setDate(d.getDate() + 1);
	
		Set_Cookie(mp, mpcounter - 1, d, false, false);
	
		if (mpcounter <= 0) processXMLDoc(IOSERVLETURL + "?action=9&name=" + getSessionId(), null, true, false)
	}
}

function contextHandler()
{
	//return wt.debug || getUser() == "ATSC";
	return true;
}

function openLookup(item, url, width)
{
	var lookupwindow = document.getElementById("lookupwindow");

	if (lookupwindow != null)
	{
		try
		{
			var ddbs = document.getElementsByTagName("SELECT");
			for (var i = 0; i<ddbs.length; i++) ddbs[i].style.display = "auto";
		
			var lookupwin = null;
			var fr;
			
			for (var f = window.frames.length - 1; lookupwin == null && f >= 0; f--)
			{
				fr = window.frames[f];
				
				if (fr.location.href.indexOf("lookup=true") > -1) lookupwin	= fr;				
			}
			
			//lookupwin.initreset();
			lookupwin.ui.table.reset();
		 	lookupwin.table.location = url;

		 	//FIX: Iframes with look-ups in them may fail when using the old method.
		 	//var width				= $(document.body).outerWidth();
		 	//var height				= $(document.body).outerHeight();
		 	
		 	lookupwindow.style.display = "block";
		 	
		 	//This gets the width and height of the browsers' viewport as opposed to the <body> tag,
		 	//which should be more reliable in this case.
		 	var width				= $(window).width();
		 	var height				= $(window).height();
			
			var w_width				= $(lookupwindow).outerWidth();
			var w_height			= $(lookupwindow).outerHeight();
			if(w_width > width)
			{
				w_width				= width - 16;
				$(lookupwindow).width(w_width);
				lookupwindow.offsetWidth	= 8;
			}
			if(w_height > height)
			{
				w_height			= height - 16;
				$(lookupwindow).height(w_height);
				lookupwindow.offsetHeight	= 8;
			}
			
			lookupwindow.style.top 	= ((height - lookupwindow.offsetHeight) / 2) + "px";
			lookupwindow.style.left = ((width - lookupwindow.offsetWidth) / 2) + "px";
			
			$("iframe", lookupwindow).css("display", "block"); // calendar.js verbergt iframe's...
					
			var lookuptitle = document.getElementById("lookuptitle");
			try
			{
				lookuptitle.innerHTML = "Snel opzoeken '" + document.getElementById("l"+item.id).innerHTML+"'"  ;
			}
			catch(e)
			{
				lookuptitle.innerHTML = "Snel opzoeken...";
			}
			
			doModal();
		}
		catch(e) {}
	}
	else
	{
		vArguments = [];
		vArguments[0] = document;
		vArguments[1] = item;
		vArguments[2] = url;
		vArguments[3] = window;
		var url2 = "/jsp/atsc/UITableLookup.jsp?mode=3&cms=true";
		
		var ah = screen.availHeight - 30;
    	var aw = screen.availWidth - 10;

		var h = 365;
		var w = 880;
		if(width != null) w = width;
		
    	var xc = (aw - w) / 2;
    	var yc = (ah - h) / 2;
				
		lwin = window.document.open(url2, "lwin" + getContextName(), "width=" + w + "px, height=" + h + "px, top=" + yc + "px, left=" + xc + "px, help=No, resizable=No, status=No, scroll=No");		
	}
}

function doModal()
{
	try
	{
		var modal = document.getElementById("modal");
		if (modal.style.visibility != "")
		{
			modal.style.visibility	= "visible";
			
			//wt.focus(); // TH: Dit werkt niet goed als je in updateAfterTabSwitch save aanroept
		}
		if (modal.style.display == "none")
		{
			modal.style.display = "block";
		}
	}
	catch (e) {}
}

function undoModal(focusitem)
{
	try
	{
		var modal = window.parent.document.getElementById("modal");
		if (modal == null) modal = document.getElementById("modal");
		modal.style.display = "none";

		if (lastitem != null && focusitem) lastitem.focus();
		return true;
	}
	catch (e) {return false;}
}

function closeLookup(ok)
{
	try {window.parent.specificCloseLookupBegin(target, ok);} catch (e) {}
	var ddbs = window.parent.document.getElementsByTagName("SELECT");
	for (var i = 0; i<ddbs.length; i++) ddbs[i].style.display = "none";

	var lookupwindow = window.parent.document.getElementById("lookupwindow");
	if (lookupwindow == null) lookupwindow = document.getElementById("lookupwindow");
	lookupwindow.style.display = "none";

	undoModal(false);
		
	var lookupwin = null;
	var fr;
	
	for (var f = window.parent.frames.length - 1; lookupwin == null && f >= 0; f--)
	{
		fr = window.parent.frames[f];
		
		if (fr.location.href.indexOf("lookup=true") > -1) lookupwin	= fr;				
	}			
			
	var lookupdoc = lookupwin.document;
	lookupwin.zoom = false;
	lookupwin.table.location = BLANKURL;

	setStatusMessage("");
	window.parent.focusCurrentFrame();

	var item = window.parent.document.getElementById(ui.table.target);
	if (item == null) try{item = window.parent.opener.vArguments[1];} catch (e) {}
	
	if(!item){ $.atsc.debug("BUG: No item found!"); return; }

	if (ok)
	{
		if (ui.table.source == ui.table.table_name + "_unid") item.value = ui.table.getCell(0, ui.table.row).parent().attr("unid");
		else
		{
			var colt = ui.table.getColumnFromID(ui.table.source);
			if(colt == -1){ colt = 0; }
			
			var obj_cell = ui.table.getCell(colt, ui.table.row);
			
			var v = specialCharCheck(ui.table.getCell(colt, ui.table.row).html()).replace(/&nbsp;/g, " ");
			
			if (item.getAttribute("allowmultiplevalues") == "true") 
			{
				if (item.value != "") 
				{
					item.setAttribute("values", item.getAttribute("values") + "_sep_" + v);
					item.value = item.value + ", " + v;
				}
				else 
				{
					item.setAttribute("values", v);
					item.value = v;
				}
			}
			else item.value = v;
		}
	}

	var wwp = window.parent;

	try {if (window.parent.opener.vArguments[3] != null) wwp = window.parent.opener.vArguments[3];}catch (e) {}

	wwp.lookup = false;

	if (ok)
	{
		item.setAttribute("oldQmapValue", "_<null>_");
		wwp.checkItem(item);
		processNext(item, wwp);
	}
	
	wwp.zoom = false;
	wwp.stopLoading();
	try {window.parent.specificCloseLookupEnd(ui.table.target, ok);} catch (e) {}	
}

function processNext(item, wwp)
{
	try
	{
		item.blur();
		
		if (!wwp.$.atsc.dialog.exists()) // Indien een checkSpecial (door de item.blur()) een dialog aanmaakt niet doorgaan
		{
			//IE8 requires a try/catch statement here in order to avoid issues
			//Focus is blurred and reset here in order to select everything in the text field after choosing a date. 
			try {item.focus();} catch (e) {}
		
			if ((typeof(cal_defer_keydown) == "undefined" || !cal_defer_keydown) && item.id != wwp.getLastInputOnTab(wwp.activeTab).id)
			{
				wwp.focusNextElement(item, null);
			}
		}
	}
	catch (e)
	{
		try
		{
			var next = wwp.getNextValidElement(item);
			next.focus();
		}
		catch (e) {}
	}
}

function isLookupOpen()
{
	var isopen		 		= false;
	
	try
	{
		var lookupwindow 	= document.getElementById("lookupwindow");
		
		if (!isopen && lookupwindow != null) isopen = lookupwindow.style.display != "none";
		if (!isopen && cal != null) 		 isopen = !cal.hidden;

		var gpdwindow 		= window.frames["gpd"];

		if (gpdwindow == null && window.parent) gpdwindow = window.parent.frames["gpd"];

		if (!isopen && gpdwindow != null)	 isopen = gpdwindow.document.getElementById("gpdDialog").style.display != "none";
	}
	catch (e) {}

	return isopen;
}

function focusLookup()
{
	try
	{
		$("#iframelookup")[0].contentWindow.ui.table.focusTable();
 	}
 	catch (e) {}
}

function getStatusDocument()
{
	try
	{
		if (wt.statusdoc == null) wt.statusdoc = getFrame("wstatus", true).document;
		return wt.statusdoc;
	}
	catch (e) {}
}

function setStatusMessage(msg, force)
{
	try
	{
		if (isLoading() && !force) nextmsg = msg;
		else
		{
			getStatusMessageObject().innerHTML = msg.replace(/\s/g, "&nbsp;");
			
			nextmsg = "";
		}
	}
	catch(e) {}
}

function getStatusMessageObject()
{
	if (wt.statusmsgobj == null) wt.statusmsgobj = getStatusDocument().getElementById("msg");
	return wt.statusmsgobj;
}

function getStatusMessage()
{
	try {return getStatusMessageObject().innerHTML;} catch(e) {return "";}
}

function getUser()
{
	var u;
	try
	{
		u = getSpecialUser();
	}
	catch(e)
	{
		try
		{
			u = getStatusDocument().getElementById("username").innerHTML;
		}
		catch(e)
		{
			u = getServerVariable("USERNAME");
		}
	}
	
	return u;
}

function getUserUnid()
{
	var uu;
	
	try
	{
		uu = getSpecialUserUnid();	
	}
	catch (e1)
	{
		try
		{
			uu = getStatusDocument().getElementById("username").getAttribute("unid");		
		}
		catch (e2)
		{
			try
			{
				uu = getServerVariable("USERUNID");
			}
			catch (e3) {}
		}
	}

	return uu;
}

function getUserId()
{
	return getStatusDocument().getElementById("username").getAttribute("userid");
}

function getLoginName()
{
	return getStatusDocument().getElementById("username").getAttribute("login");
}

function getApplicationName()
{
	try 		{return getStatusDocument().getElementById("appname").innerHTML;}
	catch (e) 	{return getServerVariable("APPLICATIONNAME");}
}

function getContextName()
{
	try			{return getStatusDocument().getElementById("appname").getAttribute("context");}
	catch (e) 	{return getServerVariable("CONTEXTNAME");}
}

function getContextUNID()
{
	try			{return getStatusDocument().getElementById("appname").getAttribute("contextunid");}
	catch (e) 	{return getServerVariable("CONTEXTUNID");}
}

function getOrganisationName()
{
	try			{return getStatusDocument().getElementById("organisation").innerHTML;}
	catch (e) 	{return getServerVariable("ORGANISATIONNAME");}
}

function getOrganisationUNID()
{
	try			{return getStatusDocument().getElementById("organisation").getAttribute("unid");}
	catch (e) 	{return getServerVariable("ORGANISATIONUNID");}
}

function getOrganisationCode()
{
	try			{return getStatusDocument().getElementById("organisation").getAttribute("code");}
	catch (e) 	{return getServerVariable("ORGANISATIONCODE");}
}

function getWareHouseUNID()
{
	try			{return getStatusDocument().getElementById("warehouse").getAttribute("unid");}
	catch (e) 	{return getServerVariable("USERWAREHOUSEUNID");}
}

function getWareHouseCod()
{
	try			{return getStatusDocument().getElementById("warehouse").getAttribute("cod");}
	catch (e) 	{return getServerVariable("USERWAREHOUSECODE");}
}

function getWareHousesCount()
{
	try			{return getStatusDocument().getElementById("warehouse").getAttribute("count");}
	catch (e) 	{return 0;}
}

function getWareHouse()
{
	try			{return getStatusDocument().getElementById("warehouse").innerHTML;}
	catch (e) 	{return getServerVariable("USERWAREHOUSENAME");}
}

function getWareHouseOwner()
{
	try			{return getStatusDocument().getElementById("warehouse").getAttribute("owner");}
	catch (e) 	{return getServerVariable("USERWAREHOUSEOWNER");}
}

function getWareHouseAdminCod()
{
	try			{return getStatusDocument().getElementById("warehouse").getAttribute("admincod");}
	catch (e) 	{return getServerVariable("USERWAREHOUSEADMINCOD");}
}

function getAdminCod()
{
	try			{return getStatusDocument().getElementById("admincod").innerHTML;}
	catch (e) 	{return getServerVariable("ADMINCOD");}
}

function isHelpServletAvailable()
{
	try			{return getStatusDocument().getElementById("helpAvailable").innerHTML == "true";}
	catch (e) 	{return getServerVariable("ISHELPSERVLETAVAILABLE") == "true";}
}

function isCMS()
{
	try			{return getStatusDocument().getElementById("cms").innerHTML == "true";}
	catch (e) 	{return getServerVariable("ISCMS") == "true";}
}

function getSessionId()
{
	var sessionid = "";
	
	try
	{
		sessionid = getStatusDocument().getElementById("sessionid").value;
	}
	catch (e)
	{
		sessionid = Get_Cookie("JSESSIONID");
		
		if (sessionid == null || sessionid == "") 
		{	
			sessionid = window.location.href;

			var pos = sessionid.indexOf(";jsessionid=");
							
			if (pos >= 0) sessionid = sessionid.substring(pos + 12, pos + 12 + 32);
		}
	}
	
	return sessionid;
}

function getWorkstation()
{
	try
	{
		return getStatusDocument().getElementById("workstation").innerHTML;
	}
	catch (e)
	{
		return "";
	}
}

function getGlobalParameter(param,check)
{
	var item = getStatusDocument().getElementById(param);
	if(item != null) return item.value;
	else
	{
		if(check)alert("Parameter : "+param+" is niet aanwezig!");
		return "";
	}
}

function rejectRefresh(event)
{
	try
	{
		if (event.keyCode == 116) event.keyCode = 0;
	}
	catch(e) {}
	return false;
}

function rejectEveryThing(event)
{
	try {wt.focus();} catch (e) {}
	try {event.keyCode 	= 0;} catch (e) {}
	try {event.cancelBubble	= true;} catch (e) {}
	
	return false;
}

function refreshCurrentFrame(reload, event)
{
	if(IE){rejectRefresh(event.originalEvent);}

	if (reload)
	{
		setStatusMessage("");
		if (window.request)
		{
			wt.focus(); // Focus naar bekend object zetten (anders problemen met F5)
			request();
		}
		else
		{
			startLoading();
			getFrame(getCurrentFrameName()).location.reload(true);
		}
	}

	return false;
}

function focusCurrentFrame(checkLoading, iframedoc)
{
	if ($.atsc.dialog.exists())
	{
		return false;
	}
	
	ifd = iframedoc;
	if (!isLoading())
	{
		var focusok = 0;

		var frame = getFrame(getCurrentFrameName());
		
		// Proberen: IFrame focus te geven.
		try
		{
			var ff = frame.frames;
			var ffl = ff.length;
			var ffk;

			if (!frame.isLookupOpen()) // Als er geen lookup open staat probeer dan iframe focus te geven.
			{
				var ct = 0;

				for (var k = 0; k < ffl; k++)
				{
					ffk = ff[k];

					if (iframedoc != null)
					{
						if (ffk.document == iframedoc)
						{
							var t = 0;
							
							var grandparent = iframedoc.frames[0].parent.parent;
							
							try {t = grandparent.activeTab;} catch (e) {} 
							
							var focusiframe = false;
							
							if (t == 0)
							{	
								try 
								{
									focusiframe = grandparent.focusiframe;
									grandparent.focusiframe = true;
								} 
								catch (e) {}
							}
							
							if (mode == MODE_READ || t != 0 || focusiframe) // Om iframe op eerste tab geen focus te geven bij openen record in wijzigen of toevoeg modus.
							{
								ffk.focus();
								focusok = 1;
							}
						}
					}
					else
					{
						var iFrame = null;
						// Even kijken of het iframe wel op een actieve tab zit anders moet body focus krijgen
						try
						{
							if (document.tabPages == null)
							{
								if (ffk.executeStartTime > ct || !IE) // BOY: !IE toegevoegd om het werkend te krijgen in FireFox
								{
									iFrame = ffk;
									ct = ffk.executeStartTime;
								}
							}
							else
							{
								var tabIframes = tabPages[activeTab].getElementsByTagName("IFRAME");
								var l = tabIframes.length;

								for (var r = 0; r< l; r++)
								{
									if (ff[tabIframes[r].name].document.table.document.getElementById("name").value == ffk.name)
									{
										iFrame = ff[tabIframes[r].name];
									}
								}
							}
						}
						catch(e) {}

						if (iFrame != null)
						{
							iFrame.focus();
							focusok = 2;
						}
					}
					try {ffk.initTitle();} catch(e) {try{wt.document.title = ffk.document.title}catch(e) {}}
					try {ffk.initStatus();} catch (e) {}
				}
			}
			else // Als er een lookup open staat deze altijd focus geven.
			{
				var lookupwindow		= document.getElementById("lookupwindow");
				var linkwindow		= document.getElementById("linkwindow");

				if (lookupwindow && lookupwindow.style.display != "none") { $("#iframelookup")[0].contentWindow.ui.table.focusTable(); focusok=8; return;}
				else if (linkwindow && (linkwindow.style.display != "none"&&linkwindow.style.visibility!="hidden")) {linkwindow.focus();focusok=8;return;}
				else
				{
					ff[ffl-1].focus();
					focusok = 8;
				}
			}
		}
		catch(e) {}
				
		try {frame.initTitle();} catch(e) {try{wt.document.title = frame.document.title}catch(e) {}}
		try {frame.initStatus();} catch(e) {}
		
		if (focusok != 1)
		{
			try
			{
				if (frame.currentField != null)
				{
					if (isContentEditable(frame.currentField))
					{
						// Proberen: veld waar vanaf vertokken is (m.b.v. F4) focus geven.
						frame.currentField.focus();
						focusok = 3;
					}
				}
				else
				{
					// Proberen: eerste veld focus te geven.
					try
					{
						frame.specificFocusFirstElement();
						focusok = 4;
					}
					catch(e)
					{
						try
						{
							frame.focusFirstElement();
							focusok = 5;
						}
						catch(e){}
					}
				}
			}
			catch(e) {}
		}
		
		if (focusok == 0)
		{
			if(ui.isTable(frame))
			{
				frame.ui.table.preventDefault			= false;
				frame.ui.table.focusTable();
				focusok									= 6;
			}
			else
			{
				// Proberen: document body focus te geven.
				try	{if (IE) {frame.document.body.focus(); focusok = 7;}} catch(e) {}
	
				if (focusok == 0)
				{
					try	{frame.focus(); focusok = 8;} catch(e) {}
				}
			}
		}
		//alert(focusok);
		
		wt.focusCurrentFrameDone = true;
	}
	else
	{
		setTimeout(function(){ focusCurrentFrame(checkLoading, ifd); }, RETRY_DELAY);
	}
}

function getPreviousFrameName()
{
	return getFrameTags()[getCurrentFrameName()].getAttribute("previousFrame");
}

function showPreviousFrame(reload, newURL)
{
	if (!isLoading()) 
	{
		if (previousWindowURL != "")
		{
			window.location.replace(previousWindowURL);
			
			previousWindowURL = "";
		}
		else
		{
			try
			{
				specificShowPreviousFrame(reload);
			}
			catch (e)
			{
				if (!previousbreadcrumb())
				{
					try
					{
						var cfn = getCurrentFrameName();

						if (cfn != "w0")
						{
							wt.showFrame(null, getFrameTags()[cfn].getAttribute("previousFrame"), reload, newURL, cfn);							
						}
						else
						{
							try {wt.gotoHomePage(getFrame("w0"));} catch (e) {}
						}
					}
					catch (e) {window.close();}
				}
			}
		}
	}
}

function emptyFrame(cfn)
{
	if (!isLoading())
	{
		var pf = getFrameTags();

		getFrame(cfn).location.replace(BLANKURL);		
	}
	else 
	{
		// Geen retry want dan treed bij meerdere malen esc soms deze pagina op de voorgrond
		// setTimeout("emptyFrame('" + cfn + "')", 15);
	}
}

function isFrameLoading(frameName)
{
	try
	{
		var framedoc = getFrame(frameName).document;

		return (framedoc == null || framedoc.readyState != "complete");
	}
	catch (e) {return false;}
}

function showFrame(url, frameName, reload, newURL, emptyFrameName)
{
	if (!isLoading())
	{
		wt.focusCurrentFrameDone = false;
		
		startLoading();
		try
		{
			var cfn = getCurrentFrameName();

			if (frameName==null) frameName = getRelativeFrameName(cfn, +1);

			if (!isFrameLoading(frameName)) // Synchronizeren van showFrame
			{	
				wt.currentFrameName = frameName; // TH: DIT STOND VOOR DE !isFrameLoading(frameName) if 
				
				var nextFrameName = frameName;
				var previousFrameName = cfn;
			  	var pf = getFrameTags();

			  	if (url != null)
			  	{
			  		if (pf == null) window.open(url, "_parent");
					else
					{
			  			var pfnf = pf[nextFrameName];
				  		pfnf.setAttribute("previousFrame", previousFrameName);

				  		var nf = getFrame(nextFrameName);
				  		ui.window.updateFrameURL(nextFrameName);
				  		nf.location.replace(url);
					}
			  	}
			  	else
			  	{
			  		try
			  		{
				  		if (reload)
				  		{
				  			var nfr = getFrame(nextFrameName);
				  			ui.window.updateFrameURL(nextFrameName);
				  			nfr.iframesaved = true;
				  			var nfrs = nfr.frames;
				  			var nfrsl = nfrs.length
				  			
				  			if (nfrsl > 0) // IFrame(s) reloaden
				  			{
				  				var frame;
				  				for (k=0; k<nfrsl; k++)
				  				{
				  					frame		= nfrs[k];
				  					
				  					//It's possible for the iframe to be UITableIFrame.jsp (if we're going back
				  					//to a table), so we make sure frame = UITable.jsp here.
				  					if(frame.parent && ui.isTable(frame.parent))		{ frame = frame.parent; }
				  					
				  					if(ui.isTable(frame))
				  					{
				  						//If the table is inside a record, make sure the record is marked as being
				  						//changed.
					  					if(frame.parent && ui.isRecord(frame.parent))	{ frame.parent.isChanged = true; }
					  					
				  						//The table may only be refreshed if it isn't in look-up mode, because
					  					//lookups are invisible.
				  						if(!frame.ui.table.lookup_mode)
				  						{
				  							frame.ui.table.forceRefresh(false);
				  						}
				  					}
				  				}
				  			}
				  		}
				  	}
				  	catch(e) { }
			  	}

				setStatusMessage("");

				if (newURL == null) 
				{
					if (IE) updateFrameSet(nextFrameName, emptyFrameName);
					else	setTimeout(function(){ updateFrameSet(nextFrameName, emptyFrameName); }, RETRY_DELAY); // Andere browsers veranderen te laat readyState van de vorige pagina, indien je window.location.replace o.i.d. gebruikt.
				}
				else 
				{
					stopLoading();
					showFrame(newURL);
				}
		  	}
		  	else {stopLoading();}
		}
		catch(e) {}
	}
}

function updateFrameSet(frameName, emptyFrameName)
{
	if (wt.doUpdateFrameSet)
	{	
		try
		{
			var frame = getFrame(frameName);
			var fdoc = frame.document;
			
			//var hasURLchanged = (ui.window.getFrameURL(frameName) != frame.location.href);
			
			//TODO: Finish this.
			//if ((!FF && fdoc.readyState == "complete") || hasURLchanged)
			if (fdoc.readyState == "complete")
			{
				var iframeready = true;
				var frs = frame.frames;
				var frsl = frs.length;
				
				if (frsl > 0)
				{
					var framedoc;
					for (var k = 0; k < frsl; k++)
					{
						try
						{
							framedoc = frs[k].document;

							if (framedoc.readyState != "complete" && IE) iframeready = false;
							else if (framedoc.table.document.readyState != "complete" && IE) iframeready = false;
						}
						catch (e) {}
					}
				}
	
				if (iframeready)
				{
					var errormsg = fdoc.getElementById("errormsg");
					
					// in FF is errormsg null (doordat de readyState te vroeg 'complete' geeft) en in IE niet bij het printen (van een PDF) (voorbeeld: printen van factuur 5-1; Alt-P; [enter])
					
					if (errormsg == null)
					{
						var pf = getFrameTags();
	
						if (frame.location.href.indexOf(BLANKURL) == -1 || !IE)
						{
							getFrameSet().cols = pf[frameName].getAttribute("framecols");

		  					frame.focusCurrentFrame();
							wt.processUserFiles();
						}
			  		}
			  		else
			  		{
			  			var msg = $(errormsg).html().trim();
			  			
				  		if (msg != "") alert(msg);
				  		wt.currentFrameName = getPreviousFrameName();
				  		//focusCurrentFrame(); //Dit mag niet aan, want anders verdwijnt de focus bij een dialoog die geopend is dmv een autoaction/print actie binnen een tabel (als die tabel binnen een record zit)
				  		wt.focusCurrentFrameDone = true;

	  			        var url = IOSERVLETURL + "?action=" + GETFILESTOPRINT;
						processXMLDoc(url, "processUserFiles");
					}	
										
					if (emptyFrameName)
					{
						if (getFrameSet().cols.split(",")[getFrameNumber(emptyFrameName)] == 0)
						{
							wt.emptyFrame(emptyFrameName);
						}
					}
					
					stopLoading();
					
					try {frame.specificRefresh();} catch(e) {}
			  	}
			 	else
			 	{
			 		if (!isLoading()) {startLoading();}
	
			 		setTimeout(function(){ updateFrameSet(frameName, null) }, RETRY_DELAY);
			 	}
			}
			else
			{					
				if (!isLoading()) {startLoading();}
	
				setTimeout(function(){ updateFrameSet(frameName, null) }, RETRY_DELAY);
			}
		}
		catch(e)
		{
			stopLoading();
		}
	}
}

function isCorrect(x)
{
	return x != "undefined" && x != null && x != "";
}

function startLoading()
{
	if (!wt.loading)
	{		
		wt.loading = true;
		
		wt.focus(); // Set focus to top window, to prevent key strokes on page that is loading
		setLoadingMessage("Bezig met laden", true);
	}
}

function stopLoading()
{
	if (wt.loading)
	{
		wt.loading = false;
		setStatusMessage(nextmsg);
	}
}

function setLoadingMessage(defaultmsg, showdefaultmsg)
{
	if (isLoading())
	{
		if (showdefaultmsg) setStatusMessage(defaultmsg, true);
		else
		{
			var msg = getStatusMessage();
			var ml = msg.length;
			if (ml == 0 || ml >= (defaultmsg.length + 45)) setStatusMessage(defaultmsg, true);
			setStatusMessage(getStatusMessage() + " .", true);
		}
		setTimeout(function(){ setLoadingMessage(defaultmsg, false); }, RETRY_DELAY);
	}
}

function isLoading()
{
	try 
	{
		if (wt.loading == null) wt.loading = false;

		if (wt.loading)
		{
			var l = wt.frames.length;
			
			for (var f = 0; f < l; f++)
			{
				wt.frames[f].testOwnDomain = true;
			}
		}

		return wt.loading;
	} 
	catch (e) {return false;}
}

function getFrame(frameName, allowNull)
{
	if(typeof(allowNull) == "undefined")			{ allowNull = false; }
	var result = ui.window.getFrame(frameName);
	if(!result && !allowNull)						{ return window; }
	return result;
}

function getFrameSet()
{
	return wt.document.getElementById("windows");
}

function getFrameTags()
{
	try
	{
		if (wt.frametags == null) wt.frametags = getFrameSet().getElementsByTagName("frame");
		return wt.frametags;
	}
	catch (e) {}
}

function getCurrentFrameName()
{
	if (wt.currentFrameName == null) wt.currentFrameName = "w0";
		
	return wt.currentFrameName;
}

function getRelativeFrameName(frameName, pos)
{
	return "w" + (getFrameNumber(frameName) + pos);
}

function getFrameNumber(frameName)
{
	if (!frameName || frameName == "") frameName = "w0";
	return parseInt(frameName.substring(1, frameName.length));
}

function rejectFocus()
{
	if (!isLoading()) 
	{
		if (window.parent.isRecord) 
		{
			if (window.parent.isLookupOpen())
			{
				$("#iframelookup")[0].contentWindow.focus();
			}
			else
			{
				getFrame(getCurrentFrameName()).focus();
			}
		}
		else getFrame(getCurrentFrameName()).focus();
		
		focusCurrentFrame();
	}
	
	return false;
}

function download(file)
{
	try
	{			 
		wt.frames["wtemp"].location.replace(file);	
	}
	catch (e) { window.open(file); }	
}

function Get_Cookie(name) {

	if (document.cookie)
	{
	    var start = document.cookie.indexOf(name+"=");
	    var len = start+name.length+1;
	    if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
	    if (start == -1) return null;
	    var end = document.cookie.indexOf(";",len);
	    if (end == -1) end = document.cookie.length;
	    return unescape(document.cookie.substring(len,end));
	}
}

function Set_Cookie(cname,value,expires,path,domain,secure) {
	secure = window.location.protocol == "https:";

	if (document.cookie)
	{
    	document.cookie = cname + "=" +escape(value) +
	        ( (expires) ? ";expires=" + expires.toGMTString() : "") +
	        ( (path) ? ";path=" + path : "") +
	        ( (domain) ? ";domain=" + domain : "") +
	        ( (secure) ? ";secure" : "");	        
	}
}

function launchWindow(url, name, height, width)
{
	var str = "height=" + (height - 30);
	str += ",width=" + (width - 10);
	if (window.screen)
	{
    	var ah = screen.availHeight - 30;
    	var aw = screen.availWidth - 10;

    	var xc = (aw - (width - 10)) / 2;
    	var yc = (ah - (height - 30)) / 2;

    	str += ",left=" + xc + ",screenX=" + xc;
    	str += ",top=" + yc + ",screenY=" + yc;
    }
    return window.open(url, name, str + ", resize=no, menubar=no", true);
}
/*
function openOptionBox(title, selectOptions, defaultoption, f)
{
	var optionsHTML 	= "<select id=\"optionBoxSelect\">";
	var options 		= selectOptions.split(",");
	
	for (var i = 0; i < options.length; i++)
	{
		var option 		= options[i].split("|");
		var selected 	= "";
	
		if (defaultoption != null && defaultoption == i) selected = "SELECTED ";
		
		optionsHTML 	= optionsHTML + "<option " + selected + "id='" + option[1] + "' value=' " + option[1] + "'>" + option[0].replace("_<comma>_", ",") + "</option>";
	}
	
	optionsHTML 		= optionsHTML + "</select>";

	message(getApplicationName(), "<div>" + optionsHTML + "</div>", f, {
			"Ok": function() { 
			$(this).dialog("close");
			f($("option:selected", this).val());
		},
			"Annuleren": function() { 
			$(this).dialog("close"); 
		}
	});
}
*/

function getNowDate()
{
	var date;
	try
	{
		date = getStatusDocument().getElementById("nowdate").innerHTML;
	}
	catch (e) {date = toDutchDate(new Date());}
	
	return date;
}

function getNowYear()
{
	var date;
	try
	{
		date = getStatusDocument().getElementById("nowyear").innerHTML;
	}
	catch (e) {date = new Date().getUTCFullYear();}
	
	return date;
}

function getNowMonth()
{
	var date;
	try
	{
		date = getStatusDocument().getElementById("nowmonth").innerHTML;
	}
	catch (e) {date = (new Date().getMonth()) + 1;}
	
	return date;
}

function getPreviousYear()
{
	var date;
	try
	{
		date = parseInt(getStatusDocument().getElementById("nowyear").innerHTML) - 1;
	}
	catch (e) {date = parseInt(new Date().getUTCFullYear() - 1);}
	
	return date;
}

function getPreviousMonth()
{
	var date;
	try
	{
		date = parseInt(getStatusDocument().getElementById("nowmonth").innerHTML) - 1;
	}
	catch (e) {date = parseInt(new Date().getMonth() - 1);}
	
	if (date == 0) date = 12;
	
	return date;
}

function getPreviousMonthYear()
{
	if (getPreviousMonth() == 12) return getPreviousYear(); else return getNowYear();
}

var processUserFilesXmlDocs	= null;
function addXmlDocToProcess(xmlDoc)
{
	if(processUserFilesXmlDocs == null)
	{
		processUserFilesXmlDocs = [];
	}
	
	processUserFilesXmlDocs.push(xmlDoc);
}

function processUserFiles(xmlDoc)
{
	if(typeof(xmlDoc) == "undefined" || xmlDoc == null)
	{
		if(processUserFilesXmlDocs != null && processUserFilesXmlDocs.length > 0)
		{
			for(var i = 0; i < processUserFilesXmlDocs.length; i++)
			{
				if(processUserFilesXmlDocs[i] == null)
				{
					$.atsc.debug("WARNING: null xmlDoc found in processUserFilesXmlDocs");
					continue;
				}
				
				processUserFiles(processUserFilesXmlDocs[i]);
			}
			processUserFilesXmlDocs		= null;
		}
		return;
	}
	
	if (xmlDoc != null)					{ processFilesInXMLMessage(xmlDoc); }
}

function printFilesToPrint(xmlDoc)
{
	if (xmlDoc != null)
	{	
		var files	= xmlDoc.getElementsByTagName("file");

		if (files != null && files.length > 0)
		{	
			for (var i = 0; i < files.length; i++)
			{
				var f = files[i].firstChild.nodeValue;
		
				t = "_blank";
		
				if (f.indexOf(".pdf") > -1) t = "_self";

				pw = wt.frames["wtemp"].open(IOSERVLETURL + "?action=" + GETSPOOLERFILE + "&file=" + f, t);				
			}
		}
	}
}

function downloadFilesToDownload(xmlDoc)
{
	if (xmlDoc != null)
	{
		var sysfls_unids		= xmlDoc.getElementsByTagName("sysfls_unid");

		if (sysfls_unids != null && sysfls_unids.length > 0)
		{	
			for (var i = 0; i < sysfls_unids.length; i++)
			{
				var sysfls_unid	= sysfls_unids[i].firstChild.nodeValue;
				
				pw = wt.frames["wtemp"].open("/DownloadServlet?uniqueid=" + sysfls_unid, "_blank");				
			}
		}
	}
}

function popupFilesToPopup(xmlDoc)
{
	if (xmlDoc != null)
	{
		var files	= xmlDoc.getElementsByTagName("popupfile");

		if (files != null && files.length > 0)
		{	
			var popupHTML = "<div id=\"popupmsg\"><span>Klik op de betreffende knop om het bestand te downloaden</span><br /><div style=\"width: 100%; height: 200px; margin-top: 8px; overflow: auto;\">";
			
			for (var i = 0; i < files.length; i++)
			{
				var f = files[i].firstChild.nodeValue;
				
				f	= f.replace(/\\/g, "/");

				if (f.endsWith(".silent"))
				{				
					download(IOSERVLETURL + "?action=" + GETSPOOLERFILE + "&file=" + f);
					return;
				}				
				
				popupHTML = popupHTML + "<br /><button class=\"modalbutton\" id=\"downloadButton" + i + "\" onclick=\"download('" + IOSERVLETURL + "?action=" + GETSPOOLERFILE + "&file=" + f + "'); return false;\">" + f.backwardsright("/") + "</button><br />";
			}
			
			popupHTML = popupHTML + "</div></div>";

			
			var dialog = getFrame(getCurrentFrameName()).jQuery.atsc.dialog.makeModal({
				title: getApplicationName(),
				html: popupHTML,
				autoOpen: true,
				buttons: [
					{
						text: "Sluiten",
						click: function(){
							getFrame(getCurrentFrameName()).jQuery(this).dialog("close");
						}
					}
				],
				closable: true,
				closeOnEscape: true,
				open: function(e, ui){
					var elems = $(".modalbutton", e.target);
					elems.button();
					
					elems.keydown(function(e){
						if(false && e.which == 37)
						{
							$.atsc.event.preventDefault(e, true);
							return false;
						}
						
						if (e.which == 38 || e.which == 40)
						{
							$.atsc.event.preventDefault(e, true);
							
							var elems					= $(".modalbutton", $(this).parent())
							var index					= elems.index(this);
							var i						= index;
							if(e.which == 38) //up arrow
							{
								i--;
								if(i < 0)				{ i = elems.length - 1; }
							}
							else if(e.which == 40) //down arrow
							{
								i++;
								if(i >= elems.length)	{ i = 0; }
							}
							
							var elem					= elems.eq(i);
							$(this).blur();
							elem.focus();
							
							return false;
						}
						
						if (e.which == 13)
						{
							$.atsc.event.preventDefault(e, true);
							$(this).click();
							return false;
						}
						
						return true;
					});
				},
				setFocus: function(){
					$(":focus").blur();
					
					var elems = $(".modalbutton", this);
					elems.first().focus();
				},
				onKeyDown: function(e){
					if(e.which == 37)
					{
						$.atsc.dialog.focus();
						return false;
					}
					
					return true;
				}
			});
		}
	}
}

function endPopupFilesToPopup(v, m)
{
	return true;
}

function previousbreadcrumb()
{
	var pbc = document.getElementById("previousbreadcrumb");

	if (pbc != null) 
	{
		window.location.replace(pbc.href);
		
		return true;
	}
	else 
	{
		try 
		{
			specificpreviousbreadcrumb();
			
			return true;
		}
		catch (e) {return false;}
	}
}

function openEclipse(uri)
{
	try	{wt.frames["wtemp"].location.replace("atsc://" + uri);} catch (e) {}	
}

function getServerVariable(variable)
{
	var v = "";
	
	$.ajax({
		   type: "GET",
		   url: "/IOServlet",
		   cache: false,
		   async: false,
		   data: {"action": SERVERVARIABLES, "name": name },
		   dataType: "xml",
		   success: function(xmlDoc)
		   {
				v = $(variable, xmlDoc).text();
		   }
		 });
	
	return v;
}

var editMode = false;
var helpDialogId = null;
function helpFrameLoad(doc)
{
	$(doc).keydown(function(e){
		$("#dialog_" + helpDialogId).trigger(e);
	});
}

function helpEventCallback(e, from_doc)
{
	if(e.type == "keydown")
	{
		$("#dialog_" + helpDialogId).trigger(e);
	}
	
	return true;
}

if(typeof(ui) != "undefined")
{
	ui.help = {
		openHelp: function(type, item_name, item, edit)
		{
			if(isHelpServletAvailable())
			{
				if(helpidname != "-1")							{ name = helpidname; }
				
				var url											= "/HelpServlet?action=0&type=" + type;
				if(item_name != null && item_name != "")		{ url += "&name=" + item_name; }
				if(item != null && item != "")					{ url += "&field=" + item.id; }
				if(edit)										{ url += "&edit=true"; }
				
				var elem;
				if(helpDialogId != null)
				{
					elem = $("#dialog_" + helpDialogId);
				}
				
				if(!elem)
				{
					elem = $.atsc.dialog.makeModal({
						title: getApplicationName() + " :: Help",
						buttons: [],
						width: 980,
						height: 540,
						closeOnEscape: true,
						closable: true,
						selectable: true,
						autoOpen: false,
						destroyOnClose: false,
						close: function()
						{
							focusCurrentFrame();
						},
						onKeyDown: function(e){
							if(e.which == 112) //prevent F1 from having any kind of effect here
							{
								return false;
							}
						}
					});
					
					helpDialogId = elem.attr("id").substring(7);
				}
				
				elem.css("overflow", "hidden");
				elem.html("<iframe src=\"" + url + "\" frameborder=\"0\" allowtransparency=\"true\" style=\"width: 960px; height: 490px;\"></iframe>");
				elem.dialog("open");
				
				//If this is IE, make sure the regular F1 key is blocked via onhelp
				if(IE){ document.onhelp = function(){ return false; } }
			}
		}
	};
}

function openHelp(type, item_name, item, edit)
{
	try			{ ui.help.openHelp(type, item_name, item, edit); }
	catch(e)	{ $.atsc.debug(e.message); }
}

function processFilesInXMLMessage(xmlDoc)
{
	xmlDoc																		= $(xmlDoc);
	var files																	= xmlDoc.find("files");
	if (files.length > 0)
	{
		var	popupFiles															= [];
		var downloadFiles														= [];
		var printFiles															= [];
		
		files																	= files.find("file");
		files.each(function(){
			var path															= $(this).attr("path");
			var sysfls_unid														= $(this).attr("sysfls_unid");
			var action															= $(this).attr("action");
			var data															= {"path": path.replace(/\\/g, "/"), "sysfls_unid": sysfls_unid, "url": ""};
			
			if (data["path"])													{ data["url"] = "/file" + data["path"]; }
			else if (data["sysfls_unid"])										{ data["url"] = "/file/options/forcedownload/db/" + data["sysfls_unid"]; }
			
//			if (data["path"])													{ data["url"] = IOSERVLETURL + "?action=" + GETSPOOLERFILE + "&file=" + data["path"]; }
//			else if (data["sysfls_unid"])										{ data["url"] = "/DownloadServlet?uniqueid=" + data["sysfls_unid"]; }
			
			data["url"]															= data["url"].replace(/#/g, "%23");
			
			switch (action)
			{
				case "print":
					printFiles.push(data);
					break;
				
				case "download":
					downloadFiles.push(data);
					break;
				
				case "popup":
					popupFiles.push(data);
					break;
				
				default:
					$.atsc.debug("ERROR: File with an invalid action (\"" + action + "\")!");
					break;
			}
		});
		
		if (popupFiles.length > 0)
		{
			var popupHTML														= "<div id=\"popupmsg\"><span>Klik op de betreffende knop om het bestand te downloaden</span><br /><div style=\"width: 100%; height: 200px; margin-top: 8px; overflow: auto;\">";
			var fileData;
			for (var i = 0; i < popupFiles.length; i++)
			{
				fileData														= popupFiles[i];
				
				if (fileData["path"] && fileData["path"].endsWith(".silent"))	{ download(IOSERVLETURL + "?action=" + GETSPOOLERFILE + "&file=" + fileData["path"]); }
				else
				{
					popupHTML													+= "<br /><button class=\"modalbutton\" id=\"downloadButton" + i + "\" onclick=\"download('"
																				+  fileData["url"] + "'); return false;\">";
					
					if (fileData["name"])										{ popupHTML += fileData["name"]; }
					else if (fileData["path"])									{ popupHTML += fileData["path"].backwardsright("/"); }
					else if(fileData["sysfls_unid"])							{ popupHTML += fileData["sysfls_unid"] }
					
					popupHTML													+= "</button><br />";
				}
			}
			
			popupHTML															+= "</div></div>";
			
			var dialog															= getFrame(getCurrentFrameName()).jQuery.atsc.dialog.makeModal({
				title:			getApplicationName(),
				html:			popupHTML,
				autoOpen:		true,
				buttons:		[
									{
										text: "Sluiten",
										click: function(){
											getFrame(getCurrentFrameName()).jQuery(this).dialog("close");
										}
									}
								],
				closable:		true,
				closeOnEscape:	true,
				open:			function(e, ui)
				{
					var elems													= $(".modalbutton", e.target);
					elems.button();
					
					elems.keydown(function(e)
					{
						if(false && e.which == 37)
						{
							$.atsc.event.preventDefault(e, true);
							return false;
						}
						
						if (e.which == 38 || e.which == 40)
						{
							$.atsc.event.preventDefault(e, true);
							
							var elems											= $(".modalbutton", $(this).parent())
							var index											= elems.index(this);
							var i												= index;
							if(e.which == 38) //up arrow
							{
								i--;
								if(i < 0)										{ i = elems.length - 1; }
							}
							else if(e.which == 40) //down arrow
							{
								i++;
								if(i >= elems.length)							{ i = 0; }
							}
							
							var elem											= elems.eq(i);
							$(this).blur();
							elem.focus();
							
							return false;
						}
						
						if (e.which == 13)
						{
							$.atsc.event.preventDefault(e, true);
							$(this).click();
							return false;
						}
						
						return true;
					});
				},
				setFocus:		function()
				{
					$(":focus").blur();
					
					var elems													= $(".modalbutton", this);
					elems.first().focus();
				},
				onKeyDown:		function(e)
				{
					if(e.which == 37)
					{
						$.atsc.dialog.focus();
						return false;
					}
					
					return true;
				}
			});
		}
		
		if (downloadFiles.length > 0)
		{
			var fileData;
			for (var i = 0; i < downloadFiles.length; i++)
			{
				fileData														= downloadFiles[i];
				download(fileData["url"]);
			}
		}
		
		if (printFiles.length > 0)
		{
			var fileData;
			for (var i = 0; i < printFiles.length; i++)
			{
				fileData														= printFiles[i];
				download(fileData["url"]);//, ((fileData["path"] && fileData["path"].indexOf(".pdf") > -1) ? "_self" : "_blank"));
			}
		}
		
		return popupFiles.length > 0 || downloadFiles.length > 0 || printFiles.length > 0;
	}
	
	return false;
}
