diff --git a/lam/lib/modules.inc b/lam/lib/modules.inc
index 19fc651d..95667d55 100644
--- a/lam/lib/modules.inc
+++ b/lam/lib/modules.inc
@@ -527,6 +527,140 @@ function getRequiredExtensions() {
/**
* Takes a list of meta-HTML elements and prints the equivalent HTML output.
+*
+* The modules are not allowed to display HTML code directly but return
+* meta HTML code. This allows to have a common design for all module pages.
+*
+* Meta HTML code is always returned as a three dimensional array[a][b][c]
+* where a is the row number, b is the column number and c is
+* is a data element.
+*
+* Format of data elements:
+*
+* A data element is an array which contains the data to display.
+* All data elements must contail a value "kind" which
+* defines what kind of element should be displayed.
+*
+* These are the possibilies for kind and what other options have to be added to the array:
+*
+*
+*
fieldset: Inserts a fieldset.
+*
+*
legend: The legend of the fieldset.
+*
value: A data element. Can be used recursively.
+*
+*
+*
help: Adds a help link.
+*
+*
value: The help number for the help entry.
+*
scope: The account type for the help entry.
+*
+*
+*
+*
input: Adds a HTML input element.
+*
+*
name: The name of the element, will be used later as variable name
+* when user input is returned.
checked: Boolean value, if true a checkbox will be checked. This
+* value is only needed or checkboxes.
+*
disabled: Boolean value, if true the element will be disabled.
+*
size: The length of the input element, only used for text, password and file.
+*
maxlength: The maximum size of the input element, only used for
+* text, password and file.
+*
value: The element will have this value as default. Button elements will have
+* this as caption.
+*
+*
+*
select: This will add a select field.
+*
+*
name: The name of the element, will be used later as variable name when user input is
+* returned.
+*
multiple: Boolean value, if set to true the user can select more than one entry.
+*
options: Array of string. This is the list of option values the user can select.
+*
options_selected: Array of string. This is the list of pre selected elements, must contain
+* values that are also in options.
+*
descriptiveOptions:
+* Boolean value, if set to true then all elements in options must be arrays themselves (array(value,
+*description)) (default: false)
+*
+*
size: The size of the select field, if set to 1 a dropdown box will be displayed.
+*
noSorting: If set to true then the entries will not be sorted. Default is false.
+*
onchange: onchange event
+*
+*
+*
+*
table: Adds a table. Can be used recursively.
+*
+*
value: A data element. Can be used recursively.
+*
+*
+*
text: Inserts a text element.
+*
+*
text: The text to display.
+*
+*
+*
textarea: Adds a multiline text field.
+*
+*
name: The name of the element, will be used later as variable name when user
+* input is returned.
+*
rows: Number of rows (required)
+*
+*
cols: Number of characters for each line (required)
+*
+*
readonly: Boolean value, if true the text field will be read only.
+*
+*
+*
+*
image: Displays an image.
+*
+*
path: Path to the image
+*
width: Width of the image
+*
height: Height of the image
+*
alt: Alt text of the image
+*
+*
+*
+*
+*
+* Beneath those values a "td" value may be added. This has to be an array with one or more
+* of these options:
+*
+*
+*
colspan: Like the HTML colspan attribute for td elements
+*
rowspan: Like the HTML rowspan attribute for td elements
+*
align: left/center/right/justify Like the HTML align attribute
+*
valign: top/middle/bottom Like the HTML valign attribute
+*
width: Like the HTML height attribute for td elements
+*
+*
+* Input buttons which should load a different subpage of a module must have a special name attribute:
+*
+* name => 'form_subpage_' . . '_' . . '_' .
+*
+*
: name of this account module (e.g. 'posixAccount')
+*
: name of next subpage (e.g. 'attributes')
+*
a name to distinguish buttons (e.g. 'ok'/'cancel'/'back')