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;

function getEvent(event)
{
	if (!IE) return event;
	else return window.event;
}

function getElement(event)
{
	var element;
	if (!IE)  element = event.target;
	else element = event.srcElement;
	return element;
}

function processXMLDoc(urlstr, func, noAlert, async)
{
	if (async == null) async = false;

	if (!IE) async = true;

	var xmlDoc;

	try
	{
		urlstr += "&mode="+mode;
	}
	catch (e) {}

	var request = getXMLHttpRequest();
	
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			var resp = request.responseText;
			if(resp != null) resp = resp.replace(/_&lt;newline&gt;_/g, "\n");
			
			xmlDoc	= string2XML(resp);
		
			if (xmlDoc.documentElement != null)
			{
				if (func != null) eval(func + "(xmlDoc)");				
			}
			else if (!noAlert) alert(MSG_CONNECTION_SERVER_LOST);
		}
	}

	try
	{			
		request.open('GET', fixURL(urlstr), async);
		request.send(null);
	}
	catch (e) {/*alert(e.message);*/} // Let op met alert, je kunt dan de melding: "Het downloaden van de opgegeven bron is mislukt" krijgen

	return xmlDoc;
}

function getXMLHttpRequest()
{
	var xhr = null;
		
	try 
	{
		xhr = new XMLHttpRequest(); //IE7+ with and Non-IE		
	} 
	catch (e) 
	{
		xhr = new ActiveXObject("Microsoft.XMLHTTP"); //IE with ActiveX enabled		 
	} 

	return xhr;
}

function getOption(option)
{
	try
	{
		url = IOSERVLETURL + "?action="+GETOPTIONVALUE+"&option="+option+"";
		var xmlDoc = processXMLDoc(url);
		var optionTag = xmlDoc.getElementsByTagName("option")[0];
		return optionTag.getAttribute("value");
	}
	catch (e) { }
	
	return "";
}

function getNodeValue(maintag, i, childtag, xmlDoc)
{
	var value = "";
	var main = xmlDoc.getElementsByTagName(maintag)[i];
	if (main != null)
	{
		var mcn = main.childNodes;
		var mcnl = mcn.length;
		for (j=0;j<mcnl;j++)
		{
			var cn = mcn[j];
			if (cn.nodeType != 1) continue;
			if (cn.nodeName == childtag)
			{
				if (cn.firstChild != null) value = cn.firstChild.nodeValue;
			}
		}
	}
	return value;
}

function getTag(name,xmlDoc)
{
	tags = xmlDoc.getElementsByTagName(name);
	return tags[0];
}

function createNewXMLDocument()
{
	if (document.implementation && document.implementation.createDocument) newDoc = document.implementation.createDocument("", "", null);
	else if (window.ActiveXObject) newDoc = new ActiveXObject("Microsoft.XMLDOM");
	return newDoc;
}

//idem als getParam, maar nu wordt de variabele url lowercase gemaakt
function getParam2(param)
{
	param = param.toLowerCase();
	var url = window.location.search.toLowerCase();
	var stparam = url.indexOf(param + "=");
	var res = "";
	if (stparam > -1)
	{
		var enparam = url.indexOf("&", stparam + param.length);
		if (enparam>-1) res = url.substr(stparam + param.length + 1, enparam - (stparam + param.length + 1));
		else res = url.substr(stparam + param.length + 1);
	}
	return res;
}

function getParam(param)
{
	param = param.toLowerCase();
	var url = window.location.search;

	var stparam = url.indexOf(param + "=");
	var res = "";
	if (stparam > -1)
	{
		var enparam = url.indexOf("&", stparam + param.length);
		if (enparam>-1) res = url.substr(stparam + param.length + 1, enparam - (stparam + param.length + 1));
		else res = url.substr(stparam + param.length + 1);
	}
	return res;
}

function getElementsByTagNames(obj, list) 
{
        if (!obj) var obj = document;
        var tagNames = list.split(',');
        var resultArray = new Array();
        for (var i=0;i<tagNames.length;i++)
        {
                var tags = obj.getElementsByTagName(tagNames[i]);
                for (var j=0;j<tags.length;j++)
                {
                        resultArray.push(tags[j]);
                }
        }
        
        if (resultArray.length > 0)
        {
	        var testNode = resultArray[0];
	        if (testNode.sourceIndex)
	        {
	                resultArray.sort(function (a,b) {
	                                return a.sourceIndex - b.sourceIndex;
	                });
	        }
	        else if (testNode.compareDocumentPosition)
	        {
	                resultArray.sort(function (a,b) {
	                                return 3 - (a.compareDocumentPosition(b) & 6);
	                });
	        }
	    }
	    
	    return resultArray;
}

function getElementsByClassName(cname, hint)
{
	var tags;
	if (hint == null) tags = document.all || document.getElementsByTagName('*');
	else tags = document.getElementsByTagName(hint);

	var tagsl = tags.length;
	var classTag = [];
	var j = 0;
	var tagsI;
	var tagsICN;

	for(var i = 0; i < tagsl; i++)
	{
		tagsI = tags[i];
		tagsICN = tagsI.className;
		
		if (tagsICN != null)
		{
			if (tagsICN.indexOf(cname) > -1)
			{
				tagsICNA = tagsICN.split(" ");
	
				var kl = tagsICNA.length;
	
				for(var k = 0; k < kl; k++)
				{	
					if(tagsICNA[k] == cname)
					{
						classTag[j] = tagsI;
						j++;
					}
				}
			}
		}
	}

  	return classTag;
}
function getElementsByType(type, name)
{
	var tags = document.all || document.getElementsByTagName('*');
	var tagsl = tags.length;
	var typeTag = [];
	var j = 0;

	for (var i = 0; i < tagsl; i++)
	{
		if (tags[i].type && tags[i].type != null)
		{
			if (tags[i].type == type)
			{
				if (name != null)
				{
					if (tags[i].name == name) 
					{
						typeTag[j] = tags[i];
						j++;
					}
				}
				else 
				{
					typeTag[j] = tags[i];				
					j++;
				}
			}
		}
  	}
  	return typeTag;
}

function getCheckedItemFromElements(el)
{
	var b = false;
	var j = 0;

	try
	{
		var ell = el.length;
	
		while(!b && j < ell)
		{
			if(el[j].checked)
			{
				b = true;
				return el[j];
			}
			j++;
		}
	}
	catch(e)
	{
		return null;
	}
	if(!b) return null;
}

function newAlert(title, message)
{
	if (title == "" || title == null) title = "Waarschuwing";
	if (message == null) message = "";

	var vArguments = [];
	vArguments[0]  = window;
	vArguments[1]  = message;
	vArguments[2]  = title;

	wt.showModalDialog("/" + CONTEXTNAME + "/jsp/atsc/MessageDialog.jsp", vArguments, "edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll: No; dialogWidth:340px; dialogHeight:180px;");
}

function replaceAll(str, from, to)
{
    var idx = str.indexOf( from );

    while (idx > -1)
    {
        str = str.replace(from, to);
        idx = str.indexOf(from );
    }

    return str;
}

function corr(v)
{
	var vc = v;

	vc = vc.replace(/\+/g, "_<plus>_");
	vc = vc.replace(/\\/g, "_<backslash>_");
	vc = vc.replace(/\%/g, "_<percent>_");
	vc = vc.replace(/\&/g, "_<ampercent>_");
	vc = vc.replace(/\,/g, "_<comma>_");
	vc = vc.replace(/\'/g, "_<quote>_");

	vc = escape(vc);

	return vc;
}

function transformXMLValue2Normal(v)
{
	var vc = v;

	vc = vc.replace(/_<newline>_/g, "\n");
	vc = vc.replace(/_<ampercent>_/g, "&");
	vc = vc.replace(/_<percent>_/g, "%");
	vc = vc.replace(/_<plus>_/g, "+");
	vc = vc.replace(/_<backslash>_/g, "\\");
	vc = vc.replace(/_<quote>_/g, "'");
	vc = vc.replace(/_<comma>_/g, ",");
	vc = vc.replace(/_<tab>_/g, "\t");
	vc = vc.replace(/&lt;/g, "<");
	vc = vc.replace(/&gt;/g, ">");

	return vc;
}

function putMessage()
{
	var message = prompt("Vul hier het bericht in", "");
	if(message != "" && message != null)
	{
		message = corr(message);
		var url = "/" + CONTEXTNAME + "/MessageServlet?action=0&message="+message;
		var xmlDoc = processXMLDoc(url, null);
	}
}

function swapReadOnlyAndEmpty(fieldId, state, empty, req, check, nr)
{
	try
	{
		if (check == null) check = true;
		var fld        = fieldId

		if (typeof fld == "string") fld = document.getElementById(fieldId);
		
		var fldi       = document.getElementById("i" + fld.id);
		var fldt       = document.getElementById("t" + fld.id);

		if (fld.type == "radio" && nr == null)
		{			
			var r = document.forms[0].elements[fld.name];

			for (var i = 0; i < r.length; i++)
			{
				swapReadOnlyAndEmpty(fieldId, state, empty, req, check, i);
			}			
		}
		else
		{
			if (fld.type == "radio") fld = document.forms[0].elements[fld.name][nr];			

			var classArray = (fld.className).split(" ");

			if (mode == MODE_READ) state = true;
								
			if (empty) 
			{		
				if (fld.type == "radio") fld.checked = "";
				else fld.value = "";
			}			
			
			if (req != null)
			{
				if (req) fld.setAttribute("req", "true");
				else 	 fld.setAttribute("req", "false");
			}
		
			if (state)
			{							 
				var upl		= document.getElementById("UL" + fld.id);
				if (upl)	
				{				
					upl.style.display = "none";
					var upim	  = document.getElementById("im" + fld.id);
					if (upim) upim.style.display = "none";				
				}

				if (fld.type == "radio") fld.disabled = "disabled";

				fld.className = classArray[0]+" readonly";
				fld.readOnly  = "readonly";

				if (fldi != null && !upl) fldi.style.visibility = "hidden";
				if (fldt != null) fldt.style.visibility = "hidden";				
	
				if (empty) fld.fuidvalue = "";
				fld.setAttribute("valid", "true");
			}
			else
			{
				fld.className = classArray[0];
				fld.readOnly  = "";

				if (fldi != null) fldi.style.visibility = "visible";
				if (fldt != null) fldt.style.visibility = "visible";
				
				var upl		= document.getElementById("UL" + fld.id);
				if (upl)	
				{				
					upl.style.display = "inline";
					var upim	  = document.getElementById("im" + fld.id);
					if (upim) upim.style.display = "inline";					
				}

				if (fld.type == "radio") fld.disabled = "";
			
				// fld.oldQmapValue = "_<null>_"; // TH: Als je dit doet dan worden opgezochte waarden die je zelf veranderd weer overschreven, zie omschrijving van klantenbestelregel, onderstaande code voor in de plaats gezet (alleen controle op required)
				if (fld.req == "true" && fld.value == "") fld.setAttribute("valid", "false");
	
				if (check) checkItem(fld);
			}
			
			setErrorClass(fld);
		}
	}
	catch (e) { alert(e.message+": "+fieldId); }
}
// Wordt gebruikt in EBV
//------------------------------------
// aangepast op 14-04-2005
// Nu kunnen ook waardes meegegeven worden.
function makeFloat(input, val)
{
	try
	{
		if(val == null || !val)
		{
			var value = document.getElementById(input).value.replace(",",".");
			if(value != "") return parseFloat(value);
		}
		else
		{
			if(input != "") return parseFloat(input.replace(",", "."));
		}

		return 0;
	}
	catch(e) { return 0; }
}

function fixed(a)
{
	var a = ""+a;
	return parseFloat(a.replace(",", ".")).toFixed(2).replace(".",",");
}

// Wordt gebruikt in EBV
//----------------------------------
// @param element waarin de velden op readonly gezet moeten worden,
//        of null, dan wordt het complete scherm genomen.
// @param empty : boolean : geeft aan of de velden leeggegooid moeten worden.
function makeAllReadOnly(elem, empty)
{
	var elems  = null;
	if (elem  == null)
	{
		elems = document.forms[0].elements;
	}
	else elems = elem.getElementsByTagName("*");

	if (empty == null) empty = false;

//	var elems  = elem.getElementsByTagName("*");
	var elemsl = elems.length;
	for (var i = 0; i < elemsl; i++)
	{
		if (elems[i].id) try { swapReadOnlyAndEmpty(elems[i].id, true, empty); } catch (e) {}
	}
}

function string2XML(str)
{
	var xmlDoc 			= createNewXMLDocument();
	
	if (IE)
	{
		xmlDoc.async 	= "false";
		xmlDoc.loadXML(str);
	}
	else
	{
		xmlDoc = (new DOMParser()).parseFromString(str, "text/xml");	
	}

	return xmlDoc;
}

function addPoints(nStr)
{
	nStr += '';
	x = nStr.split(',');
	x1 = x[0];
	x2 = x.length > 1 ? ',' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}

function changecss(theClass, element, value) 
{	
	var cssRules;
	
	if (document.all) 	cssRules = 'rules';
	else 				cssRules = 'cssRules';
	 	 
	for (var S = 0; S < document.styleSheets.length; S++)
	{
		var rules		= document.styleSheets[S][cssRules];
		
		for (var R = 0; R < rules.length; R++) 
		{
			var rule	= rules[R];
			
	   		if (rule.selectorText == theClass) rule.style[element] = value;	   		
	  	}
	}	
}

function findPos(obj) 
{
	var curleft = curtop = 0;
	
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	return [curleft,curtop];
}

function getAttribute(item, attribute)
{
	var v = null;

	try
	{
		v = item.getAttribute(attribute);
	}
	catch (e) {}
	
	try
	{
		if (v == null) v = item[attribute];
	}
	catch (e) {}
	
	return v;
}

function isContentEditable(item)
{
	if (IE) return item.isContentEditable; 
	else 	return !item.readOnly;	
}

function getRadioValue(radioField)
{
	var radios					= document.forms[0].elements[radioField];
	var tmp						= "";
	if (radios != null)
	{
		if (!radios.length) //er is maar 1 optie, dus geen array
		{	
			radios					= document.getElementById(radioField+ "_0");		
			if (radios != null)
			{			 
			    if (radios.checked)	tmp		= radios.value;
			}
		}
		else
		{
			tmp					= getCheckedItemFromElements(radios);
			if(tmp != null) tmp			= tmp.value; else tmp = "";
		}
	}
	
	return tmp;
}

function setRadioValue(radioField, value)
{
	var radios					= document.forms[0].elements[radioField];
	
	for (var optionCounter = 0; optionCounter < radios.length; optionCounter++)
	{
		if (radios[optionCounter].value == value) radios[optionCounter].checked = true;
	}
}

function sendEmptyRequest()
{
	if (window.location.protocol == 'https:')
	{
		try 
		{
			var request = getXMLHttpRequest();
			request.open('GET', "/" + CONTEXTNAME + "/IOServlet?action=-1", false);
			request.send(null);
		}
		catch (e) {}
	}
}

function sleep(millis) 
{
	var date = new Date();
	var curDate = null;
	
	do { curDate = new Date(); } 
	while(curDate-date < millis)
}

function message(t,m,f)
{
	try
	{
		$.prompt('<h3>'+t+'</h3><p>'+m+'</p>',{ 
		  submit: f,
		  loaded: openMessageBox,
		  callback: closeMessageBox,
		  buttons:{Ja:1,Nee:2,Annuleren:3},
		  opacity: 0.3,
		  loaded:function(){try{getElementsByClassName("promptbutton")[0].focus();}catch(e){}}
		});
	}
	catch (e) {alert(e.message);}
}

function callInProgress(xmlhttp) 
{
	if (xmlhttp == null) return false;
	else
	{
		switch (xmlhttp.readyState) 
		{
			case 1: case 2: case 3:
				return true;
				break;
				// Case 4 and 0
			default:
				return false;
				break;
		}
	}
}