
function xmAddMultivalueItem(colName) {
	var selector = document.getElementById(colName);
	if(!selector) return; // selector not found
	var selection = selector.options[selector.selectedIndex];
	if(selection.value == 0) return; // item not selected
	var valueField = document.getElementById(colName + '_values');
	var rx = new RegExp('\\b' + selection.value + '\\b');
	if(rx.test(valueField.value)) return; // avoid duplicates
	var valueArray = valueField.value ? valueField.value.split(',') : [];
	valueArray.push(selection.value);
	var valueName = selection.text;
	var delCheck = null;
	var delCheckId = colName + '_' + (valueArray.length - 1) + '_del';
	if(document.all) {
		delCheck = document.createElement('<input type="checkbox" id="' + delCheckId + '">');
	} else {
		delCheck = document.createElement('input');
		delCheck.type = 'checkbox';
		delCheck.id = delCheckId;
	}
	var nameSpan = document.createElement('span');
	nameSpan.appendChild(document.createTextNode(' ' + valueName));
	var table = document.getElementById(colName + '_vtbl');
	var row = table.insertRow(-1);
	var cell = row.insertCell(-1);
	cell.appendChild(delCheck);
	cell.appendChild(nameSpan);
	valueField.value = valueArray.join(',');
}

function xmAddMultivalueItemDatetime(colName) {
	var selectorYear = document.getElementById(colName + '_year');
	var selectorMonth = document.getElementById(colName + '_month');
	var selectorDay = document.getElementById(colName + '_day');
	var selectorHour = document.getElementById(colName + '_hour');
	var selectorMin = document.getElementById(colName + '_minute');
	var withTime = (selectorHour && selectorMin);

	var valueField = document.getElementById(colName + '_field');
	var pattern = withTime ? /^(\d{4}-\d{2}-\d{2}(?:T|\s)\d{2}:\d{2})/ : /^(\d{4}-\d{2}-\d{2})/;
	
	if (valueField.value.match(pattern)) {
		var datetimeValue = RegExp.$1;
		var rx = new RegExp('\\b' + datetimeValue + '\\b');
	
		var valueField = document.getElementById(colName + '_values');
		if(rx.test(valueField.value)) return; // avoid duplicates
		var valueArray = valueField.value ? valueField.value.split(',') : [];
	
		valueArray.push(datetimeValue);
		
		var delCheck = null;
		var delCheckId = colName + '_' + (valueArray.length - 1) + '_del';
		if(document.all) {
			delCheck = document.createElement('<input type="checkbox" id="' + delCheckId + '">');
		} else {
			delCheck = document.createElement('input');
			delCheck.type = 'checkbox';
			delCheck.id = delCheckId;
		}
		var nameSpan = document.createElement('span');
		nameSpan.appendChild(document.createTextNode(' ' + datetimeValue));
		var table = document.getElementById(colName + '_vtbl');
		var row = table.insertRow(-1);
		var cell = row.insertCell(-1);
		cell.appendChild(delCheck);
		cell.appendChild(nameSpan);
		valueField.value = valueArray.join(',');
		selectorYear.value = selectorMonth.value = selectorDay.value = null;
		if (withTime) {
			selectorHour.value = selectorMin.value = null;
		}
	}
}

function xmDelMultivalueItems(colName) {
	var elements = document.getElementsByTagName('input');
	var selected = [];
	for(var i = 0; i < elements.length; i++) {
		if(!(elements[i].type === 'checkbox' && elements[i].checked)) continue;
		if(!elements[i].id.match(/^(.*?)_(\d+)_del$/)) continue;
		if(RegExp.$1 != colName) continue;
		selected.push(RegExp.$2);
	}
	if(!selected.length) return; // nothing to do
	if(!confirm('Poistetaanko ' + (selected.length > 1 ? selected.length + ' valintaa' : 'valinta') + '?')) return;
	var valueField = document.getElementById(colName + '_values');
	var valueArray = valueField.value.split(',');
	var table = document.getElementById(colName + '_vtbl');
	var valueIndex;
	for(i = 0; i < selected.length; i++) {
		valueIndex = valueArray.length > 1 ? selected[i] - i : 0;
		table.deleteRow(valueIndex);
		valueArray.splice(valueIndex, 1);
	}
	valueField.value = valueArray.length ? valueArray.join(',') : null;
}

function xmSelectAllMultivalueItems(colName) {
	var elements = document.getElementsByTagName('input');
	for(var i = 0; i < elements.length; i++) {
		if(!(elements[i].type === 'checkbox')) continue;
		if(!elements[i].id.match(/^(.*?)_(\d+)_del$/)) continue;
		if(RegExp.$1 != colName) continue;
		elements[i].checked = elements[i].checked ? false : 'checked';
	}
}
