Elements with siblings got their own error container each for validation messages

This is to prevent a bug causing both elements (e.g. hour and minute) exiting the error state, even though only one of them passed validation.
Cleaned up client-side validation code a bit and added more custom validation errors.