/* ===================================================================   Formulier-functies     voor vullen van velden en koppelen van waarden tussen velden.   ===================================================================*/var idxSource, idxTarget, idxMarker;
var objSource, objTarget, objMarker1, objMarker2;

/* ----------------------------------------------
    field-value functies
 ----------------------------------------------*/
function getValue(fld_nm) {
	var i, fld, coll, waarde;
	fld = getElement(fld_nm);
	if ((fld.type=='radio') || (fld.type=='checkbox')) {
		if (document.getElementById) { coll = document.getElementsByName(fld_nm); }
		else if (document.all) { coll = document.all["'"+fld_nm+"'"]; }
		else if (document.layers) { coll = document.layers[fld_nm]; }
		if (coll[0].type=='radio') {
			for (i = 0; i < coll.length; i++) {
				if (coll[i].checked) { waarde=i+1; }
			}
		}
		if (coll[0].type=='checkbox') {
			waarde=0;
			for (i = 0; i < coll.length; i++) {
				if (coll[i].checked) { waarde=waarde+Math.pow(2,i); }
			}
		}
	}
	else {
		waarde=fld.value;
	}
	return waarde;
}

function setValue(fld_nm, waarde) {
	var i, fld, coll;
	fld = getElement(fld_nm);
	if ((fld.type=='radio') || (fld.type=='checkbox')) {
		if (document.getElementById) { coll = document.getElementsByName(fld_nm); }
		else if (document.all) { coll = document.all["'"+fld_nm+"'"]; }
		else if (document.layers) { coll = document.layers[fld_nm]; }
		if (coll[0].type=='radio') {
			for (i = 0; i < coll.length; i++) {
				if (i==(waarde-1)) { coll[i].checked=true; } else { coll[i].checked=false; }
			}
		}
		if (coll[0].type=='checkbox') {
			for (i = 0; i < coll.length; i++) {
				if ((Math.pow(2,i) & waarde) != 0) { coll[i].checked=true; } else { coll[i].checked=false; }
			}
		}
	}
	else {
		fld.value=waarde;
	}
}

function enableValue(fld_nm) {
	var i, fld, coll;
	fld = getElement(fld_nm);
	if ((fld.type=='radio') || (fld.type=='checkbox')) {
		if (document.getElementById) { coll = document.getElementsByName(fld_nm); }
		else if (document.all) { coll = document.all["'"+fld_nm+"'"]; }
		else if (document.layers) { coll = document.layers[fld_nm]; }
		for (i = 0; i < coll.length; i++) {
			coll[i].disabled=false;
		}
	}
	else {
		fld.disabled=false;
	}
}

function disableValue(fld_nm) {
	var i, fld, coll;
	fld = getElement(fld_nm);
	if ((fld.type=='radio') || (fld.type=='checkbox')) {
		if (document.getElementById) { coll = document.getElementsByName(fld_nm); }
		else if (document.all) { coll = document.all["'"+fld_nm+"'"]; }
		else if (document.layers) { coll = document.layers[fld_nm]; }
		for (i = 0; i < coll.length; i++) {
			coll[i].disabled=true;
		}
	}
	else {
		fld.disabled=true;
	}
}

function clearValue(fld_nm) {
	var i, fld, coll;
	fld = getElement(fld_nm);
	if ((fld.type=='radio') || (fld.type=='checkbox')) {
		if (document.getElementById) { coll = document.getElementsByName(fld_nm); }
		else if (document.all) { coll = document.all["'"+fld_nm+"'"]; }
		else if (document.layers) { coll = document.layers[fld_nm]; }
		for (i = 0; i < coll.length; i++) {
			coll[i].checked=false;
		}
	}
	else {
		fld.value='';
	}
}

/* ----------------------------------------------
    enableAllValues
    zet alle disabled formuliervelden op enabled,
    anders gaan ze niet mee in de submit
 ----------------------------------------------*/
function enableAllValues() {	var i, frm;
	frm = document.forms[0];
	for (i = 0; i < frm.length; i++) {
		frm.elements[i].disabled=false;
	}
}

/* ----------------------------------------------
    buttonclick
    forceer een click op button (button, timer, hyperlink) van het basis-formulier
 ----------------------------------------------*/
function buttonclick(butnr) {
	var i, frm, el, nm, tp, nr;	frm = document.forms[0];
	// eerst button proberen	for (i = 0; i < frm.length; i++) {
		el = frm.elements[i];
		nm = el.name;
		tp = nm.substr(0,2);
		if (tp=='_B') {
			nr = nm.substr(2).valueOf;
			if (nr==butnr) {
				el.click();
				return;
			};
		};
	};
	// dan hyperlink proberen	for (i = 0; i < frm.length; i++) {
		el = frm.elements[i];
		nm = el.name;
		tp = nm.substr(0,2);
		if (tp=='_H') {
			el.value=butnr;
			frm.submit();
			return;
		};
	};
}
/* ----------------------------------------------
    setglobalfocus
    zet de focus (indien mogelijk) op het eerste
    zichtbare lege textveld binnen een formulier
 ----------------------------------------------*/
function setglobalfocus() {	var i, j;	for (i = 0; i < document.forms.length; i++) {
		for (j = 0; j < document.forms[i].length; j++) {
			if ((document.forms[i].elements[j].type=='text') || (document.forms[i].elements[j].type=='password') || (document.forms[i].elements[j].type=='textarea')) {
				if (!document.forms[i].elements[j].disabled) {
					if (document.forms[i].elements[j].value=='') {
						try {
							document.forms[i].elements[j].focus()
						}
						catch(e) {
							break;
						}
						break;
					}
				}
			}
		}
	}
	if (document.body.scrollTop > 0) {	//set focus naar body en scroll terug
		try {
			document.body.focus();
		}
		catch(e) {
			document.body.scrollTop = 0;
		}
		document.body.scrollTop = 0;
	}
}
function docheck(f_txt, f_chk, i) {
	var oldval=0;
	if (f_chk[0].type=='radio') {
		for (j = 0; j < f_chk.length; j++) {
			if (f_chk[j].checked) {
				if (j==(i-1)) oldval=1; 
				else oldval=j+1;
			}
		}
	}
	if (f_chk[0].type=='checkbox') {
		for (j = 0; j < coll.length; j++) {
			if ((j!=(i-1)) && f_chk[j].checked) { oldval=oldval+Math.pow(2,j); }
		}
	}
	if (f_txt.type=='text') {
		if (f_txt.value!='') {
			try {
				f_chk[i-1].checked=true;
			}
			catch(e) {
				return;
			}
		}
		else {
			try {
				if (f_chk[0].type=='radio') {
					for (j = 0; j < f_chk.length; j++) {
						if (j==(oldval-1)) { f_chk[j].checked=true; } else { f_chk[j].checked=false; }
					}
				}
				if (f_chk[0].type=='checkbox') {
					for (j = 0; j < f_chk.length; j++) {
						if ((Math.pow(2,j) & oldval) != 0) { f_chk[j].checked=true; } else { f_chk[j].checked=false; }
					}
				}
			}
			catch(e) {
				return;
			}
		}
	}
	else {
		try {
			f_chk[i-1].checked=true;
		}
		catch(e) {
			return;
		}
	}
}

function dotext(f_txt, f_chk, i) {
	if (f_chk[i-1].checked) {
		try {
			f_txt.focus()
		}
		catch(e) {
			return;
		}
	}
	else {
		try {
			f_txt.value=''
		}
		catch(e) {
			return;
		}
	}
}

function doset(f_txt, f_chk, v1, v2) {
	if (f_chk.checked) f_txt.value=v1;
	else f_txt.value=v2;
}

function domax(f_chk, maxaantal, nr) {
	var teller=0;
	for (i = 0; i < f_chk.length; i++) {
		if (f_chk[i].checked) teller=teller+1;
	}
	if (teller > maxaantal) f_chk[nr-1].checked=false;
}

function dosum(f_tot, f_sub) {
	var t=0;
	for (i = 0; i < f_sub.length; i++) {
		t += parseInt(f_sub[i].value);
	}
	f_tot.value=t;
}

function dopoints(f_pnt, f_sub) {
	f_pnt.value='';
	for (i = 0; i < f_sub.length; i++) {
		f_sub[i].value = f_sub[i].value.toString().replace(/\.|\,/g,'');
		if (f_sub[i].value=='') f_sub[i].value=0;
		if(isNaN(f_sub[i].value)) f_sub[i].value=0;
		if (i>0) f_pnt.value += '|';
		f_pnt.value += f_sub[i].value;
	}
}

function doorder(f_pnt, f_lst0, f_lst1) {
	f_pnt_arr = f_pnt.value.split("|");
	if (f_lst0) {
		for (i = 0; i < f_lst0.options.length; i++) {
			j = f_lst0.options[i].value - 1;
			f_pnt_arr[j] = 0;
		}
		for (i = 0; i < f_lst1.options.length; i++) {
			j = f_lst1.options[i].value - 1;
			f_pnt_arr[j] = f_lst0.options.length + f_lst1.options.length - i;
		}
	}
	else {
		for (i = 0; i < f_lst1.options.length; i++) {
			j = f_lst1.options[i].value - 1;
			f_pnt_arr[j] = f_lst1.options.length - i;
		}
	};
	f_pnt.value='';
	for (i = 0; i < f_pnt_arr.length; i++) {
		if (i>0) f_pnt.value += '|';
		f_pnt.value += f_pnt_arr[i];
	}
}

function doitemorder(f_pnt, f_val) {
	f_pnt_arr = new Array;
	for (i = 0; i < f_val.length; i++) {
		f_pnt_arr[f_val[i].value] = f_val.length - i;
	};
	f_pnt.value='';
	for (i = 0; i < f_pnt_arr.length; i++) {
		if (i>0) f_pnt.value += '|';
		f_pnt.value += f_pnt_arr[i];
	}
}

function dodisable(fld, disabled) {
	fld.disabled=disabled;
	if (!disabled) fld.focus();
}

function dobgcolor(fld, bgcolor) {
	fld.value=bgcolor;
	if ((document.getElementById) && (fld.type!='hidden')) fld.style.backgroundColor=bgcolor;
}

function docheckall(f_lnk, f_val, f_chk, t_false, t_true) {
	var i, c;
	if (f_val.value=='true') {
		f_val.value='false';
		c=false;
		f_lnk.innerText=t_false;
	}
	else {
		f_val.value='true';
		c=true;
		f_lnk.innerText=t_true;
	}
	for (i = 0; i < f_chk.length; i++) {
		f_chk[i].checked = c;
	}
}

/* ----------------------------------------------
    fnCancelDefault
    Cancels the default action in ondragenter and ondragover so that the copy cursor is
    displayed until the selection is dropped.
 ----------------------------------------------*/
function fnCancelDefault() {
	event.returnValue = false;
	event.dataTransfer.dropEffect = "move";
}

/* ----------------------------------------------
    fnSetInfo sets the data format in the first parameter and provides the text to drop in second.
    The second line copies text.
 ----------------------------------------------*/
function fnSetInfo(idx) {
	objSource = event.srcElement;
	idxSource = idx;
	event.dataTransfer.effectAllowed = "move";
}

function fnHideMarker() {
	event.returnValue = false;
	event.dataTransfer.effectAllowed = "move";
	if (objMarker1 != null) {
		objMarker1.style.border='none';
		objMarker2.style.border='none';
	}
}

function fnSetMarker(idx, itemid) {
	event.returnValue = false;
	event.dataTransfer.effectAllowed = "move";
	var i, el;
	// wis eventuele oude markeringen
	if (objMarker1 != null) {
		objMarker1.style.border='none';
		objMarker2.style.border='none';
	};
	// zet nieuwe markeringen
	objMarker1 = getElement('nmr'+itemid+'_'+idx);
	objMarker2 = getElement('inh'+itemid+'_'+idx);
	idxMarker = idx;
	if (idxMarker>idxSource) {
		objMarker1.style.borderBottom='2px solid black';
		objMarker2.style.borderBottom='2px solid black';
	}
	else {
		objMarker1.style.borderTop='2px solid black';
		objMarker2.style.borderTop='2px solid black';
	}
}

/* ----------------------------------------------
   fnGetInfo is called by the target object in the ondrop event.
   It cancels the default action and sets the cursor to the system copy/move icon.  
   Then it specifies the data format to retrieve.
   Last, it sets the value property of oTarget object to the information from getData. 
 ----------------------------------------------*/ 
function fnGetInfo(idx, itemid) {
	objTarget = event.srcElement;
	idxTarget = idx;
	event.returnValue = true;	// voert de move actie zelf niet uit
	event.dataTransfer.dropEffect = "move";
	fnMove(idxSource, idxTarget, itemid);
}

function fnMove(idxSource, idxTarget, itemid) {
	var i, el;
	var coll_wrk = vraagFrm.elements["wrk"+itemid];
	var coll_txt = vraagFrm.elements["txt"+itemid];
	var coll_val = vraagFrm.elements["val"+itemid];
	var clipb = coll_val[idxSource].value;
	if (idxTarget < idxSource) {
		for (i = idxSource; i > idxTarget; i--) {
			coll_val[i].value = coll_val[i-1].value;
			};
		};
	if (idxTarget > idxSource) {
		for (i = idxSource; i < idxTarget; i++) {
			coll_val[i].value = coll_val[i+1].value;
			};
		};
	coll_val[idxTarget].value = clipb;
	for (i = 0; i < coll_wrk.length; i++) {
		coll_wrk[i].value = coll_txt[coll_val[i].value].value;
		if (i==idxTarget) coll_wrk[i].select();
	};
}

function fnSwap(idxSource, richting, itemid) {
	var i;
	var coll_wrk = vraagFrm.elements["wrk"+itemid];
	var coll_txt = vraagFrm.elements["txt"+itemid];
	var coll_val = vraagFrm.elements["val"+itemid];
	var clipb = coll_val[idxSource].value;
	if (richting==0) {	// up (lagere value)
		if (idxSource > 0) {
			coll_val[idxSource].value = coll_val[idxSource-1].value;
			coll_val[idxSource-1].value = clipb;
		}
	}
	else {				// down (hogere value)
		if (idxSource < coll_val.length-1) {
			coll_val[idxSource].value = coll_val[idxSource+1].value;
			coll_val[idxSource+1].value = clipb;
		}
	}
	for (i = 0; i < coll_wrk.length; i++) {
		coll_wrk[i].value = coll_txt[coll_val[i].value].value;
	};
}

// -------------------------------------------------------------------
// moveSelectedOptions(select_object,select_object[,autosort(true/false)[,regex]])
//  This function moves options between select boxes. Works best with
//  multi-select boxes to create the common Windows control effect.
//  Passes all selected values from the first object to the second
//  object and re-sorts each box.
//  If a third argument of 'false' is passed, then the lists are not
//  sorted after the move.
//  If a fourth string argument is passed, this will function as a
//  Regular Expression to match against the TEXT or the options. If 
//  the text of an option matches the pattern, it will NOT be moved.
//  It will be treated as an unmoveable option.
//  You can also put this into the <SELECT> object as follows:
//    onDblClick="moveSelectedOptions(this,this.form.target)
//  This way, when the user double-clicks on a value in one box, it
//  will be transferred to the other (in browsers that support the 
//  onDblClick() event handler).
// -------------------------------------------------------------------
function moveSelectedOptions(from,to) {
	// Unselect matching options, if required
	if (arguments.length>3) {
		var regex = arguments[3];
		if (regex != "") {
			unSelectMatchingOptions(from,regex);
		}
	}
	// Move them over
	for (var i=0; i<from.options.length; i++) {
		var o = from.options[i];
		if (o.selected) {
			to.options[to.options.length] = new Option( o.text, o.value, false, false);
		}
	}
	// Delete them from original
	for (var i=(from.options.length-1); i>=0; i--) {
		var o = from.options[i];
		if (o.selected) {
			from.options[i] = null;
		}
	}
	if ((arguments.length<3) || (arguments[2]==true)) {
		sortSelect(from);
		sortSelect(to);
	}
	from.selectedIndex = -1;
	to.selectedIndex = -1;
}

// -------------------------------------------------------------------
// moveAllOptions(select_object,select_object[,autosort(true/false)[,regex]])
//  Move all options from one select box to another.
// -------------------------------------------------------------------
function moveAllOptions(from,to) {
	selectAllOptions(from);
	if (arguments.length==2) {
		moveSelectedOptions(from,to);
	}
	else if (arguments.length==3) {
		moveSelectedOptions(from,to,arguments[2]);
	}
	else if (arguments.length==4) {
		moveSelectedOptions(from,to,arguments[2],arguments[3]);
	}
}

// -------------------------------------------------------------------
// selectAllOptions(select_object)
//  This function takes a select box and selects all options (in a 
//  multiple select object). This is used when passing values between
//  two select boxes. Select all options in the right box before 
//  submitting the form so the values will be sent to the server.
// -------------------------------------------------------------------
function selectAllOptions(obj) {
	for (var i=0; i<obj.options.length; i++) {
		obj.options[i].selected = true;
		}
	}
	
// -------------------------------------------------------------------
// swapOptions(select_object,option1,option2)
//  Swap positions of two options in a select list
// -------------------------------------------------------------------
function swapOptions(obj,i,j) {
	var o = obj.options;
	var i_selected = o[i].selected;
	var j_selected = o[j].selected;
	var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
	var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);
	o[i] = temp2;
	o[j] = temp;
	o[i].selected = j_selected;
	o[j].selected = i_selected;
}
	
// -------------------------------------------------------------------
// moveOptionUp(select_object)
//  Move selected option in a select list up one
// -------------------------------------------------------------------
function moveOptionUp(obj) {
	// If > 1 option selected, do nothing
	var selectedCount=0;
	for (i=0; i<obj.options.length; i++) {
		if (obj.options[i].selected) {
			selectedCount++;
		}
	}
	if (selectedCount != 1) {
		return;
	}
	// If this is the first item in the list, do nothing
	var i = obj.selectedIndex;
	if (i == 0) {
		return;
	}
	swapOptions(obj,i,i-1);
	obj.options[i-1].selected = true;
}

// -------------------------------------------------------------------
// moveOptionDown(select_object)
//  Move selected option in a select list down one
// -------------------------------------------------------------------
function moveOptionDown(obj) {
	// If > 1 option selected, do nothing
	var selectedCount=0;
	for (i=0; i<obj.options.length; i++) {
		if (obj.options[i].selected) {
			selectedCount++;
		}
	}
	if (selectedCount != 1) {
		return;
	}
	// If this is the last item in the list, do nothing
	var i = obj.selectedIndex;
	if (i == (obj.options.length-1)) {
		return;
	}
	swapOptions(obj,i,i+1);
	obj.options[i+1].selected = true;
}

// -------------------------------------------------------------------
// enforcechar(what,e,limit)
//  Beperk de invoer (karakters) van een veld (memo, text)
//  e = event
// -------------------------------------------------------------------
function enforcechar(what,e,limit) {
	var key, keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	var w = what.value + keychar;
	if (w.length >= limit) return false;
}

// -------------------------------------------------------------------
// enforcewords(what,e,limit)
//  Beperk de invoer (woorden) van een veld (memo, text)
//  e = event
// -------------------------------------------------------------------
function enforcewords(what,e,limit) {
	var re = /\b\w+\b/gm;
	var arr;
	var i=0;
	var key, keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	var w = what.value + keychar;
	while (arr=re.exec(w)) i+=1;
	if (i > limit) {
		//what.value = w.substr(0,w.length-2);
		return false;
	}
}

// -------------------------------------------------------------------
// enforcedecimals(what,e,limit)
//  Beperk de invoer (decimalen) van een veld (memo, text)
//  e = event
// -------------------------------------------------------------------
function enforcedecimals(what,e,limit) {
	var w, pos, key, keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	if ((what.value.length==0) && (limit>0) && ((keychar=='.') || (keychar==','))) what.value = '0' + keychar;
	if ((what.value.length==0) && (keychar=='-'))
		w = keychar + '0';
	else
		w = what.value + keychar;
	if (isNaN(w.replace(/\,/g,'.'))) {
		return false;
	} else {
		pos = Math.max(w.indexOf('.'), w.indexOf(','));
		if (limit < 1) {
			if (pos > -1) {
				return false;
			}
		} else {
			if (pos > -1) {
				if (w.substring(pos+1, w.length).length > limit) {
					return false;
				}
			}
		}
	}
}

function getSel(fld) {
	var sel = '';
	if (window.getSelection || document.getSelection) {
		sel = fld.value.substring(fld.selectionStart, fld.selectionEnd);
	}
	else {
		if (document.selection) {
			if (fld==document.selection.createRange().parentElement()) {
				sel = document.selection.createRange().text;
			}
		}
	}
	return sel;
}

function AddStyleIcon(fldname,iconCode) {
	var fld=getElement(fldname);
	var sel = '', selbefore = '', selafter = '';
	if (window.getSelection || document.getSelection) {
		sel = fld.value.substring(fld.selectionStart, fld.selectionEnd);
		if (sel.length>0) {
			selbefore = fld.value.substring(0, fld.selectionStart);
			selafter = fld.value.substring(fld.selectionEnd);
			fld.value = selbefore + '[' + iconCode + ']' + sel + '[/' + iconCode + ']' + selafter;
		}
		else {
			alert('Maak eerst een tekst-selectie\nin het bericht');
		}
	}
	else {
		if (document.selection) {
			if (fld==document.selection.createRange().parentElement()) {
				document.selection.createRange().text = '[' + iconCode + ']' + document.selection.createRange().text + '[/' + iconCode + ']';
			}
			else {
				alert('Maak eerst een tekst-selectie\nin het bericht');
			}
		}
	}
}

function AddSmileyIcon(fldname,iconCode) {
	var fld=getElement(fldname);
	var sel = '', selbefore = '', selafter = '';
	if (window.getSelection || document.getSelection) {
		sel = fld.value.substring(fld.selectionStart, fld.selectionEnd);
		if (sel.length>0) {
			selbefore = fld.value.substring(0, fld.selectionStart);
			selafter = fld.value.substring(fld.selectionEnd);
			fld.value = selbefore + sel + iconCode + selafter;
		}
		else {
			fld.value = fld.value + iconCode;
		}
	}
	else {
		if (document.selection) {
			if (fld==document.selection.createRange().parentElement()) {
				document.selection.createRange().text = document.selection.createRange().text + iconCode;
			}
			else {
				fld.value = fld.value + iconCode;
			}
		}
	}
}

function filterHtml(fldname) {
	var fld=getElement(fldname);
	var txt=fld.value;
	var re=/(<[^>]*>)/g;		// alle html-tags
	txt=txt.replace(re,'');
	var re=/[<]/g;				// losse <
	txt=txt.replace(re,'&lt;');
	var re=/[>]/g;				// losse >
	txt=txt.replace(re,'&gt;');
	fld.value=txt;
}

// -------------------------------------------------------------------
// Functies tbv TELERIK RadControls
// -------------------------------------------------------------------
function OnClientRated(sender, eventArgs) {
    var id = sender.get_id();
    var v = sender.get_value();
    var targetCtrl = getElement(id.replace("_Rating_", ""));
    targetCtrl.value = v;
}

function OnClientSlided(sender, eventArgs) {
    var id = sender.get_id();
    var v = sender.get_value();
    var targetCtrl = getElement(id.replace("_Slider_", ""));
    targetCtrl.value = v;
}

function OnDateSelected(sender, eventArgs) {
    var id = sender.get_id();
    var v = sender.get_selectedDate().toDateString();
    var targetCtrl = getElement(id.replace("_DatePicker_", ""));
    targetCtrl.value = v;
}

function OnTimeSelected(sender, eventArgs) {
    var id = sender.get_id();
    var v = sender.get_selectedDate().toLocaleTimeString();
    var targetCtrl = getElement(id.replace("_TimePicker_", ""));
    targetCtrl.value = v;
}

function OnColorChanged(sender, eventArgs) {
    var id = sender.get_id();
    var v = sender.get_selectedColor();
    var targetCtrl = getElement(id.replace("_ColorPicker_", ""));
    targetCtrl.value = v ? v : "";
}

function OnListBoxReordered(sender, eventArgs) {
    var id = sender.get_id();
    var v = "";
    var items = sender.get_items();
    items.forEach(function(item) { if (v != "") v += "|"; v += item.get_value(); });
    var targetCtrl = getElement(id.replace("_ListBox_", ""));
    targetCtrl.value = v;
}

function OnListBoxTransfered(sender, eventArgs) {
    var id = sender.get_id();
    var v = "";
    var sourceCtrl = $find(id.replace("_SourceBox", "_ListBox"));
    var items = sourceCtrl.get_items();
    items.forEach(function(item) { if (v != "") v += "|"; v += item.get_value(); });
    var targetCtrl = getElement(id.replace("_SourceBox_", ""));
    targetCtrl.value = v;
}

