+
+  ns.detect_duplicate_ids_in_dom = function() {
+    var ids   = {},
+        found = false;
+
+    $('[id]').each(function() {
+      if (this.id && ids[this.id]) {
+        found = true;
+        console.warn('Duplicate ID #' + this.id);
+      }
+      ids[this.id] = 1;
+    });
+
+    if (!found)
+      console.log('No duplicate IDs found :)');
+  };
+
+  ns.validate_form = function(selector) {
+    if (!kivi.Validator) {
+      console.log('kivi.Validator is not loaded');
+    } else {
+      return kivi.Validator.validate_all(selector);
+    }
+  };
+
+  // Verifies that at least one checkbox matching the
+  // "checkbox_selector" is actually checked. If not, an error message
+  // is shown, and false is returned. Otherwise (at least one of them
+  // is checked) nothing is shown and true returned.
+  //
+  // Can be used in checks when clicking buttons.
+  ns.check_if_entries_selected = function(checkbox_selector) {
+    if ($(checkbox_selector + ':checked').length > 0)
+      return true;
+
+    alert(kivi.t8('No entries have been selected.'));
+
+    return false;
+  };
+
+  ns.switch_areainput_to_textarea = function(id) {
+    var $input = $('#' + id);
+    if (!$input.length)
+      return;
+
+    var $area = $('<textarea></textarea>');
+
+    $area.prop('rows', 3);
+    $area.prop('cols', $input.prop('size') || 40);
+    $area.prop('name', $input.prop('name'));
+    $area.prop('id',   $input.prop('id'));
+    $area.val($input.val());
+
+    $input.parent().replaceWith($area);
+    $area.focus();
+  };