function ibsnCheck() {
	val = document.getElementById('input_ibsn').value;

	error = 0;
	warning = 0;

	// check 1: 10 digits
	v = val.replace(/[^0-9]/g,'').length;
	if (v > 10) { error |= 1; }
	if (v < 10) { warning |= 1; }

	// check 2: only digits and "-"
	if (val.replace(/[0-9\-]/g,'').length != 0) { error |= 2; }

	// check 3: exactly three "-"
	v = val.replace(/[^\-]/g,'').length;
	if (v > 3) { error |= 4; }
	if (v < 3) { warning |= 4; }

	// check 4: can't begin or end on "-"
	if (val.search(/^-/) != -1) { error |= 8; }
	if (val.search(/-$/) != -1) {
		// exception: allow partially entered to be just a warning
		if (warning & 1) { warning |= 8; }
		else { error |= 8; }
	}

	// check 5: can't have "--" nor "---"
	if (val.search(/--/) != -1) { error |= 16; }

	border = document.getElementById('input_border');

	if (error != 0) {
		border.style.border = 'thick solid red';
	} else if (warning != 0) {
		border.style.border = 'thick solid yellow';
	} else {
		border.style.border = 'thick solid green';
	}
	
	document.getElementById('msg_valid').style.display = ((error == 0) && (warning == 0)) ? 'list-item' : 'none';

	document.getElementById('msg_error_1').style.display = (error & 1) ? 'list-item' : 'none';
	document.getElementById('msg_error_2').style.display = (error & 2) ? 'list-item' : 'none';
	document.getElementById('msg_error_3').style.display = (error & 4) ? 'list-item' : 'none';
	document.getElementById('msg_error_4').style.display = (error & 8) ? 'list-item' : 'none';
	document.getElementById('msg_error_5').style.display = (error & 16) ? 'list-item' : 'none';

	document.getElementById('msg_warning_1').style.display = (warning & 1) ? 'list-item' : 'none';
	document.getElementById('msg_warning_3').style.display = (warning & 4) ? 'list-item' : 'none';
	// actually... let's just ignore warning_4 for better user experience
	//document.getElementById('msg_warning_4').style.display = (warning & 8) ? 'block' : 'none';
}

