--- /dev/null
+/* Validate distances. */
+function validate() {
+ var valid = true;
+ for (input of document.getElementsByTagName('input')) {
+ var m = input.name.match(/^from\d+to\d+$/);
+ if (! m) continue;
+ input.setCustomValidity("");
+ var text = input.value;
+ if (! text) input.setCustomValidity("Missing");
+ else if (! text.match(input.pattern)) valid = false;
+ }
+ var submits = document.getElementsByName('edit_raikogram');
+ if (submits.length) submits[0].disabled = ! valid;
+}
+
+/* Distance updated. */
+function changed_distance(event) {
+ var input = event.target;
+ var m = input.name.match(/^from(\d+)to(\d+)$/);
+ if (! m) return;
+ var from = m[1];
+ var to = m[2];
+ var others = document.getElementsByName('from' + to + 'to' + from);
+ var text = input.value;
+ if (others.length) others[0].value = input.value;
+ validate();
+}
+
+/* Document onload. */
+function loaded() {
+ for (input of document.getElementsByTagName('input')) {
+ var m = input.name.match(/^from\d+to\d+$/);
+ if (! m) continue;
+ input.autocomplete = 'off';
+ input.type = 'text';
+ input.pattern = '^(?:[0-9]*\.)?[0-9]+$';
+ input.addEventListener('change', changed_distance, true);
+ }
+ validate();
+}
+
+document.onload = loaded();