From a915547f8af4bb39e9633a8c5e7e6156888a3088 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 16 Nov 2015 09:54:05 +0100
Subject: [PATCH] OO-1770, OO-1769: allow pseudonym and guest posts, refactor
 the message model to hold only threads or messages of a unique thread in
 memory, minimize the number of joins on query, minimize the number of queries
 on peekview, remove buggy docking feature...

---
 .../collaboration/CollaborationTools.java     |   10 +-
 .../CollaborationToolsSettingsController.java |    2 -
 .../commons/services/image/ImageUtils.java    |   48 +-
 .../services/mark/impl/MarkManagerImpl.java   |   16 +-
 .../notifications/NotificationsManager.java   |    2 +-
 .../flexible/elements/FlexiTableElement.java  |    5 +
 .../table/FlexiTableClassicRenderer.java      |   10 +-
 .../elements/table/FlexiTableElementImpl.java |    9 +
 .../table/FlexiTableRowCssDelegate.java}      |   29 +-
 .../SortableFlexiTableModelDelegate.java      |   22 +
 .../generic/docking/DockController.java       |  217 --
 .../control/generic/docking/DockModule.java   |   47 -
 .../generic/docking/_content/docked.html      |   19 -
 .../docking/_i18n/LocalStrings_ar.properties  |    2 -
 .../docking/_i18n/LocalStrings_bg.properties  |    2 -
 .../docking/_i18n/LocalStrings_cs.properties  |    2 -
 .../docking/_i18n/LocalStrings_da.properties  |    2 -
 .../docking/_i18n/LocalStrings_de.properties  |    2 -
 .../docking/_i18n/LocalStrings_el.properties  |    2 -
 .../docking/_i18n/LocalStrings_en.properties  |    2 -
 .../docking/_i18n/LocalStrings_es.properties  |    2 -
 .../docking/_i18n/LocalStrings_fa.properties  |    2 -
 .../docking/_i18n/LocalStrings_fr.properties  |    2 -
 .../docking/_i18n/LocalStrings_it.properties  |    2 -
 .../docking/_i18n/LocalStrings_jp.properties  |    2 -
 .../docking/_i18n/LocalStrings_lt.properties  |    2 -
 .../_i18n/LocalStrings_nl_NL.properties       |    2 -
 .../docking/_i18n/LocalStrings_pl.properties  |    2 -
 .../_i18n/LocalStrings_pt_BR.properties       |    2 -
 .../_i18n/LocalStrings_pt_PT.properties       |    2 -
 .../docking/_i18n/LocalStrings_ru.properties  |    2 -
 .../docking/_i18n/LocalStrings_sq.properties  |    2 -
 .../_i18n/LocalStrings_zh_CN.properties       |    2 -
 .../_i18n/LocalStrings_zh_TW.properties       |    2 -
 .../java/org/olat/core/util/FileUtils.java    |    2 +-
 .../util/openxml/HTMLToOpenXMLHandler.java    |   55 +-
 .../core/util/openxml/OpenXMLDocument.java    |  131 +-
 .../core/util/openxml/_resources/styles.xml   |   74 +-
 .../olat/course/nodes/DialogCourseNode.java   |   12 +-
 .../org/olat/course/nodes/FOCourseNode.java   |  155 +-
 .../DialogCourseNodeEditController.java       |    2 +-
 .../nodes/dialog/DialogNodeForumCallback.java |   12 +
 .../nodes/fo/FOCourseNodeEditController.java  |   46 +-
 .../nodes/fo/FOCourseNodeRunController.java   |   74 +-
 .../course/nodes/fo/FOPeekviewController.java |   49 +-
 .../course/nodes/fo/FOPreviewController.java  |    2 +
 .../course/nodes/fo/SettingsController.java   |  112 +
 .../course/nodes/fo/_content/peekview.html    |   13 +-
 .../nodes/fo/_i18n/LocalStrings_de.properties |    8 +-
 .../nodes/fo/_i18n/LocalStrings_en.properties |    8 +-
 .../olat/modules/_spring/modulesContext.xml   |   22 +
 .../dialog/DialogElementsController.java      |    4 +-
 .../olat/modules/fo/DemoForumCallback.java    |   70 -
 .../modules/fo/FilterForUserController.java   |  777 -------
 .../org/olat/modules/fo/ForumCallback.java    |   19 +-
 .../olat/modules/fo/ForumChangedEvent.java    |   27 +-
 .../org/olat/modules/fo/ForumController.java  | 1797 -----------------
 .../java/org/olat/modules/fo/ForumHelper.java |  124 +-
 .../org/olat/modules/fo/ForumImpl.hbm.xml     |   18 -
 .../java/org/olat/modules/fo/ForumImpl.java   |   54 -
 .../olat/modules/fo/ForumLoggingAction.java   |    2 +-
 .../org/olat/modules/fo/ForumManager.java     |  728 -------
 .../fo/ForumMessagesTableDataModel.java       |   78 -
 .../java/org/olat/modules/fo/ForumModule.java |   97 +
 .../modules/fo/ForumNotificationsHandler.java |    1 +
 .../fo/ForumThreadViewModeController.java     |  151 --
 .../org/olat/modules/fo/ForumUIFactory.java   |    1 +
 .../java/org/olat/modules/fo/Message.java     |   61 +-
 .../org/olat/modules/fo/MessageImpl.hbm.xml   |   49 -
 .../java/org/olat/modules/fo/MessageImpl.java |  205 --
 .../org/olat/modules/fo/MessageLight.java     |   57 +
 .../java/org/olat/modules/fo/MessageRef.java  |   34 +
 .../olat/modules/fo/QuoteAndTagFilter.java    |   11 +-
 .../org/olat/modules/fo/ReadMessage.hbm.xml   |   26 -
 .../java/org/olat/modules/fo/ReadMessage.java |   46 -
 .../org/olat/modules/fo/ReadMessageImpl.java  |   66 -
 .../modules/fo/ThreadColumnDescriptor.java    |  387 ----
 .../fo/_content/attachments-editview.html     |   14 -
 .../modules/fo/_content/filter_for_user.html  |    8 -
 .../olat/modules/fo/_content/filter_view.html |    4 -
 .../olat/modules/fo/_content/msg-preview.html |   21 -
 .../olat/modules/fo/_content/threadview.html  |  179 --
 .../fo/_i18n/LocalStrings_de.properties       |   15 +
 .../fo/_i18n/LocalStrings_en.properties       |   14 +-
 .../fo/_i18n/LocalStrings_fr.properties       |    2 +
 .../fo/archiver/ForumArchiveManager.java      |    4 +-
 .../fo/{ => archiver}/MessageNode.java        |   86 +-
 .../formatters/ForumDownloadResource.java     |  177 ++
 .../archiver/formatters/ForumFormatter.java   |   14 +-
 .../formatters/ForumOpenXMLFormatter.java     |  214 ++
 .../formatters/ForumRTFFormatter.java         |   32 +-
 .../formatters/ForumStreamedRTFFormatter.java |   44 +-
 .../olat/modules/fo/manager/ForumManager.java |  974 +++++++++
 .../org/olat/modules/fo/model/ForumImpl.java  |  126 ++
 .../olat/modules/fo/model/ForumThread.java    |  111 +
 .../org/olat/modules/fo/model/ForumUser.java  |   84 +
 .../modules/fo/model/ForumUserStatistics.java |  106 +
 .../olat/modules/fo/model/MessageImpl.java    |  311 +++
 .../modules/fo/model/MessageLightImpl.java    |  184 ++
 .../modules/fo/model/MessagePeekviewImpl.java |  121 ++
 .../olat/modules/fo/model/MessageRefImpl.java |   77 +
 .../modules/fo/model/MessageStatistics.java   |  152 ++
 .../modules/fo/model/ReadMessageImpl.java     |  143 ++
 .../fo/portfolio/ForumArtefactHandler.java    |    2 +-
 .../fo/restapi/ForumCourseNodeWebService.java |   11 +-
 .../fo/restapi/ForumImportWebService.java     |    2 +-
 .../modules/fo/restapi/ForumWebService.java   |   11 +-
 .../fo/restapi/MyForumsWebService.java        |    4 +-
 .../modules/fo/ui/ForumAdminController.java   |  126 ++
 .../olat/modules/fo/ui/ForumController.java   |  369 ++++
 .../modules/fo/ui/ForumMessageDataModel.java  |  112 +
 .../fo/ui/ForumMessageListController.java     |  232 +++
 .../modules/fo/ui/ForumUserDataModel.java     |  116 ++
 .../fo/ui/ForumUserListController.java        |  177 ++
 .../modules/fo/ui/IndentCellRenderer.java     |   59 +
 .../fo/{ => ui}/MessageEditController.java    |  369 ++--
 .../olat/modules/fo/ui/MessageLightView.java  |  123 ++
 .../modules/fo/ui/MessageListController.java  | 1173 +++++++++++
 .../olat/modules/fo/ui/MessagePeekview.java   |   40 +
 .../org/olat/modules/fo/ui/MessageView.java   |  221 ++
 .../modules/fo/ui/StatusTypeCellRenderer.java |   63 +
 .../modules/fo/ui/StickyCellRenderer.java     |   61 +
 .../modules/fo/ui/ThreadListController.java   |  260 +++
 .../modules/fo/ui/ThreadListDataModel.java    |  155 ++
 .../fo/ui/_content/attachments-editview.html  |   14 +
 .../olat/modules/fo/ui/_content/forum.html    |    4 +
 .../modules/fo/ui/_content/msg-preview.html   |   17 +
 .../_content/threads.html}                    |   17 +-
 .../modules/fo/ui/_content/threadview.html    |  198 ++
 .../modules/fo/ui/_content/user_list.html     |    4 +
 .../fo/ui/events/SelectMessageEvent.java      |   58 +
 .../modules/fo/ui/events/SelectUserEvent.java |   69 +
 .../events/SelectUserListEvent.java}          |   30 +-
 .../olat/modules/wiki/WikiForumCallback.java  |    5 +
 .../olat/modules/wiki/WikiMainController.java |    4 +-
 ...PageChangeOrCreateNotificationHandler.java |    2 +-
 .../java/org/olat/portfolio/EPUIFactory.java  |   13 +-
 .../portfolio/manager/EPArtefactManager.java  |   28 +
 .../portfolio/manager/EPFrontendManager.java  |    4 +
 .../ArtefactWizzardStepsController.java       |   49 +-
 .../search/service/indexer/ForumIndexer.java  |    2 +-
 .../indexer/group/GroupForumIndexer.java      |    2 +-
 .../course/DialogCourseNodeIndexer.java       |    2 +-
 .../course/FOCourseNodeIndexer.java           |    2 +-
 .../java/org/olat/user/UserPropertiesRow.java |   20 +-
 .../_spring/userPropertiesContext.xml         |   20 +
 .../logging/activity/LoggingResourceable.java |   11 +-
 src/main/resources/META-INF/persistence.xml   |   10 +-
 .../database/mysql/alter_10_3_4_to_10_4_0.sql |    6 +
 .../database/mysql/setupDatabase.sql          |    7 +-
 .../oracle/alter_10_3_4_to_10_4_0.sql         |    6 +
 .../database/oracle/setupDatabase.sql         |    4 +-
 .../postgresql/alter_10_3_4_to_10_4_0.sql     |    7 +
 .../database/postgresql/setupDatabase.sql     |    4 +-
 .../static/themes/light/modules/_forum.scss   |    4 +
 .../static/themes/light/modules/_icons.scss   |    6 +
 src/main/webapp/static/themes/light/theme.css |    2 +-
 .../webapp/static/themes/light/theme.css.map  |    2 +-
 .../themes/light/theme_ie_completions.css     |    2 +-
 .../org/olat/modules/fo/ForumManagerTest.java |  296 +--
 src/test/java/org/olat/restapi/ForumTest.java |   22 +-
 .../java/org/olat/restapi/GroupMgmtTest.java  |   22 +-
 .../org/olat/restapi/NotificationsTest.java   |    6 +-
 .../java/org/olat/restapi/UserMgmtTest.java   |   10 +-
 164 files changed, 8187 insertions(+), 5852 deletions(-)
 rename src/main/java/org/olat/core/gui/{control/generic/docking/DockLayoutControllerCreatorCallback.java => components/form/flexible/impl/elements/table/FlexiTableRowCssDelegate.java} (52%)
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/DockController.java
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/DockModule.java
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_content/docked.html
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ar.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_bg.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_cs.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_da.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_de.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_el.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_en.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_es.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fa.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fr.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_it.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_jp.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_lt.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_nl_NL.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pl.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_BR.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_PT.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ru.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_sq.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_CN.properties
 delete mode 100644 src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_TW.properties
 create mode 100644 src/main/java/org/olat/course/nodes/fo/SettingsController.java
 delete mode 100644 src/main/java/org/olat/modules/fo/DemoForumCallback.java
 delete mode 100644 src/main/java/org/olat/modules/fo/FilterForUserController.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumController.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumImpl.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumManager.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumMessagesTableDataModel.java
 create mode 100644 src/main/java/org/olat/modules/fo/ForumModule.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ForumThreadViewModeController.java
 delete mode 100644 src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
 delete mode 100644 src/main/java/org/olat/modules/fo/MessageImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/MessageLight.java
 create mode 100644 src/main/java/org/olat/modules/fo/MessageRef.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
 delete mode 100644 src/main/java/org/olat/modules/fo/ReadMessage.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ReadMessageImpl.java
 delete mode 100644 src/main/java/org/olat/modules/fo/ThreadColumnDescriptor.java
 delete mode 100644 src/main/java/org/olat/modules/fo/_content/attachments-editview.html
 delete mode 100644 src/main/java/org/olat/modules/fo/_content/filter_for_user.html
 delete mode 100644 src/main/java/org/olat/modules/fo/_content/filter_view.html
 delete mode 100644 src/main/java/org/olat/modules/fo/_content/msg-preview.html
 delete mode 100644 src/main/java/org/olat/modules/fo/_content/threadview.html
 rename src/main/java/org/olat/modules/fo/{ => archiver}/MessageNode.java (71%)
 create mode 100644 src/main/java/org/olat/modules/fo/archiver/formatters/ForumDownloadResource.java
 create mode 100644 src/main/java/org/olat/modules/fo/archiver/formatters/ForumOpenXMLFormatter.java
 create mode 100644 src/main/java/org/olat/modules/fo/manager/ForumManager.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/ForumImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/ForumThread.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/ForumUser.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/ForumUserStatistics.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/MessageImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/MessageLightImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/MessagePeekviewImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/MessageRefImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/MessageStatistics.java
 create mode 100644 src/main/java/org/olat/modules/fo/model/ReadMessageImpl.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumAdminController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumMessageDataModel.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumUserDataModel.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ForumUserListController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/IndentCellRenderer.java
 rename src/main/java/org/olat/modules/fo/{ => ui}/MessageEditController.java (57%)
 create mode 100644 src/main/java/org/olat/modules/fo/ui/MessageLightView.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/MessageListController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/MessagePeekview.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/MessageView.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/StatusTypeCellRenderer.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/StickyCellRenderer.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ThreadListController.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/_content/attachments-editview.html
 create mode 100644 src/main/java/org/olat/modules/fo/ui/_content/forum.html
 create mode 100644 src/main/java/org/olat/modules/fo/ui/_content/msg-preview.html
 rename src/main/java/org/olat/modules/fo/{_content/list_titles.html => ui/_content/threads.html} (51%)
 create mode 100644 src/main/java/org/olat/modules/fo/ui/_content/threadview.html
 create mode 100644 src/main/java/org/olat/modules/fo/ui/_content/user_list.html
 create mode 100644 src/main/java/org/olat/modules/fo/ui/events/SelectMessageEvent.java
 create mode 100644 src/main/java/org/olat/modules/fo/ui/events/SelectUserEvent.java
 rename src/main/java/org/olat/modules/fo/{OpenMessageInThreadEvent.java => ui/events/SelectUserListEvent.java} (60%)

diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java
index 0b72306f9f3..14b9d596574 100644
--- a/src/main/java/org/olat/collaboration/CollaborationTools.java
+++ b/src/main/java/org/olat/collaboration/CollaborationTools.java
@@ -65,6 +65,7 @@ import org.olat.core.util.ZipUtil;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.coordinate.SyncerCallback;
 import org.olat.core.util.coordinate.SyncerExecutor;
+import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.mail.ContactMessage;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.Quota;
@@ -83,11 +84,11 @@ import org.olat.instantMessaging.ui.ChatToolController;
 import org.olat.modules.co.ContactFormController;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumCallback;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.ForumUIFactory;
 import org.olat.modules.fo.archiver.ForumArchiveManager;
 import org.olat.modules.fo.archiver.formatters.ForumFormatter;
 import org.olat.modules.fo.archiver.formatters.ForumRTFFormatter;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.openmeetings.OpenMeetingsModule;
 import org.olat.modules.openmeetings.manager.OpenMeetingsException;
 import org.olat.modules.openmeetings.manager.OpenMeetingsManager;
@@ -260,6 +261,11 @@ public class CollaborationTools implements Serializable {
 		titleInfo.setSeparatorEnabled(true);
 		Controller forumController = ForumUIFactory.getTitledForumController(ureq, wControl, forum, new ForumCallback() {
 
+			@Override
+			public boolean mayUsePseudonym() {
+				return false;
+			}
+
 			public boolean mayOpenNewThread() {
 				return true;
 			}
@@ -878,7 +884,7 @@ public class CollaborationTools implements Serializable {
 			VFSContainer archiveContainer = new LocalFolderImpl(new File(archivFilePath));
 			String archiveForumName = "del_forum_" + forumKeyProperty.getLongValue();
 			VFSContainer archiveForumContainer = archiveContainer.createChildContainer(archiveForumName);
-			ForumFormatter ff = new ForumRTFFormatter(archiveForumContainer, false);
+			ForumFormatter ff = new ForumRTFFormatter(archiveForumContainer, false, I18nModule.getDefaultLocale());
 			ForumArchiveManager.getInstance().applyFormatter(ff, forumKeyProperty.getLongValue(), null);
 		}
 	}
diff --git a/src/main/java/org/olat/collaboration/CollaborationToolsSettingsController.java b/src/main/java/org/olat/collaboration/CollaborationToolsSettingsController.java
index 08f16299538..06c177f9956 100644
--- a/src/main/java/org/olat/collaboration/CollaborationToolsSettingsController.java
+++ b/src/main/java/org/olat/collaboration/CollaborationToolsSettingsController.java
@@ -229,7 +229,6 @@ public class CollaborationToolsSettingsController extends BasicController {
 			// update quota form: only show when enabled
 			if (collabTools.isToolEnabled(CollaborationTools.TOOL_FOLDER)) {
 				vc_collabtools.contextPut("folderToolEnabled", Boolean.TRUE);
-				//fxdiff VCRP-8: collaboration tools folder access control
 				if(folderForm != null) {
 					removeAsListenerAndDispose(folderForm);
 				}
@@ -245,7 +244,6 @@ public class CollaborationToolsSettingsController extends BasicController {
 			} else {
 				vc_collabtools.contextPut("folderToolEnabled", Boolean.FALSE);
 			}
-			
 		} else if (source == newsController) {
 			if (event.equals(Event.DONE_EVENT)) {
 				String news = newsController.getNewsValue();
diff --git a/src/main/java/org/olat/core/commons/services/image/ImageUtils.java b/src/main/java/org/olat/core/commons/services/image/ImageUtils.java
index 2fc5055c247..f712d576518 100644
--- a/src/main/java/org/olat/core/commons/services/image/ImageUtils.java
+++ b/src/main/java/org/olat/core/commons/services/image/ImageUtils.java
@@ -68,8 +68,10 @@ public class ImageUtils {
 			try {
 				ImageInputStream stream = new MemoryCacheImageInputStream(in);
 				reader.setInput(stream);
-				int width = reader.getWidth(reader.getMinIndex());
-				int height = reader.getHeight(reader.getMinIndex());
+				
+				int imageIndex = reader.getMinIndex();
+				int width = reader.getWidth(imageIndex);
+				int height = reader.getHeight(imageIndex);
 				result = new Size(width, height, 0, 0, false);
 			} catch (IOException e) {
 				log.error(e.getMessage());
@@ -82,4 +84,46 @@ public class ImageUtils {
 		}
 		return result;
 	}
+	/*
+	public int getPngResolution() throws IOException {
+        ImageInputStream imageInput = ImageIO.createImageInputStream(f);
+        Iterator it = ImageIO.getImageReaders(imageInput);
+        ImageReader reader = (ImageReader) it.next();
+
+        reader.setInput(imageInput);
+        IIOMetadata meta = reader.getImageMetadata(0);
+        org.w3c.dom.Node n = meta.getAsTree("javax_imageio_1.0");
+        n = n.getFirstChild();
+
+        while (n != null) {
+            if (n.getNodeName().equals("Dimension")) {
+                org.w3c.dom.Node n2 = n.getFirstChild();
+
+                while (n2 != null) {
+                    if (n2.getNodeName().equals("HorizontalPixelSize")) {
+                        org.w3c.dom.NamedNodeMap nnm = n2.getAttributes();
+                        org.w3c.dom.Node n3 = nnm.item(0);
+                        float hps = Float.parseFloat(n3.getNodeValue());
+                        xDPI = Math.round(25.4f / hps);
+                    }
+                    if (n2.getNodeName().equals("VerticalPixelSize")) {
+                        org.w3c.dom.NamedNodeMap nnm = n2.getAttributes();
+                        org.w3c.dom.Node n3 = nnm.item(0);
+                        float vps = Float.parseFloat(n3.getNodeValue());
+                        yDPI = Math.round(25.4f / vps);
+                    }
+                    n2 = n2.getNextSibling();
+                }
+            }
+            n = n.getNextSibling();
+        }
+
+        if (xDPI == yDPI) {
+            resolution = xDPI;
+        } else {
+            resolution = 0;
+        }
+        return resolution;
+    }
+	*/
 }
diff --git a/src/main/java/org/olat/core/commons/services/mark/impl/MarkManagerImpl.java b/src/main/java/org/olat/core/commons/services/mark/impl/MarkManagerImpl.java
index 19c12415af4..9c2c34997ef 100644
--- a/src/main/java/org/olat/core/commons/services/mark/impl/MarkManagerImpl.java
+++ b/src/main/java/org/olat/core/commons/services/mark/impl/MarkManagerImpl.java
@@ -58,20 +58,18 @@ public class MarkManagerImpl implements MarkManager {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select mark from ").append(MarkImpl.class.getName()).append(" mark where ")
 			.append("mark.resId=:resId and mark.resName=:resName and mark.creator=:creator");
-		if(!subPath.isEmpty()) {
+		if(subPath != null && !subPath.isEmpty()) {
 			sb.append(" and mark.resSubPath in (:resSubPaths)");
 		}
 		
-		TypedQuery<Mark> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Mark.class);
-		query.setParameter("resName", ores.getResourceableTypeName());
-		query.setParameter("resId", ores.getResourceableId());
-		query.setParameter("creator", identity);
-		if(!subPath.isEmpty()) {
+		TypedQuery<Mark> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Mark.class)
+				.setParameter("resName", ores.getResourceableTypeName())
+				.setParameter("resId", ores.getResourceableId())
+				.setParameter("creator", identity);
+		if(subPath != null && !subPath.isEmpty()) {
 			query.setParameter("resSubPaths", subPath);
 		}
-		
-		List<Mark> results = query.getResultList();
-		return results;
+		return query.getResultList();
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java
index 4c38b37448c..f6e92aa362d 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java
@@ -55,7 +55,7 @@ public abstract class NotificationsManager extends BasicManager {
 	 * 
 	 * @see org.olat.core.commons.services.notifications.NotificationsHandler and the corresponding code
 	 *      in such as
-	 * @see org.olat.modules.fo.ForumController where you add the subscription stuff
+	 * @see org.olat.modules.fo.ui.ForumController where you add the subscription stuff
 	 *      to the constructor and for the action that creates a new entry you have
 	 *      to inform the
 	 * @see org.olat.core.commons.services.notifications.manager.NotificationsManagerImpl#markPublisherNews(SubscriptionContext,
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
index ea6974d4d8d..910a4210ac8 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java
@@ -35,6 +35,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColum
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponentDelegate;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRendererType;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRowCssDelegate;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 
 /**
@@ -126,6 +127,10 @@ public interface FlexiTableElement extends FormItem {
 	 */
 	public void setWrapperSelector(String wrapperSelector);
 	
+	public FlexiTableRowCssDelegate getRowCssDelegate();
+
+	public void setRowCssDelegate(FlexiTableRowCssDelegate rowCssDelegate);
+	
 	/**
 	 * 
 	 * @return
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
index 94014c0c885..e98e0100b14 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java
@@ -141,8 +141,14 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co
 		
 		// use alternating css class
 		int numOfColumns = 0;
-		target.append("<tr id='").append(rowIdPrefix).append(row)
-				  .append("'>");
+		target.append("<tr id='").append(rowIdPrefix).append(row).append("'");
+		if(ftE.getRowCssDelegate() != null) {
+			String cssClass = ftE.getRowCssDelegate().getRowCssClass(row);
+			if(StringHelper.containsNonWhitespace(cssClass)) {
+				target.append(" class='").append(cssClass).append("'");
+			}
+		}
+		target.append(">");
 				
 		if(ftE.isMultiSelect()) {
 			target.append("<td>")
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
index dc8186eac41..9f040928bab 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
@@ -120,6 +120,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	private final WindowControl wControl;
 	
 	private String wrapperSelector;
+	private FlexiTableRowCssDelegate rowCssDelegate;
 
 	private SortKey[] orderBy;
 	private FlexiTableSortOptions sortOptions;
@@ -294,6 +295,14 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 		this.wrapperSelector = wrapperSelector;
 	}
 
+	public FlexiTableRowCssDelegate getRowCssDelegate() {
+		return rowCssDelegate;
+	}
+
+	public void setRowCssDelegate(FlexiTableRowCssDelegate rowCssDelegate) {
+		this.rowCssDelegate = rowCssDelegate;
+	}
+
 	@Override
 	public FlexiTableComponent getComponent() {
 		return component;
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/DockLayoutControllerCreatorCallback.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableRowCssDelegate.java
similarity index 52%
rename from src/main/java/org/olat/core/gui/control/generic/docking/DockLayoutControllerCreatorCallback.java
rename to src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableRowCssDelegate.java
index 9be1dd337f2..1f5e255ecf4 100644
--- a/src/main/java/org/olat/core/gui/control/generic/docking/DockLayoutControllerCreatorCallback.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableRowCssDelegate.java
@@ -17,31 +17,16 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.core.gui.control.generic.docking;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.creator.ControllerCreator;
+package org.olat.core.gui.components.form.flexible.impl.elements.table;
 
 /**
- * Description:<br>
- * This callback provides methods to create the layout controller and a
- * possibility to execute code after the cloning took place and the cloned
- * content opened in a new window.
- * 
- * <P>
- * Initial Date: 24.03.2009 <br>
  * 
- * @author gnaegi
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
  */
-public interface DockLayoutControllerCreatorCallback {
+public interface FlexiTableRowCssDelegate {
 	
-	/**
-	 * This method is called when the content should be docked to create a
-	 * controller creator
-	 * 
-	 * @param ureq
-	 * @param contentControllerCreator
-	 * @return
-	 */
-	public ControllerCreator createLayoutControllerCreator(UserRequest ureq, ControllerCreator contentControllerCreator);
+	public String getRowCssClass(int pos);
+
 }
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/SortableFlexiTableModelDelegate.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/SortableFlexiTableModelDelegate.java
index d71ecedffd5..cb1f1815aab 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/SortableFlexiTableModelDelegate.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/SortableFlexiTableModelDelegate.java
@@ -68,10 +68,18 @@ public class SortableFlexiTableModelDelegate<T> {
 		return columnIndex;
 	}
 	
+	public boolean isAsc() {
+		return asc;
+	}
+	
 	public Collator getCollator() {
 		return collator;
 	}
 	
+	public SortableFlexiTableDataModel<T> getTableModel() {
+		return tableModel;
+	}
+	
 	public List<T> sort() {
 		int rowCount = tableModel.getRowCount();
 		List<T> rows = new ArrayList<>(rowCount);
@@ -149,6 +157,20 @@ public class SortableFlexiTableModelDelegate<T> {
 		return ba? (bb? 0: -1):(bb? 1: 0);
 	}
 	
+	public class ReverseComparator implements Comparator<T> {
+		
+		private final Comparator<T> delegate;
+		
+		public ReverseComparator(Comparator<T> delegate) {
+			this.delegate = delegate;
+		}
+
+		@Override
+		public int compare(T o1, T o2) {
+			return -1 * delegate.compare(o1, o2);
+		}
+	}
+	
 	public class DefaultComparator implements Comparator<T> {
 
 		@Override
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/DockController.java b/src/main/java/org/olat/core/gui/control/generic/docking/DockController.java
deleted file mode 100644
index bd293563e24..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/DockController.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.  
-* <p>
-*/ 
-
-package org.olat.core.gui.control.generic.docking;
-
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.panel.StackedPanel;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowBackOffice;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.creator.ControllerCreator;
-import org.olat.core.gui.control.info.WindowControlInfo;
-import org.olat.core.id.context.BusinessControl;
-
-/**
- * Initial Date: 05.01.2006
- * Allows to undock/dock a controller out of its original screen part into a new browser window.
- * @author Felix Jost
- */
-public class DockController extends BasicController {
-	private static final String CMD_UNDOCK = "ud";
-
-	private VelocityContainer mainVC;
-	private StackedPanel panel;
-	private DockLayoutControllerCreatorCallback layoutCreator;
-	
-	Controller controller;
-	DelegatingWControl delegWControl;
-	private final boolean disposeWhenFloating;
-
-	/**
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param disposeWhenFloating if true, the floating window will be disposed when the controller where it was originally created is disposed. if false, the undocked window will live independently.
-	 * @param controllerCreator the creator of the controller to be made undockable
-	 * @param afterDockingCallback the callback to be called when docking process is finished or NULL
-	 * @param the layout creator used to wrap the content controller
-	 */
-	public DockController(UserRequest ureq, WindowControl wControl, boolean disposeWhenFloating, ControllerCreator controllerCreator, DockLayoutControllerCreatorCallback layoutCreator) {
-		super(ureq, wControl);
-		this.disposeWhenFloating = disposeWhenFloating;
-		this.layoutCreator = layoutCreator;
-		mainVC = createVelocityContainer("docked");
-		/*
-		 * delegate window control to new basis window (clientside new browserwindow)
-		 * -> take controller out of main window and set the controller into the new window
-		 * -> info / warn / error message, push, pop is then relative to the new window
-		 */
-		delegWControl = new DelegatingWControl();
-		delegWControl.setDelegate(getWindowControl());
-
-		Controller c = controllerCreator.createController(ureq, delegWControl);
-		// don't use auto dispose feature from basic controller, this is a special case
-		this.controller = c;
-		mainVC.put("controllerComp", c.getInitialComponent());		
-		mainVC.contextPut("winid", "w" + mainVC.getDispatchID());
-		
-		panel = putInitialPanel(mainVC);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Component source, Event event) {
-		if (source == mainVC) {
-			if (event.getCommand().equals(CMD_UNDOCK)) {
-				panel.setContent(null);
-				// pop up in new browser window
-				ControllerCreator undockControllerCreator = new ControllerCreator() {
-					public Controller createController(UserRequest lureq,WindowControl lwControl) {
-						delegWControl.setDelegate(lwControl);
-						return new LayoutMain3ColsController(lureq, delegWControl, controller);
-					}
-				};
-				
-				ControllerCreator newWindowContent;
-				if(layoutCreator != null){
-					//wrap with layout
-					newWindowContent = layoutCreator.createLayoutControllerCreator(ureq, undockControllerCreator);
-				}else{
-					//use default layout
-					newWindowContent = undockControllerCreator; 					
-				}
-				openInNewBrowserWindow(ureq, newWindowContent);
-			}
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-		if (disposeWhenFloating) {
-			if (controller != null) controller.dispose();
-		} // else nothing to do
-	}
-	//fxdiff BAKS-7 Resume function
-	public Controller getController() {
-		return controller;
-	}
-
-}
-
-class DelegatingWControl implements WindowControl {
-	private WindowControl origWCon;
-
-	void setDelegate(WindowControl delegWCon) {
-		origWCon = delegWCon;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#getWindowControlInfo()
-	 */
-	public WindowControlInfo getWindowControlInfo() {
-		return origWCon.getWindowControlInfo();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#makeFlat()
-	 */
-	public void makeFlat() {
-		origWCon.makeFlat();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#pop()
-	 */
-	public void pop() {
-		origWCon.pop();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#pushAsModalDialog(java.lang.String,
-	 *      org.olat.core.gui.components.Component)
-	 */
-	public void pushAsModalDialog(Component comp) {
-		origWCon.pushAsModalDialog(comp);
-	}
-
-	@Override
-	public void pushAsCallout(Component comp, String targetId) {
-		origWCon.pushAsCallout(comp, targetId);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#pushToMainArea(org.olat.core.gui.components.Component)
-	 */
-	public void pushToMainArea(Component comp) {
-		origWCon.pushToMainArea(comp);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#setError(java.lang.String)
-	 */
-	public void setError(String string) {
-		origWCon.setError(string);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#setInfo(java.lang.String)
-	 */
-	public void setInfo(String string) {
-		origWCon.setInfo(string);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.WindowControl#setWarning(java.lang.String)
-	 */
-	public void setWarning(String string) {
-		origWCon.setWarning(string);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.olat.core.gui.control.WindowControl#getBusinessControl()
-	 */
-	public BusinessControl getBusinessControl() {
-		return origWCon.getBusinessControl();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.olat.core.gui.control.WindowControl#getWindowBackOffice()
-	 */
-	public WindowBackOffice getWindowBackOffice() {
-		return origWCon.getWindowBackOffice();
-	}
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/DockModule.java b/src/main/java/org/olat/core/gui/control/generic/docking/DockModule.java
deleted file mode 100644
index 917e21e5e0e..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/DockModule.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.  
-* <p>
-*/ 
-package org.olat.core.gui.control.generic.docking;
-
-
-/**
- * Description:<br>
- * TODO: Felix Jost Class Description for Trans
- * 
- * <P>
- * Initial Date: 24.01.2007 <br>
- * @author Felix Jost, http://www.goodsolutions.ch
- */
-public class DockModule {
-
-	/**
-	 * 
-	 */
-	public DockModule() {
-		//
-	}
-	
-
-}
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_content/docked.html b/src/main/java/org/olat/core/gui/control/generic/docking/_content/docked.html
deleted file mode 100644
index cdc14448561..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_content/docked.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<script type="text/javascript">
-function $r.getId("undf")() {
-	try {
-		jQuery('#$r.getId("undck")').each(function(index, el){
-			el.style.display = 'none';
-			## for IE specialwurscht...
-			jQuery(el).attr("style","display:none");
-		});
-		var ww = window.open("$r.commandURI("ud")", "$winid", "height=400, width=800, left=0, top=0, location=no, menubar=no, resizable=yes, scrollbars=yes, toolbar=no");
-		ww.focus();
-	} catch(e) {
-		if(jQuery(document).ooLog().isDebugEnabled()) jQuery(document).ooLog('debug','Error when trying to dock div id::$r.getId("undck")' , "org.olat.core.gui.control.generic.docking._content.docked.html");
-	}
-}
-</script>
-<div id="$r.getId("undck")">
-	<a class="o_content_popup" href="javascript:$r.getId("undf")()" title="$r.translateInAttribute("command.undock")"><i class="o_icon o_icon_content_popup o_icon-lg"></i></a>	
-	$r.render("controllerComp")
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index 4397b69fda4..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sun Feb 14 22:21:39 CET 2010
-command.undock=\u0641\u062A\u062D \u0641\u0649 \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_bg.properties
deleted file mode 100644
index 434e8040e9c..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_bg.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Thu May 21 20:39:46 CEST 2009
-command.undock=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u0432 \u043D\u043E\u0432 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_cs.properties
deleted file mode 100644
index c99665f46fa..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_cs.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:13 CET 2009
-command.undock=Otev\u0159\u00EDt v nov\u00E9m okn\u011B
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_da.properties
deleted file mode 100644
index e2cfd947c53..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_da.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:08 CET 2009
-command.undock=Undock
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 54e971d2106..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-command.undock=In neuem Fenster \u00F6ffnen
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_el.properties
deleted file mode 100644
index 57ed48a1396..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_el.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:15 CET 2009
-command.undock=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C3\u03B5 \u03BD\u03AD\u03BF \u03C0\u03B1\u03C1\u03AC\u03B8\u03C5\u03C1\u03BF
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 177e871fe14..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Jan 22 19:24:37 CET 2010
-command.undock=Open in new window
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_es.properties
deleted file mode 100644
index 1d113a77438..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_es.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:20 CET 2009
-command.undock=Quitar de la plataforma
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fa.properties
deleted file mode 100644
index 1243be6669c..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fa.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:12 CET 2009
-command.undock=Undock
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 5b0e5e6af2b..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Sun Sep 05 16:10:32 CEST 2010
-command.undock=Ouvrir dans une nouvelle fen\u00EAtre
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 9be32a90ac1..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Sep 03 14:45:54 CEST 2010
-command.undock=Aprire in nuova finestra
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index a96a80d0564..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:01 CET 2009
-command.undock=\u65B0\u3057\u3044\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u8868\u793A\u3059\u308B
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_lt.properties
deleted file mode 100644
index b6fae984a1b..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_lt.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:02 CET 2009
-command.undock=Atsijungti
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index 19288049136..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:21 CET 2009
-command.undock=Open in nieuw venster
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index 3f37e5993fb..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:16 CET 2009
-command.undock=Otw\u00F3rz w nowym oknie
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index ee7b2a44fce..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:53:59 CET 2009
-command.undock=Abrir em uma nova janela
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_PT.properties
deleted file mode 100644
index 402931f52f5..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_pt_PT.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-command.undock=Abrir em uma nova janela
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ru.properties
deleted file mode 100644
index 4b331a31fb4..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_ru.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:18 CET 2009
-command.undock=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_sq.properties
deleted file mode 100644
index 772fb559109..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_sq.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:11 CET 2009
-command.undock=Hape n\u00EB nj\u00EB dritare t\u00EB re
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index c253a37064a..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:03 CET 2009
-command.undock=\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00
diff --git a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_TW.properties
deleted file mode 100644
index 39e0944dd0e..00000000000
--- a/src/main/java/org/olat/core/gui/control/generic/docking/_i18n/LocalStrings_zh_TW.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Mar 02 09:54:06 CET 2009
-command.undock=\u5728\u65B0\u8996\u7A97\u958B\u555F
diff --git a/src/main/java/org/olat/core/util/FileUtils.java b/src/main/java/org/olat/core/util/FileUtils.java
index ddb64864964..1d38010a2ab 100644
--- a/src/main/java/org/olat/core/util/FileUtils.java
+++ b/src/main/java/org/olat/core/util/FileUtils.java
@@ -1021,7 +1021,7 @@ public class FileUtils {
 	public static String appendNumberAtTheEndOfFilename(String name, int number) {
 		// Try to match the file to the pattern "[name].[extension]"
 		Matcher m = fileNamePattern.matcher(name);
-		StringBuffer newName = new StringBuffer();
+		StringBuilder newName = new StringBuilder();
 		if (m.matches()) {
 			newName.append(m.group(1)).append(number);
 			if (m.group(2) != null) {
diff --git a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
index 1f6b681af7e..8b43222e01a 100644
--- a/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
+++ b/src/main/java/org/olat/core/util/openxml/HTMLToOpenXMLHandler.java
@@ -25,7 +25,9 @@ import java.util.Collections;
 import java.util.Deque;
 import java.util.List;
 
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.openxml.OpenXMLDocument.ListParagraph;
+import org.olat.core.util.openxml.OpenXMLDocument.Spacing;
 import org.olat.core.util.openxml.OpenXMLDocument.Style;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -45,6 +47,7 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 
 	private boolean latex = false;
 	private StringBuilder textBuffer;
+	private Spacing startSpacing;
 	
 	private final OpenXMLDocument factory;
 	
@@ -60,6 +63,11 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 		this.currentParagraph = paragraph;
 	}
 	
+	public HTMLToOpenXMLHandler(OpenXMLDocument document, Spacing spacing) {
+		this.factory = document;
+		this.startSpacing = spacing;
+	}
+	
 	/**
 	 * Flush the text if a new paragraph is created. Trailing text is flushed
 	 * in the previous paragraph.
@@ -73,8 +81,24 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 				flushText();
 				addContent(currentParagraph);
 			}
-			currentParagraph = factory.createParagraphEl();
+			if(startSpacing == null) {
+				currentParagraph = factory.createParagraphEl();
+			} else {
+				currentParagraph = factory.createParagraphEl(startSpacing);
+				startSpacing = null;//consumed
+			}
+		}
+		return currentParagraph;
+	}
+	
+	private Element appendParagraph(Spacing spacing) {
+		//flush the text
+		if(textBuffer != null) {
+			flushText();
+			addContent(currentParagraph);
 		}
+
+		currentParagraph = factory.createParagraphEl(spacing);
 		return currentParagraph;
 	}
 	
@@ -122,12 +146,12 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 			}
 		} else {
 			Element currentRun = getCurrentRun();
-			String content = textBuffer.toString();
-			if(content.length() > 0 && Character.isSpaceChar(content.charAt(0))) {
+			String text = textBuffer.toString();
+			if(text.length() > 0 && Character.isSpaceChar(text.charAt(0))) {
 				currentRun.appendChild(factory.createPreserveSpaceEl());
 			}
-			currentRun.appendChild(factory.createTextEl(content));
-			if(content.length() > 1 && Character.isSpaceChar(content.charAt(content.length() - 1))) {
+			currentRun.appendChild(factory.createTextEl(text));
+			if(text.length() > 1 && Character.isSpaceChar(text.charAt(text.length() - 1))) {
 				currentRun.appendChild(factory.createPreserveSpaceEl());
 			}
 		}
@@ -269,6 +293,25 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 			currentListParagraph = factory.createListParagraph();
 		} else if("li".equals(tag)) {
 			getCurrentListParagraph(true);
+		} else if("div".equals(tag)) {
+			String cl = attributes.getValue("class");
+			if(StringHelper.containsNonWhitespace(cl)) {
+				if(cl.contains("o_quote_author")) {
+					appendParagraph(new Spacing(180, 0));
+					Style[] styles = setTextPreferences(Style.italic);
+					styleStack.add(new StyleStatus(tag, styles));
+				} else if(cl.contains("o_quote_wrapper")) {
+					//
+				} else if(cl.contains("o_quote")) {
+					appendParagraph(new Spacing(120, 0));
+					Style[] styles = setTextPreferences(Style.italic);
+					styleStack.add(new StyleStatus(tag, styles));
+				} else {
+					styleStack.add(new StyleStatus(tag, new Style[0]));
+				}
+			} else {
+				styleStack.add(new StyleStatus(tag, new Style[0]));
+			}
 		}
 	}
 
@@ -319,6 +362,8 @@ public class HTMLToOpenXMLHandler extends DefaultHandler {
 			currentListParagraph = null;
 		} else if("li".equals(tag)) {
 			//do nothing
+		} else if("div".equals(tag)) {
+			popStyle(tag);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
index b241cbe3591..a9e5c04e49a 100644
--- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
+++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocument.java
@@ -182,7 +182,7 @@ public class OpenXMLDocument {
 		List<Element> runsEl = new ArrayList<Element>(2);
 		Element runEl = createRunEl(Collections.singletonList(textEl));
 		runsEl.add(runEl);
-		Element styleEl = createParagraphStyle(style.styleId());
+		Element styleEl = createParagraphStyle(style.styleId(), style.runStyleId());
 		if(StringHelper.containsNonWhitespace(additionalText)) {
 			//add an "insecable" blank between the title and the additional text
 			Element blankRunEl = document.createElement("w:r");
@@ -208,6 +208,16 @@ public class OpenXMLDocument {
 		Element paragraphEl = createParagraphEl(styleEl, runsEl);
 		getCursor().appendChild(paragraphEl);
 	}
+	
+	public void appendSubtitle(String text) {
+		Element textEl = createTextEl(text);
+		List<Element> runsEl = new ArrayList<Element>(2);
+		Element runEl = createRunEl(Collections.singletonList(textEl), Heading.subSubtleEmphasis.runStyleId());
+		runsEl.add(runEl);
+		Element styleEl = createParagraphStyle(Heading.subSubtleEmphasis.styleId(), Heading.subSubtleEmphasis.runStyleId());
+		Element paragraphEl = createParagraphEl(styleEl, runsEl);
+		getCursor().appendChild(paragraphEl);
+	}
 /*
 <w:sectPr w:rsidR="00F528BA" w:rsidRPr="00DF16C8" w:rsidSect="007347AA">
 	<w:pgSz w:w="11900" w:h="16840" />
@@ -295,7 +305,7 @@ public class OpenXMLDocument {
 		}
 	}
 	
-	public void appendText(String text, boolean newParagraph, Style... styles) {
+	public void appendText(String text, boolean newParagraph, Style... textStyles) {
 		if(!StringHelper.containsNonWhitespace(text)) return;
 		
 		List<Element> textEls = new ArrayList<Element>();
@@ -311,8 +321,8 @@ public class OpenXMLDocument {
 		if(textEls.size() > 0) {
 			Element paragraphEl = getParagraphToAppendTo(newParagraph);
 			Element runEl = document.createElement("w:r");
-			if(styles != null && styles.length > 0) {
-				runEl.appendChild(createRunPrefsEl(styles));
+			if(textStyles != null && textStyles.length > 0) {
+				runEl.appendChild(createRunPrefsEl(textStyles));
 			}
 			for(Element textEl:textEls) {
 				runEl.appendChild(textEl);
@@ -372,6 +382,19 @@ public class OpenXMLDocument {
 		getCursor().appendChild(paragraphEl);
 	}
 	
+	public void appendHtmlText(String html, Spacing spacing) {
+		if(!StringHelper.containsNonWhitespace(html)) return;
+		try {
+			SAXParser parser = new SAXParser();
+			parser.setContentHandler(new HTMLToOpenXMLHandler(this, spacing));
+			parser.parse(new InputSource(new StringReader(html)));
+		} catch (SAXException e) {
+			log.error("", e);
+		} catch (IOException e) {
+			log.error("", e);
+		}
+	}
+	
 	public void appendHtmlText(String html, boolean newParagraph) {
 		if(!StringHelper.containsNonWhitespace(html)) return;
 		try {
@@ -394,12 +417,20 @@ public class OpenXMLDocument {
 /*
 <w:pPr>
 	<w:pStyle w:val="berschrift1" />
+	<w:rPr>
+		<w:rStyle w:val="SchwacheHervorhebung" />
+	</w:rPr>
 </w:pPr>
  */
-	public Element createParagraphStyle(String styleId) {
+	public Element createParagraphStyle(String styleId, String runStyleId) {
 		Element paragraphEl = document.createElement("w:pPr");
 		Element styleEl = (Element)paragraphEl.appendChild(document.createElement("w:pStyle"));
 		styleEl.setAttribute("w:val", styleId);
+		if(StringHelper.containsNonWhitespace(runStyleId)) {
+			Element runPrefsEl = (Element)paragraphEl.appendChild(document.createElement("w:rPr"));
+			Element rStyleEl = (Element)runPrefsEl.appendChild(document.createElement("w:rStyle"));
+			rStyleEl.setAttribute("w:val", runStyleId);
+		}
 		return paragraphEl;
 	}
 	
@@ -426,8 +457,33 @@ public class OpenXMLDocument {
 		return paragraphEl;
 	}
 	
+	/*
+<w:pPr>
+	<w:spacing w:before="120" w:after="120" w:beforeAutospacing="0" w:afterAutospacing="0"/>
+</w:pPr>
+*/
+	public Element createParagraphEl(Spacing spacing) {
+		Element paragraphEl = document.createElement("w:p");
+		Element paragraphPrefsEl = (Element)paragraphEl.appendChild(document.createElement("w:pPr"));
+		Element spacingEl = (Element)paragraphPrefsEl.appendChild(document.createElement("w:spacing"));
+		spacingEl.setAttribute("w:before", Integer.toString(spacing.getBefore()));
+		spacingEl.setAttribute("w:after", Integer.toString(spacing.getAfter()));
+		spacingEl.setAttribute("w:beforeAutospacing", "0");
+		spacingEl.setAttribute("w:afterAutospacing", "0");
+		return paragraphEl;
+	}
+	
 	public Element createRunEl(Collection<? extends Node> textEls) {
+		return createRunEl(textEls, null);
+	}
+	
+	public Element createRunEl(Collection<? extends Node> textEls, String runStyleId) {
 		Element runEl = document.createElement("w:r");
+		if(StringHelper.containsNonWhitespace(runStyleId)) {
+			Element runPrefsEl = (Element)runEl.appendChild(document.createElement("w:rPr"));
+			Element rStyleEl = (Element)runPrefsEl.appendChild(document.createElement("w:rStyle"));
+			rStyleEl.setAttribute("w:val", runStyleId);
+		}
 		if(textEls != null && textEls.size() > 0) {
 			for(Node textEl:textEls) {
 				runEl.appendChild(textEl);
@@ -436,14 +492,14 @@ public class OpenXMLDocument {
 		return runEl;
 	}
 	
-	public Node createRunPrefsEl(Style... styles) {
+	public Node createRunPrefsEl(Style... runStyles) {
 		Element runPrefsEl = document.createElement("w:rPr");
-		return createRunPrefsEl(runPrefsEl, styles);
+		return createRunPrefsEl(runPrefsEl, runStyles);
 	}
 	
-	public Node createRunPrefsEl(Node runPrefsEl, Style... styles) {
-		if(styles != null && styles.length > 0) {
-			for(Style style:styles) {
+	public Node createRunPrefsEl(Node runPrefsEl, Style... prefsStyles) {
+		if(prefsStyles != null && prefsStyles.length > 0) {
+			for(Style style:prefsStyles) {
 				if(style != null) {
 					switch(style) {
 						case underline: {
@@ -461,9 +517,9 @@ public class OpenXMLDocument {
 		return runPrefsEl;
 	}
 	
-	public Node createRunReversePrefsEl(Node runPrefsEl, Style... styles) {
-		if(styles != null && styles.length > 0) {
-			for(Style style:styles) {
+	public Node createRunReversePrefsEl(Node runPrefsEl, Style... runStyles) {
+		if(runStyles != null && runStyles.length > 0) {
+			for(Style style:runStyles) {
 				if(style != null) {
 					switch(style) {
 						case underline:
@@ -837,6 +893,16 @@ public class OpenXMLDocument {
 		}
 		return mathEls;
 	}
+	
+	public void appendImage(File file) {
+		Element imgEl = createImageEl(file);
+		if(imgEl != null) {
+			Element runEl = createRunEl(Collections.singletonList(imgEl));
+			Element paragraphEl = getParagraphToAppendTo(true);
+			paragraphEl.appendChild(runEl);
+			getCursor().appendChild(paragraphEl);
+		}
+	}
 
 	public Element createImageEl(String path) {
 		if(mediaContainer == null) return null;
@@ -1061,9 +1127,8 @@ public class OpenXMLDocument {
 		return docEl;
 	}
 	
-	private final Element createBodyElement(Element rootElement, Document doc) {
-		Element bodyEl = (Element)rootElement.appendChild(doc.createElement("w:body"));
-		return bodyEl;
+	private final Element createBodyElement(Element rootEl, Document doc) {
+		return (Element)rootEl.appendChild(doc.createElement("w:body"));
 	}
 	
 	public enum Style {
@@ -1090,19 +1155,27 @@ public class OpenXMLDocument {
 	}
 	
 	public enum Heading {
-		title("ooTitle"),
-		heading1("ooHeading1"),
-		heading2("ooHeading2");
+		title("ooTitle", null),
+		heading1("ooHeading1", null),
+		heading2("ooHeading2", null),
+		subTitle("ooUntertitel", "ooUntertitelZeichen"),
+		subSubtleEmphasis("ooSubtleEmphasis", "ooSubtleEmphasisZeichen");
 		
 		private final String styleId;
+		private final String runStyleId;
 		
-		private Heading(String styleId) {
+		private Heading(String styleId, String runStyleId) {
 			this.styleId = styleId;
+			this.runStyleId = runStyleId;
 		}
 
 		public String styleId() {
 			return styleId;
 		}
+		
+		public String runStyleId() {
+			return runStyleId;
+		}
 	}
 	
 	public static class HeaderReference {
@@ -1128,6 +1201,24 @@ public class OpenXMLDocument {
 		}
 	}
 	
+	public static class Spacing {
+		private final int before;
+		private final int after;
+		
+		public Spacing(int before, int after) {
+			this.before = before;
+			this.after = after;
+		}
+
+		public int getBefore() {
+			return before;
+		}
+
+		public int getAfter() {
+			return after;
+		}
+	}
+	
 	public static class ListParagraph {
 		
 		private final int abstractNumId;
diff --git a/src/main/java/org/olat/core/util/openxml/_resources/styles.xml b/src/main/java/org/olat/core/util/openxml/_resources/styles.xml
index 0fd8bf0801e..9b35421624b 100644
--- a/src/main/java/org/olat/core/util/openxml/_resources/styles.xml
+++ b/src/main/java/org/olat/core/util/openxml/_resources/styles.xml
@@ -415,8 +415,7 @@
 		<w:rsid w:val="000300CE" />
 		<w:pPr>
 			<w:pBdr>
-				<w:bottom w:val="single" w:sz="8" w:space="4" w:color="4F81BD"
-					w:themeColor="accent1" />
+				<w:bottom w:val="single" w:sz="8" w:space="4" w:color="4F81BD" w:themeColor="accent1" />
 			</w:pBdr>
 			<w:spacing w:after="300" />
 			<w:contextualSpacing />
@@ -447,4 +446,75 @@
 			<w:szCs w:val="52" />
 		</w:rPr>
 	</w:style>
+	<w:style w:type="paragraph" w:styleId="ooUntertitel">
+		<w:name w:val="OO Subtitle" />
+		<w:basedOn w:val="Standard" />
+		<w:next w:val="Standard" />
+		<w:link w:val="ooUntertitelZeichen" />
+		<w:uiPriority w:val="11" />
+		<w:qFormat />
+		<w:rsid w:val="00384D08" />
+		<w:pPr>
+			<w:numPr>
+				<w:ilvl w:val="1" />
+			</w:numPr>
+		</w:pPr>
+		<w:rPr>
+			<w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi" />
+			<w:i />
+			<w:iCs />
+			<w:color w:val="4F81BD" w:themeColor="accent1" />
+			<w:spacing w:val="15" />
+		</w:rPr>
+	</w:style>
+	<w:style w:type="character" w:customStyle="1" w:styleId="ooUntertitelZeichen">
+		<w:name w:val="OO Untertitel Zeichen" />
+		<w:basedOn w:val="Absatzstandardschriftart" />
+		<w:link w:val="Untertitel" />
+		<w:uiPriority w:val="11" />
+		<w:rsid w:val="00384D08" />
+		<w:rPr>
+			<w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi" />
+			<w:i />
+			<w:iCs />
+			<w:color w:val="4F81BD" w:themeColor="accent1" />
+			<w:spacing w:val="15" />
+		</w:rPr>
+	</w:style>
+	<w:style w:type="paragraph" w:styleId="ooSubtleEmphasis">
+		<w:name w:val="OO Subtle Emphasis" />
+		<w:basedOn w:val="Standard" />
+		<w:next w:val="Standard" />
+		<w:link w:val="ooSubtleEmphasisZeichen" />
+		<w:uiPriority w:val="11" />
+		<w:qFormat />
+		<w:rsid w:val="00384E11" />
+		<w:pPr>
+			<w:numPr>
+				<w:ilvl w:val="1" />
+			</w:numPr>
+		</w:pPr>
+		<w:rPr>
+			<w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi" />
+			<w:i />
+			<w:iCs />
+			<w:color w:val="8A6D3B" w:themeColor="subtle1" />
+			<w:sz w:val="20" />
+			<w:szCs w:val="20" />
+		</w:rPr>
+	</w:style>
+	<w:style w:type="character" w:styleId="ooSubtleEmphasisZeichen">
+		<w:name w:val="OO Subtle Emphasis" />
+		<w:basedOn w:val="Absatzstandardschriftart" />
+		<w:uiPriority w:val="19" />
+		<w:qFormat />
+		<w:rsid w:val="00384E12" />
+		<w:rPr>
+			<w:i />
+			<w:iCs />
+			<w:color w:val="8A6D3B" w:themeColor="subtle1" />
+			<w:sz w:val="20" />
+			<w:szCs w:val="20" />
+		</w:rPr>
+	</w:style>
 </w:styles>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/DialogCourseNode.java b/src/main/java/org/olat/course/nodes/DialogCourseNode.java
index ea5b8594b33..e354d3ec41c 100644
--- a/src/main/java/org/olat/course/nodes/DialogCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/DialogCourseNode.java
@@ -65,11 +65,11 @@ import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.dialog.DialogElement;
 import org.olat.modules.dialog.DialogElementsPropertyManager;
 import org.olat.modules.dialog.DialogPropertyElements;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.archiver.ForumArchiveManager;
 import org.olat.modules.fo.archiver.formatters.ForumFormatter;
 import org.olat.modules.fo.archiver.formatters.ForumRTFFormatter;
 import org.olat.modules.fo.archiver.formatters.ForumStreamedRTFFormatter;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryEntry;
 
 /**
@@ -224,7 +224,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	 * @param element
 	 * @param exportDirectory
 	 */
-	public void doArchiveElement(DialogElement element, File exportDirectory) {
+	public void doArchiveElement(DialogElement element, File exportDirectory, Locale locale) {
 		VFSContainer forumContainer = getForumContainer(element.getForumKey());
 		//there is only one file (leave) in the top forum container 
 		VFSItem dialogFile = forumContainer.getItems(new VFSLeafFilter()).get(0);
@@ -238,7 +238,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 		diaNodeElemExportContainer.copyFrom(dialogFile);
 
 		ForumArchiveManager fam = ForumArchiveManager.getInstance();
-		ForumFormatter ff = new ForumRTFFormatter(diaNodeElemExportContainer, false);
+		ForumFormatter ff = new ForumRTFFormatter(diaNodeElemExportContainer, false, locale);
 		fam.applyFormatter(ff, element.getForumKey(), null);
 	}
 	
@@ -250,7 +250,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 				.getDialogPropertyElements();
 		if(list.size() > 0) {
 			for (DialogElement element:list) {
-				doArchiveElement(element, exportStream);
+				doArchiveElement(element, exportStream, locale);
 				dataFound = true;
 			}
 		}
@@ -262,7 +262,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 	 * @param element
 	 * @param exportDirectory
 	 */
-	public void doArchiveElement(DialogElement element, ZipOutputStream exportStream) {
+	public void doArchiveElement(DialogElement element, ZipOutputStream exportStream, Locale locale) {
 		// append export timestamp to avoid overwriting previous export 
 		String exportDirName = Formatter.makeStringFilesystemSave(getShortTitle())
 				+ "_" + element.getForumKey()
@@ -274,7 +274,7 @@ public class DialogCourseNode extends AbstractAccessableCourseNode {
 		}
 
 		ForumArchiveManager fam = ForumArchiveManager.getInstance();
-		ForumFormatter ff = new ForumStreamedRTFFormatter(exportStream, exportDirName, false);
+		ForumFormatter ff = new ForumStreamedRTFFormatter(exportStream, exportDirName, false, locale);
 		fam.applyFormatter(ff, element.getForumKey(), null);
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/FOCourseNode.java b/src/main/java/org/olat/course/nodes/FOCourseNode.java
index dc5a3cda97d..8f6df7f35a6 100644
--- a/src/main/java/org/olat/course/nodes/FOCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/FOCourseNode.java
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.zip.ZipOutputStream;
 
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.gui.UserRequest;
@@ -43,6 +44,7 @@ import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLATRuntimeException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.Util;
@@ -71,9 +73,10 @@ import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumCallback;
-import org.olat.modules.fo.ForumManager;
+import org.olat.modules.fo.ForumModule;
 import org.olat.modules.fo.archiver.ForumArchiveManager;
 import org.olat.modules.fo.archiver.formatters.ForumStreamedRTFFormatter;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.properties.Property;
 import org.olat.repository.RepositoryEntry;
 
@@ -84,6 +87,8 @@ import org.olat.repository.RepositoryEntry;
  * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>)
  */
 public class FOCourseNode extends AbstractAccessableCourseNode {
+	
+	private static final OLog log = Tracing.createLoggerFor(FOCourseNode.class);
 
 	private static final long serialVersionUID = 2281715263255594865L;
 	private static final String PACKAGE_FO = Util.getPackageName(FOCourseNodeRunController.class);
@@ -123,8 +128,10 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	 *      org.olat.course.run.userview.UserCourseEnvironment,
 	 *      org.olat.course.run.userview.NodeEvaluation)
 	 */
+	@Override
 	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl,
 			final UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) {
+		updateModuleConfigDefaults(false);
 		
 		Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
 		boolean isOlatAdmin = ureq.getUserSession().getRoles().isOLATAdmin();
@@ -138,13 +145,27 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 				wControl = bcf.createBusinessWindowControl(businessControl, wControl);
 			} catch (NumberFormatException e) {
 				// ups, nodecmd is not a message, what the heck is it then?
-				Tracing.createLoggerFor(this.getClass()).warn("Could not create message ID from given nodemcd::" + nodecmd, e);
+				log.warn("Could not create message ID from given nodemcd::" + nodecmd, e);
 			}
 		}
+
+		//for guests, check if posting is allowed
+		boolean pseudonymPostAllowed = false;
+		boolean guestPostAllowed = false;
+		if(ureq.getUserSession().getRoles().isGuestOnly()) {
+			String config = getModuleConfiguration().getStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED);
+			guestPostAllowed = CoreSpringFactory.getImpl(ForumModule.class).isAnonymousPostingWithPseudonymEnabled()
+					&& "true".equals(config);
+		} else {
+			String config = getModuleConfiguration().getStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED);
+			pseudonymPostAllowed = CoreSpringFactory.getImpl(ForumModule.class).isAnonymousPostingWithPseudonymEnabled()
+					&& "true".equals(config);
+		}
 		// Create subscription context and run controller
 		SubscriptionContext forumSubContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), this);
-		FOCourseNodeRunController forumC = new FOCourseNodeRunController(ureq, userCourseEnv, wControl, theForum, 
-				new ForumNodeForumCallback(ne, isOlatAdmin, isGuestOnly, forumSubContext), this);
+		ForumNodeForumCallback foCallback = new ForumNodeForumCallback(ne, isOlatAdmin, isGuestOnly,
+				guestPostAllowed, pseudonymPostAllowed, forumSubContext);
+		FOCourseNodeRunController forumC = new FOCourseNodeRunController(ureq, wControl, theForum, foCallback, this);
 		return new NodeRunConstructionResult(forumC);
 	}
 
@@ -165,43 +186,43 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		Property forumKeyProp = cpm.findCourseNodeProperty(thisCourseNode, null, null, FORUM_KEY);
 		//System.out.println("System.out.println - findCourseNodeProperty");
 		if(forumKeyProp!=null) {
-      // Forum does already exist, load forum with key from properties
-		  Long forumKey = forumKeyProp.getLongValue();
-		  theForum = fom.loadForum(forumKey);
-		  if (theForum == null) { throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
+			// Forum does already exist, load forum with key from properties
+			Long forumKey = forumKeyProp.getLongValue();
+			theForum = fom.loadForum(forumKey);
+			if (theForum == null) { throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
 				+ courseEnv.getCourseResourceableId() + " for node " + thisCourseNode.getIdent()
 				+ " as defined in course node property but forum manager could not load forum.", null); }
 		} else {
-      //creates resourceable from FOCourseNode.class and the current node id as key
+			//creates resourceable from FOCourseNode.class and the current node id as key
 			OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class, new Long(this.getIdent()));
-      //o_clusterOK by:ld 
-		  theForum = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerCallback<Forum>(){
-			  public Forum execute() {
-			  Forum forum = null;
-			  Long forumKey;
-			  Property forumKeyProperty = cpm.findCourseNodeProperty(thisCourseNode, null, null, FORUM_KEY);			  
-			  if (forumKeyProperty == null) {
-				  // First call of forum, create new forum and save forum key as property			  	
-				  forum = fom.addAForum();
-				  forumKey = forum.getKey();
-				  forumKeyProperty = cpm.createCourseNodePropertyInstance(thisCourseNode, null, null, FORUM_KEY, null, forumKey, null, null);
-				  cpm.saveProperty(forumKeyProperty);	
-				  //System.out.println("Forum added");
-			  } else {
-			    // Forum does already exist, load forum with key from properties
-					forumKey = forumKeyProperty.getLongValue();
-					forum = fom.loadForum(forumKey);
-					if (forum == null) { throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
+			//o_clusterOK by:ld 
+			theForum = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerCallback<Forum>(){
+				@Override
+				public Forum execute() {
+					Forum forum = null;
+					Long forumKey;
+					Property forumKeyProperty = cpm.findCourseNodeProperty(thisCourseNode, null, null, FORUM_KEY);			  
+					if (forumKeyProperty == null) {
+						// First call of forum, create new forum and save forum key as property			  	
+						forum = fom.addAForum();
+						forumKey = forum.getKey();
+						forumKeyProperty = cpm.createCourseNodePropertyInstance(thisCourseNode, null, null, FORUM_KEY, null, forumKey, null, null);
+						cpm.saveProperty(forumKeyProperty);	
+					} else {
+						// Forum does already exist, load forum with key from properties
+						forumKey = forumKeyProperty.getLongValue();
+						forum = fom.loadForum(forumKey);
+						if (forum == null) { throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
 							+ courseEnv.getCourseResourceableId() + " for node " + thisCourseNode.getIdent()
 							+ " as defined in course node property but forum manager could not load forum.", null); }
-					}
-			  //System.out.println("Forum already exists");
-			  return forum;
+						}
+					return forum;
 		  }});
 		}
 		return theForum;
 	}
 
+	@Override
 	protected void calcAccessAndVisibility(ConditionInterpreter ci, NodeEvaluation nodeEval) {
 		// evaluate the preconditions
 		boolean reader = (getPreConditionReader().getConditionExpression() == null ? true : ci.evaluateCondition(getPreConditionReader()));
@@ -225,6 +246,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	 *      org.olat.course.run.userview.UserCourseEnvironment,
 	 *      org.olat.course.run.userview.NodeEvaluation)
 	 */
+	@Override
 	public Controller createPreviewController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne) {
 		return new FOPreviewController(ureq, wControl, ne);
 	}
@@ -241,7 +263,8 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		if (ne.isAtLeastOneAccessible()) {
 			// Create a forum peekview controller that shows the latest two messages		
 			Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
-			Controller peekViewController = new FOPeekviewController(ureq, wControl, theForum, getIdent(), 3);
+			RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
+			Controller peekViewController = new FOPeekviewController(ureq, wControl, courseEntry, theForum, getIdent(), 3);
 			return peekViewController;			
 		} else {
 			// use standard peekview
@@ -318,6 +341,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	/**
 	 * @see org.olat.course.nodes.CourseNode#isConfigValid()
 	 */
+	@Override
 	public StatusDescription isConfigValid() {
 		/*
 		 * first check the one click cache
@@ -329,10 +353,10 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		return StatusDescription.NOERROR;
 	}
 
-
 	/**
 	 * @see org.olat.course.nodes.CourseNode#isConfigValid(org.olat.course.run.userview.UserCourseEnvironment)
 	 */
+	@Override
 	public StatusDescription[] isConfigValid(CourseEditorEnv cev) {
 		oneClickStatusCache = null;
 		//only here we know which translator to take for translating condition error messages
@@ -344,6 +368,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	/**
 	 * @see org.olat.course.nodes.CourseNode#getReferencedRepositoryEntry()
 	 */
+	@Override
 	public RepositoryEntry getReferencedRepositoryEntry() {
 		return null;
 	}
@@ -351,6 +376,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	/**
 	 * @see org.olat.course.nodes.CourseNode#needsReferenceToARepositoryEntry()
 	 */
+	@Override
 	public boolean needsReferenceToARepositoryEntry() {
 		return false;
 	}
@@ -369,7 +395,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		
 		String forumName = "forum_" + Formatter.makeStringFilesystemSave(getShortTitle())
 				+ "_" + Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
-		ForumStreamedRTFFormatter rtff = new ForumStreamedRTFFormatter(exportStream, forumName, false);	
+		ForumStreamedRTFFormatter rtff = new ForumStreamedRTFFormatter(exportStream, forumName, false, locale);	
 		ForumArchiveManager.getInstance().applyFormatter(rtff, forumKey, null);
 		return true;
 	}
@@ -378,6 +404,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	 * @see org.olat.course.nodes.CourseNode#informOnDelete(org.olat.core.gui.UserRequest,
 	 *      org.olat.course.ICourse)
 	 */
+	@Override
 	public String informOnDelete(Locale locale, ICourse course) {
 		CoursePropertyManager cpm = PersistingCoursePropertyManager.getInstance(course);
 		Property forumKeyProperty = cpm.findCourseNodeProperty(this, null, null, FORUM_KEY);
@@ -396,10 +423,11 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		// delete the forum, if there is one (is created on demand only)
 		CoursePropertyManager cpm = PersistingCoursePropertyManager.getInstance(course);
 		Property forumKeyProperty = cpm.findCourseNodeProperty(this, null, null, FORUM_KEY);
-		if (forumKeyProperty == null) return; // no forum created yet
-		Long forumKey = forumKeyProperty.getLongValue();
-		ForumManager.getInstance().deleteForum(forumKey); // delete the forum
-		cpm.deleteProperty(forumKeyProperty); // delete the property
+		if (forumKeyProperty != null) {
+			Long forumKey = forumKeyProperty.getLongValue();
+			ForumManager.getInstance().deleteForum(forumKey); // delete the forum
+			cpm.deleteProperty(forumKeyProperty); // delete the property
+		}
 	}
 
 	/**
@@ -413,11 +441,27 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	@Override
 	public void updateModuleConfigDefaults(boolean isNewNode) {
 		ModuleConfiguration config = getModuleConfiguration();
+		if(isNewNode) {
+			ForumModule forumModule = CoreSpringFactory.getImpl(ForumModule.class);
+			boolean pseudonymAllowed = forumModule.isAnonymousPostingWithPseudonymEnabled()
+					&& forumModule.isPseudonymForCourseEnabledByDefault();
+			config.setStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED, pseudonymAllowed ? "true" : "false");
+			config.setStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED, "false");
+		}
 		if (isNewNode || config.getConfigurationVersion() < 2) {
 			// use defaults for new course building blocks
 			config.setBooleanEntry(NodeEditController.CONFIG_STARTPAGE, Boolean.FALSE.booleanValue());
 			config.setConfigurationVersion(2);
 		}
+		if (config.getConfigurationVersion() < 3) {
+			if(config.getStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED) == null) {
+				config.setStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED, "false");	
+			}
+			if(config.getStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED) == null) {
+				config.setStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED, "false");
+			}
+			config.setConfigurationVersion(3);
+		}
 		// else node is up-to-date - nothing to do
 		config.remove(NodeEditController.CONFIG_INTEGRATION);
 	}
@@ -483,9 +527,11 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
  */
 class ForumNodeForumCallback implements ForumCallback {
 
-	private NodeEvaluation ne;
-	private boolean isOlatAdmin;
-	private boolean isGuestOnly;
+	private final NodeEvaluation ne;
+	private final boolean isOlatAdmin;
+	private final boolean isGuestOnly;
+	private final boolean guestPostAllowed;
+	private final boolean anonymousPostAllowed;
 	private final SubscriptionContext subscriptionContext;
 
 	/**
@@ -494,32 +540,45 @@ class ForumNodeForumCallback implements ForumCallback {
 	 * @param isGuestOnly true if the user is olat-guest
 	 * @param subscriptionContext
 	 */
-	public ForumNodeForumCallback(NodeEvaluation ne, boolean isOlatAdmin, boolean isGuestOnly, SubscriptionContext subscriptionContext) {
+	public ForumNodeForumCallback(NodeEvaluation ne, boolean isOlatAdmin, boolean isGuestOnly,
+			boolean guestPostAllowed, boolean anonymousPostAllowed,
+			SubscriptionContext subscriptionContext) {
 		this.ne = ne;
 		this.isOlatAdmin = isOlatAdmin;
 		this.isGuestOnly = isGuestOnly;
+		this.guestPostAllowed = guestPostAllowed;
+		this.anonymousPostAllowed = anonymousPostAllowed;
 		this.subscriptionContext = subscriptionContext;
 	}
 
+	@Override
+	public boolean mayUsePseudonym() {
+		if (isGuestOnly) return false;
+		return anonymousPostAllowed;
+	}
+
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayOpenNewThread()
 	 */
+	@Override
 	public boolean mayOpenNewThread() {
-		if (isGuestOnly) return false;
+		if (isGuestOnly && !guestPostAllowed) return false;
 		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
 	}
 
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayReplyMessage()
 	 */
+	@Override
 	public boolean mayReplyMessage() {
-		if (isGuestOnly) return false;
+		if (isGuestOnly && !guestPostAllowed) return false;
 		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
 	}
 
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayEditMessageAsModerator()
 	 */
+	@Override
 	public boolean mayEditMessageAsModerator() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -528,6 +587,7 @@ class ForumNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayDeleteMessageAsModerator()
 	 */
+	@Override
 	public boolean mayDeleteMessageAsModerator() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -537,14 +597,15 @@ class ForumNodeForumCallback implements ForumCallback {
 	 * 
 	 * @see org.olat.modules.fo.ForumCallback#mayArchiveForum()
 	 */
+	@Override
 	public boolean mayArchiveForum() {
-		if (isGuestOnly) return false;
-		else return true;
+		return !isGuestOnly;
 	}
 	
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayFilterForUser()
 	 */
+	@Override
 	public boolean mayFilterForUser() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -553,11 +614,11 @@ class ForumNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#getSubscriptionContext()
 	 */
+	@Override
 	public SubscriptionContext getSubscriptionContext() {
 	// SubscriptionContext sc = new SubscriptionContext("coourseli", new
 	// Long(123), "subident", "Einfuehrung in die Blabla", "Knoten gugus");
 	// do not offer subscription to forums for guests
 		return (isGuestOnly ? null : subscriptionContext);
 	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java
index cf5198bd376..23c38dfe559 100644
--- a/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/dialog/DialogCourseNodeEditController.java
@@ -66,7 +66,7 @@ import org.olat.modules.dialog.DialogElementsPropertyManager;
 import org.olat.modules.dialog.DialogElementsTableModel;
 import org.olat.modules.dialog.DialogPropertyElements;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.util.logging.activity.LoggingResourceable;
 
 /**
diff --git a/src/main/java/org/olat/course/nodes/dialog/DialogNodeForumCallback.java b/src/main/java/org/olat/course/nodes/dialog/DialogNodeForumCallback.java
index 7d3d57f9c9a..dcb60f36c96 100644
--- a/src/main/java/org/olat/course/nodes/dialog/DialogNodeForumCallback.java
+++ b/src/main/java/org/olat/course/nodes/dialog/DialogNodeForumCallback.java
@@ -57,9 +57,15 @@ public class DialogNodeForumCallback implements ForumCallback {
 		this.subscriptionContext = subscriptionContext;
 	}
 
+	@Override
+	public boolean mayUsePseudonym() {
+		return false;
+	}
+
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayOpenNewThread()
 	 */
+	@Override
 	public boolean mayOpenNewThread() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -68,6 +74,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayReplyMessage()
 	 */
+	@Override
 	public boolean mayReplyMessage() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -76,6 +83,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayEditMessageAsModerator()
 	 */
+	@Override
 	public boolean mayEditMessageAsModerator() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -84,6 +92,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayDeleteMessageAsModerator()
 	 */
+	@Override
 	public boolean mayDeleteMessageAsModerator() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -93,6 +102,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	 * 
 	 * @see org.olat.modules.fo.ForumCallback#mayArchiveForum()
 	 */
+	@Override
 	public boolean mayArchiveForum() {
 		if (isGuestOnly) return false;
 		else return true;
@@ -101,6 +111,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#mayFilterForUser()
 	 */
+	@Override
 	public boolean mayFilterForUser() {
 		if (isGuestOnly) return false;
 		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
@@ -109,6 +120,7 @@ public class DialogNodeForumCallback implements ForumCallback {
 	/**
 	 * @see org.olat.modules.fo.ForumCallback#getSubscriptionContext()
 	 */
+	@Override
 	public SubscriptionContext getSubscriptionContext() {
 		return (isGuestOnly ? null : subscriptionContext);
 	}
diff --git a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
index 14d400265bb..4164198a69e 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
@@ -51,13 +51,18 @@ import org.olat.course.tree.CourseEditorTreeModel;
  */
 public class FOCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener {
 
-	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";	
-	static final String[] paneKeys = { PANE_TAB_ACCESSIBILITY };
+	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
+	private static final String PANE_TAB_SETTINGS = "pane.tab.settings";
+	private static final String[] paneKeys = { PANE_TAB_ACCESSIBILITY, PANE_TAB_SETTINGS };
 	
-	private FOCourseNode foNode;
-	private VelocityContainer myContent;
+	public static final String PSEUDONYM_POST_ALLOWED = "pseudonym.post.allowed";
+	public static final String GUEST_POST_ALLOWED = "guest.post.allowed";
+	
+	private final FOCourseNode foNode;
+	private final VelocityContainer myContent;
 
-	private ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
+	private SettingsController settingsCtrl;
+	private final ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
 	private TabbedPane myTabbedPane;
 
 	/**
@@ -72,35 +77,40 @@ public class FOCourseNodeEditController extends ActivateableTabbableDefaultContr
 		super(ureq, wControl);
 		this.foNode = forumNode;
 		
-		myContent = this.createVelocityContainer("edit");		
+		myContent = createVelocityContainer("edit");		
 
 		CourseEditorTreeModel editorModel = course.getEditorTreeModel();
 		// Reader precondition
 		Condition readerCondition = foNode.getPreConditionReader();
 		readerCondContr = new ConditionEditController(ureq, getWindowControl(), readerCondition,
 				AssessmentHelper.getAssessableNodes(editorModel, forumNode), euce);		
-		this.listenTo(readerCondContr);
+		listenTo(readerCondContr);
 		myContent.put("readerCondition", readerCondContr.getInitialComponent());
 
 		// Poster precondition
 		Condition posterCondition = foNode.getPreConditionPoster();
 		posterCondContr = new ConditionEditController(ureq, getWindowControl(), posterCondition,
 				AssessmentHelper.getAssessableNodes(editorModel, forumNode), euce);		
-		this.listenTo(posterCondContr);
+		listenTo(posterCondContr);
 		myContent.put("posterCondition", posterCondContr.getInitialComponent());
 
 		// Moderator precondition
 		Condition moderatorCondition = foNode.getPreConditionModerator();
 		moderatorCondContr = new ConditionEditController(ureq, getWindowControl(), moderatorCondition,
 				AssessmentHelper.getAssessableNodes(editorModel, forumNode), euce);		
-		this.listenTo(moderatorCondContr);
+		listenTo(moderatorCondContr);
 		myContent.put("moderatorCondition", moderatorCondContr.getInitialComponent());
+		
+		//Settings
+		settingsCtrl = new SettingsController(ureq, getWindowControl(), forumNode);
+		listenTo(settingsCtrl);
 	}
 
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
 	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
 	 */
+	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
 		//
 	}
@@ -109,6 +119,7 @@ public class FOCourseNodeEditController extends ActivateableTabbableDefaultContr
 	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
 	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
 	 */
+	@Override
 	public void event(UserRequest urequest, Controller source, Event event) {
 		if (source == readerCondContr) {
 			if (event == Event.CHANGED_EVENT) {
@@ -128,28 +139,43 @@ public class FOCourseNodeEditController extends ActivateableTabbableDefaultContr
 				foNode.setPreConditionModerator(cond);
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
+		} else if (source == settingsCtrl) {
+			if (event == Event.CHANGED_EVENT) {
+				String pseudoAllowed = settingsCtrl.isPseudonymPostAllowed() ? "true" : "false";
+				foNode.getModuleConfiguration().setStringValue(PSEUDONYM_POST_ALLOWED, pseudoAllowed);
+				String guestAllowed = settingsCtrl.isGuestPostAllowed() ? "true" : "false";
+				foNode.getModuleConfiguration().setStringValue(GUEST_POST_ALLOWED, guestAllowed);
+				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
 		}
 	}
 
 	/**
 	 * @see org.olat.core.gui.control.generic.tabbable.TabbableDefaultController#addTabs(org.olat.core.gui.components.TabbedPane)
 	 */
+	@Override
 	public void addTabs(TabbedPane tabbedPane) {
 		myTabbedPane = tabbedPane;
 		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), myContent);
+		if(settingsCtrl != null) {
+			tabbedPane.addTab(translate(PANE_TAB_SETTINGS), settingsCtrl.getInitialComponent());
+		}
 	}
 
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
+	@Override
 	protected void doDispose() {
-    //child controllers registered with listenTo() get disposed in BasicController
+		//child controllers registered with listenTo() get disposed in BasicController
 	}
 
+	@Override
 	public String[] getPaneKeys() {
 		return paneKeys;
 	}
 
+	@Override
 	public TabbedPane getTabbedPane() {
 		return myTabbedPane;
 	}
diff --git a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeRunController.java
index d36783c7b82..6fa9d7ff22b 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeRunController.java
@@ -27,29 +27,20 @@ package org.olat.course.nodes.fo;
 
 import java.util.List;
 
-import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.creator.ControllerCreator;
-import org.olat.core.gui.control.generic.docking.DockController;
-import org.olat.core.gui.control.generic.docking.DockLayoutControllerCreatorCallback;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.title.TitledWrapperController;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
-import org.olat.course.CourseFactory;
 import org.olat.course.nodes.FOCourseNode;
 import org.olat.course.nodes.TitledWrapperHelper;
-import org.olat.course.run.environment.CourseEnvironment;
-import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumCallback;
-import org.olat.modules.fo.ForumUIFactory;
+import org.olat.modules.fo.ui.ForumController;
 import org.olat.util.logging.activity.LoggingResourceable;
 
 /**
@@ -60,11 +51,7 @@ import org.olat.util.logging.activity.LoggingResourceable;
  */
 public class FOCourseNodeRunController extends BasicController implements Activateable2 {
 
-	private DockController dockC;
-	private FOCourseNode courseNode;
-	private CourseEnvironment courseEnv;
-	private Forum forum;
-	private ForumCallback foCallback;
+	private final ForumController forumCtrl;
 
 	/**
 	 * Constructor for a forum course building block runtime controller
@@ -76,17 +63,18 @@ public class FOCourseNodeRunController extends BasicController implements Activa
 	 * @param foCallback The forum security callback
 	 * @param foCourseNode The current course node
 	 */
-	public FOCourseNodeRunController(UserRequest ureq, UserCourseEnvironment userCourseEnv, WindowControl wControl, Forum forum,
-			ForumCallback foCallback, FOCourseNode foCourseNode) {
+	public FOCourseNodeRunController(UserRequest ureq, WindowControl wControl, Forum forum,
+			ForumCallback foCallback, FOCourseNode courseNode) {
 		super(ureq, wControl);
-		this.courseNode = foCourseNode;
-		this.courseEnv = userCourseEnv.getCourseEnvironment();
-		this.forum = forum;
-		this.foCallback = foCallback;
-		// set logger on this run controller
-		addLoggingResourceable(LoggingResourceable.wrap(foCourseNode));
 
-		doLaunch(ureq);
+		// set logger on this run controller
+		addLoggingResourceable(LoggingResourceable.wrap(courseNode));
+		
+		forumCtrl = new ForumController(ureq, getWindowControl(), forum, foCallback, true);
+		listenTo(forumCtrl);
+		Controller titledCtrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), forumCtrl, courseNode, "o_fo_icon");
+		listenTo(titledCtrl);
+		putInitialPanel(titledCtrl.getInitialComponent());
 	}
 
 	@Override
@@ -94,34 +82,6 @@ public class FOCourseNodeRunController extends BasicController implements Activa
 		// nothing to do
 	}
 
-	private void doLaunch(UserRequest ureq) {
-		dockC = new DockController(ureq, getWindowControl(), false, new ControllerCreator(){
-			public Controller createController(UserRequest lureq, WindowControl lwControl) {
-				Controller foCtr = ForumUIFactory.getStandardForumController(lureq, lwControl, forum, foCallback);
-				listenTo(foCtr);
-				Controller titledCtrl = TitledWrapperHelper.getWrapper(lureq, lwControl, foCtr, courseNode, "o_fo_icon");
-				listenTo(titledCtrl);
-				return titledCtrl;
-			}}, 
-			new DockLayoutControllerCreatorCallback() {
-				public ControllerCreator createLayoutControllerCreator(UserRequest ureq, final ControllerCreator contentControllerCreator) {
-					return BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(ureq, new ControllerCreator() {
-						@SuppressWarnings("synthetic-access")
-						public Controller createController(UserRequest lureq, WindowControl lwControl) {
-							// Wrap in column layout, popup window needs a layout controller
-							Controller ctr = contentControllerCreator.createController(lureq, lwControl);
-							LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(lureq, lwControl, ctr);
-							layoutCtr.setCustomCSS(CourseFactory.getCustomCourseCss(lureq.getUserSession(), courseEnv));
-							layoutCtr.addDisposableChildController(ctr);
-							return layoutCtr;
-						}
-					});
-				}
-			});
-		listenTo(dockC);
-		putInitialPanel(dockC.getInitialComponent());
-	}
-
 	@Override
 	protected void doDispose() {
 		//
@@ -129,12 +89,6 @@ public class FOCourseNodeRunController extends BasicController implements Activa
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(dockC != null && dockC.getController() instanceof TitledWrapperController) {
-			TitledWrapperController wrapper2 = (TitledWrapperController)dockC.getController();
-			if(wrapper2.getContentController() instanceof Activateable2) {
-				((Activateable2)wrapper2.getContentController()).activate(ureq, entries, state);
-			}
-		}
+		forumCtrl.activate(ureq, entries, state);
 	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java b/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
index 8048ec8b2b3..bc7b8157050 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
@@ -24,6 +24,7 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.htmlsite.OlatCmdEvent;
@@ -39,9 +40,9 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.filter.FilterFactory;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
-import org.olat.modules.fo.Message;
-import org.olat.user.UserManager;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.ui.MessagePeekview;
+import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -60,9 +61,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class FOPeekviewController extends BasicController implements Controller {
 	// the current course node id
 	private final String nodeId;
-	
-	@Autowired
-	private UserManager userManager;
+	private final Link allItemsLink;
+	private final RepositoryEntry courseEntry;
+
 	@Autowired
 	private ForumManager forumManager;
 
@@ -74,26 +75,26 @@ public class FOPeekviewController extends BasicController implements Controller
 	 * @param nodeId The course node ID
 	 * @param itemsToDisplay number of items to be displayed, must be > 0
 	 */
-	public FOPeekviewController(UserRequest ureq, WindowControl wControl, Forum forum, String nodeId, int itemsToDisplay) {		
+	public FOPeekviewController(UserRequest ureq, WindowControl wControl, RepositoryEntry courseEntry, Forum forum, String nodeId, int itemsToDisplay) {		
 		// Use fallback translator from forum
 		super(ureq, wControl, Util.createPackageTranslator(Forum.class, ureq.getLocale()));
 		this.nodeId = nodeId;
+		this.courseEntry = courseEntry;
 	
 		VelocityContainer peekviewVC = createVelocityContainer("peekview");
 		// add items, only as many as configured
-		List<Message> messages = forumManager.getMessagesByForumID(forum.getKey(), 0, itemsToDisplay, Message.OrderBy.creationDate, false);
+		List<MessagePeekview> messages = forumManager.getPeekviewMessages(forum, itemsToDisplay);
 		// only take the configured amount of messages
 		List<MessageView> views = new ArrayList<MessageView>(itemsToDisplay);
-		for (Message message :messages) {
+		for (MessagePeekview message :messages) {
 			// add link to item
 			// Add link to jump to course node
 			Link nodeLink = LinkFactory.createLink("nodeLink_" + message.getKey(), peekviewVC, this);
 			nodeLink.setCustomDisplayText(StringHelper.escapeHtml(message.getTitle()));
 			nodeLink.setIconLeftCSS("o_icon o_icon_post");
 			nodeLink.setCustomEnabledLinkCSS("o_gotoNode");
-			nodeLink.setUserObject(message.getKey());	
+			nodeLink.setUserObject(message);	
 			
-			String creator = userManager.getUserDisplayName(message.getCreator());
 			String body = message.getBody();
 			if(body.length() > 256) {
 				String truncateBody = FilterFactory.getHtmlTagsFilter().filter(body);
@@ -107,11 +108,11 @@ public class FOPeekviewController extends BasicController implements Controller
 			} else {
 				body = StringHelper.xssScan(body);
 			}
-			views.add(new MessageView(message.getKey(), message.getCreationDate(), creator, body));
+			views.add(new MessageView(message.getKey(), message.getCreationDate(), body));
 		}
 		peekviewVC.contextPut("messages", views);
 		// Add link to show all items (go to node)
-		Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this);
+		allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this);
 		allItemsLink.setIconRightCSS("o_icon o_icon_start");
 		allItemsLink.setCustomEnabledLinkCSS("pull-right");
 		// Add Formatter for proper date formatting
@@ -124,13 +125,15 @@ public class FOPeekviewController extends BasicController implements Controller
 	 */
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
-		if (source instanceof Link) {
+		if(allItemsLink == source) {
+			fireEvent(ureq, new OlatCmdEvent(OlatCmdEvent.GOTONODE_CMD, nodeId));
+		} else if (source instanceof Link) {
 			Link nodeLink = (Link) source;
-			Object messageId = nodeLink.getUserObject();
-			if (messageId == null) {
-				fireEvent(ureq, new OlatCmdEvent(OlatCmdEvent.GOTONODE_CMD, nodeId));								
-			} else {
-				fireEvent(ureq, new OlatCmdEvent(OlatCmdEvent.GOTONODE_CMD, nodeId + "/" + messageId));				
+			Object uobject = nodeLink.getUserObject();
+			if (uobject instanceof MessagePeekview) {
+				MessagePeekview message = (MessagePeekview)uobject;
+				String businessPath = "[RepositoryEntry:" + courseEntry.getKey() + "][CourseNode:" + nodeId + "][Message:" + message.getKey() + "]";
+				NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());	
 			}
 		}
 	}
@@ -148,13 +151,11 @@ public class FOPeekviewController extends BasicController implements Controller
 		private final Long key;
 		private final String body;
 		private final Date creationDate;
-		private final String creatorFullname;
 		
-		public MessageView(Long key, Date creationDate, String creatorFullname, String body) {
+		public MessageView(Long key, Date creationDate, String body) {
 			this.key = key;
 			this.body = body;
 			this.creationDate = creationDate;
-			this.creatorFullname = creatorFullname;
 		}
 		
 		public Long getKey() {
@@ -165,10 +166,6 @@ public class FOPeekviewController extends BasicController implements Controller
 			return creationDate;
 		}
 
-		public String getCreatorFullname() {
-			return creatorFullname;
-		}
-
 		public String getBody() {
 			return body;
 		}
diff --git a/src/main/java/org/olat/course/nodes/fo/FOPreviewController.java b/src/main/java/org/olat/course/nodes/fo/FOPreviewController.java
index d757d65692b..b0703baa258 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOPreviewController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOPreviewController.java
@@ -66,6 +66,7 @@ public class FOPreviewController extends DefaultController {
 	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
 	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
 	 */
+	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
 		//
 	}
@@ -73,6 +74,7 @@ public class FOPreviewController extends DefaultController {
 	/**
 	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
 	 */
+	@Override
 	protected void doDispose() {
 		//
 	}
diff --git a/src/main/java/org/olat/course/nodes/fo/SettingsController.java b/src/main/java/org/olat/course/nodes/fo/SettingsController.java
new file mode 100644
index 00000000000..b152722c6ad
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/fo/SettingsController.java
@@ -0,0 +1,112 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.course.nodes.fo;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.course.nodes.FOCourseNode;
+import org.olat.modules.fo.ForumModule;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class SettingsController extends FormBasicController {
+	
+	private static final String[] allowKeys = new String[] { "on" };
+	
+	private MultipleSelectionElement allowPseudonymEl, allowGuestEl;
+
+	private final FOCourseNode foNode;
+	
+	@Autowired
+	private ForumModule forumModule;
+	
+	public SettingsController(UserRequest ureq, WindowControl wControl, FOCourseNode foNode) {
+		super(ureq, wControl, LAYOUT_VERTICAL);
+		this.foNode = foNode;
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		setFormTitle("settings.title");
+		
+		if(forumModule.isAnonymousPostingWithPseudonymEnabled()) {
+			String[] allowPseudonymValues = new String[] { translate("allow.pseudonym.post") };
+			allowPseudonymEl = uifactory.addCheckboxesHorizontal("allow.pseudonym", formLayout,
+					allowKeys, allowPseudonymValues);
+			allowPseudonymEl.setLabel(null, null);
+			allowPseudonymEl.addActionListener(FormEvent.ONCHANGE);
+			
+			if("true".equals(foNode.getModuleConfiguration().getStringValue(FOCourseNodeEditController.PSEUDONYM_POST_ALLOWED))) {
+				allowPseudonymEl.select(allowKeys[0], true);
+			}
+		}
+		
+		String[] allowGuestValues = new String[] { translate("allow.guest.post") };
+		allowGuestEl = uifactory.addCheckboxesHorizontal("allow.guest", formLayout,
+				allowKeys, allowGuestValues);
+		allowGuestEl.setLabel(null, null);
+		allowGuestEl.addActionListener(FormEvent.ONCHANGE);
+		if("true".equals(foNode.getModuleConfiguration().getStringValue(FOCourseNodeEditController.GUEST_POST_ALLOWED))) {
+			allowGuestEl.select(allowKeys[0], true);
+		}
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	public boolean isPseudonymPostAllowed() {
+		return allowPseudonymEl.isAtLeastSelected(1);
+	}
+	
+	public boolean isGuestPostAllowed() {
+		return allowGuestEl.isAtLeastSelected(1);
+	}
+	
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(allowPseudonymEl == source) {
+			fireEvent(ureq, Event.CHANGED_EVENT);
+		} else if(allowGuestEl == source) {
+			fireEvent(ureq, Event.CHANGED_EVENT);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+}
diff --git a/src/main/java/org/olat/course/nodes/fo/_content/peekview.html b/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
index d38605e0acf..90f637c559d 100644
--- a/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
+++ b/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
@@ -1,16 +1,9 @@
 <div class="o_forum_peekview clearfix">
 #foreach( $message in $messages ) 	
 	<div class="o_forum_peekview_message">
-		<h5>
-			$r.render("nodeLink_${message.getKey()}")
-			<small class="o_nowrap">
-				$r.escapeHtml($message.creator)
-				$formatter.formatDateAndTime($message.getCreationDate())
-			</small>
-		</h5>
-		<div>
-		$r.formatLatexFormulas($message.getBody())
-		</div>
+		<h5>$r.render("nodeLink_${message.getKey()}")
+			<small class="o_nowrap">$formatter.formatDateAndTime($message.getCreationDate())</small></h5>
+		<div>$r.formatLatexFormulas($message.getBody())</div>
 	</div>
 #end
 	$r.render("peekview.allItemsLink")
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
index eae5bc1ff22..882939ada20 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
@@ -1,4 +1,6 @@
 #Mon Mar 02 09:54:04 CET 2009
+allow.guest.post=Erstellen von Beitr\u00E4ge mit Guastzugang zulassen
+allow.pseudonym.post=Anonyme Beitr\u00E4ge mit Pseudonym zulassen
 command.closefo=Ansicht schliessen
 command.show=Forum anzeigen
 command.showpopup=Forum in neuem Fenster anzeigen
@@ -9,12 +11,10 @@ display.config.fieldsettitle=Konfiguration
 display.config.startPage=Mit Startseite?
 display.config.startPage.false=Nein, Inhalt direkt starten
 display.config.startPage.true=Ja, anzeigen
-
-
-
-
 pane.tab.accessibility=Zugang
 pane.tab.foconfig=Darstellung
+pane.tab.settings=Konfiguration
+settings.title=Konfiguration
 preview.canModerate=Forumsbeitr\u00E4ge moderieren m\u00F6glich
 preview.canPost=Forumsbeitr\u00E4ge schreiben m\u00F6glich
 preview.canRead=Forumsbeitr\u00E4ge lesen m\u00F6glich
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
index e958f5f58b4..b30675d654f 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
@@ -1,4 +1,6 @@
 #Wed Jan 26 19:01:16 CET 2011
+allow.guest.post=Erstellen von Beitr\u00E4ge mit Guastzugang zulassen
+allow.pseudonym.post=Anonyme Beitr\u00E4ge mit Pseudonym zulassen
 command.closefo=Close view
 command.show=Display forum
 command.showpopup=Display forum in a new window
@@ -9,12 +11,10 @@ display.config.fieldsettitle=Configuration
 display.config.startPage=With welcome page?
 display.config.startPage.false=No, show content immediately.
 display.config.startPage.true=Yes, display welcome page.
-
-
-
-
 pane.tab.accessibility=Access
 pane.tab.foconfig=Display
+pane.tab.settings=Settings
+settings.title=Settings
 peekview.allItemsLink=All contributions
 preview.canModerate=Moderating forum contributions enabled
 preview.canPost=Writing forum contributions enabled
diff --git a/src/main/java/org/olat/modules/_spring/modulesContext.xml b/src/main/java/org/olat/modules/_spring/modulesContext.xml
index abe45deda06..ae070c234f3 100644
--- a/src/main/java/org/olat/modules/_spring/modulesContext.xml
+++ b/src/main/java/org/olat/modules/_spring/modulesContext.xml
@@ -18,5 +18,27 @@
 	<import resource="classpath:/org/olat/modules/webFeed/_spring/webFeedContext.xml"/>
 	<import resource="classpath:/org/olat/modules/wiki/_spring/wikiContext.xml"/>
 	<import resource="classpath:/org/olat/modules/reminder/_spring/reminderContext.xml"/>
+	
+	
+	
+	<!-- Forum admin. panel -->
+	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
+		<property name="order" value="8208" />
+		<property name="actionController">	
+			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
+				<property name="className" value="org.olat.modules.fo.ui.ForumAdminController"/>
+			</bean>
+		</property>
+		<property name="navigationKey" value="forum" />
+		<property name="i18nActionKey" value="admin.menu.title"/>
+		<property name="i18nDescriptionKey" value="admin.menu.title.alt"/>
+		<property name="translationPackage" value="org.olat.modules.fo"/>
+		<property name="parentTreeNodeIdentifier" value="modulesParent" /> 
+		<property name="extensionPoints">
+			<list>	
+				<value>org.olat.admin.SystemAdminMainController</value>		
+			</list>
+		</property>
+	</bean>
 
 </beans>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsController.java b/src/main/java/org/olat/modules/dialog/DialogElementsController.java
index 19a6f0e8642..370fc8eb013 100644
--- a/src/main/java/org/olat/modules/dialog/DialogElementsController.java
+++ b/src/main/java/org/olat/modules/dialog/DialogElementsController.java
@@ -85,8 +85,8 @@ import org.olat.course.properties.CoursePropertyManager;
 import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.ForumUIFactory;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.util.logging.activity.LoggingResourceable;
@@ -365,7 +365,7 @@ public class DialogElementsController extends BasicController {
 			if (DialogBoxUIFactory.isYesEvent(event)) {
 				DialogCourseNode node = (DialogCourseNode) courseNode;
 				// archive data to personal folder
-				node.doArchiveElement(selectedElement, CourseFactory.getOrCreateDataExportDirectory(ureq.getIdentity(), node.getShortTitle()));
+				node.doArchiveElement(selectedElement, CourseFactory.getOrCreateDataExportDirectory(getIdentity(), node.getShortTitle()), getLocale());
 				// delete element
 				dialogElmsMgr.deleteDialogElement(coursePropMgr, courseNode, selectedElement.getForumKey());
 				forumMgr.deleteForum(selectedElement.getForumKey());
diff --git a/src/main/java/org/olat/modules/fo/DemoForumCallback.java b/src/main/java/org/olat/modules/fo/DemoForumCallback.java
deleted file mode 100644
index 588b7af6684..00000000000
--- a/src/main/java/org/olat/modules/fo/DemoForumCallback.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.modules.fo;
-
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-/**
- * @author schneider
- */
-public class DemoForumCallback implements ForumCallback {
-
-	/* (non-Javadoc)
-	 * @see org.olat.modules.fo.ForumCallback#mayOpenNewThread()
-	 */
-	public boolean mayOpenNewThread() {
-		return true;
-	}
-	
-	public boolean mayReplyMessage() {
-		return true;
-	}
-
-	public boolean mayEditMessageAsModerator() {
-		
-		return true;
-	}
-	
-	public boolean mayDeleteMessageAsModerator() {
-
-		return false;
-	}
-	
-	public boolean mayArchiveForum() {
-		
-		return true;
-	}
-
-	public boolean mayFilterForUser() {
-		return true;
-	}
-
-	/**
-	 * @see org.olat.modules.fo.ForumCallback#getSubscriptionContext()
-	 */
-	public SubscriptionContext getSubscriptionContext() {
-		return null;
-	}
-}
diff --git a/src/main/java/org/olat/modules/fo/FilterForUserController.java b/src/main/java/org/olat/modules/fo/FilterForUserController.java
deleted file mode 100644
index d7aa7f65b38..00000000000
--- a/src/main/java/org/olat/modules/fo/FilterForUserController.java
+++ /dev/null
@@ -1,777 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.fo;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
-import org.olat.core.commons.modules.bc.meta.MetaInfo;
-import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
-import org.olat.core.commons.services.mark.Mark;
-import org.olat.core.commons.services.mark.MarkResourceStat;
-import org.olat.core.commons.services.mark.MarkingService;
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.dispatcher.mapper.Mapper;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.link.LinkPopupSettings;
-import org.olat.core.gui.components.panel.StackedPanel;
-import org.olat.core.gui.components.table.BaseTableDataModelWithoutFilter;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.StaticColumnDescriptor;
-import org.olat.core.gui.components.table.Table;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableDataModel;
-import org.olat.core.gui.components.table.TableEvent;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.creator.ControllerCreator;
-import org.olat.core.gui.control.generic.ajax.autocompletion.AutoCompleterController;
-import org.olat.core.gui.control.generic.ajax.autocompletion.EntriesChosenEvent;
-import org.olat.core.gui.control.generic.ajax.autocompletion.ListProvider;
-import org.olat.core.gui.control.generic.ajax.autocompletion.ListReceiver;
-import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
-import org.olat.core.gui.media.MediaResource;
-import org.olat.core.gui.media.NotFoundMediaResource;
-import org.olat.core.gui.util.CSSHelper;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.UserConstants;
-import org.olat.core.logging.AssertException;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSMediaResource;
-import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
-import org.olat.user.DisplayPortraitController;
-import org.olat.user.UserInfoMainController;
-import org.olat.user.UserManager;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Description:<br>
- * This controller is implementing a search by user. There is two ways to search:
- * a text field with autocomplete to select directly the user and the list of
- * users which have posted some messages in the forum.
- * <BR>
- * Events:
- * <ul>
- * 	<li>OpenMessageInThreadEvent</li>
- * <ul>
- * <P>
- * Initial Date:  18 sept. 2009 <br>
- * @author srosse
- */
-public class FilterForUserController extends BasicController {
-
-	private static final String CMD_SHOW = "show";
-	private static final String CMD_HOMEPAGE = "homepage";
-	
-	private final Forum forum;
-	private List<Message> msgs;
-	private List<Message> threadMsgs;
-	private List<Map<String, Object>> currentMessagesMap;
-	private UsersTableModel usersTableModel;
-	private UserListProvider userListProvider;
-	private boolean forumChangedEventReceived = false;
-	
-	private final VelocityContainer mainVC;
-	private VelocityContainer vcThreadView;
-	private final TableController userListCtr;
-	private final AutoCompleterController userAutoCompleterCtr;
-	private final DateFormat dateFormat;
-	private final StackedPanel searchPanel;
-	
-	private final OLATResourceable forumOres;
-	private final String thumbMapper;
-	
-	@Autowired
-	private ForumManager forumManager;
-
-	public FilterForUserController(UserRequest ureq, WindowControl wControl, Forum forum) {
-		super(ureq, wControl);
-		this.forum = forum;
-		
-		msgs = forumManager.getMessagesByForum(forum);
-		forumOres = OresHelper.createOLATResourceableInstance(Forum.class,forum.getKey());
-		
-		mainVC = createVelocityContainer("filter_for_user");
-		
-		List<UserInfo> userInfoList = getUserInfoList();
-		userListProvider = new UserListProvider(userInfoList);
-
-		boolean ajax = wControl.getWindowBackOffice().getWindowManager().getGlobalSettings().getAjaxFlags().isIframePostEnabled();
-		mainVC.contextPut("ajax", new Boolean(ajax));
-		
-		// show key in result list, users that can see this filter have administrative rights
-		userAutoCompleterCtr = new AutoCompleterController(ureq, wControl, userListProvider, null, true, 60, 3, null);
-		listenTo(userAutoCompleterCtr);
-		
-		dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, ureq.getLocale());
-
-		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		tableConfig.setSortingEnabled(true);
-		
-		userListCtr = new TableController(tableConfig, ureq, wControl, getTranslator());
-		DefaultColumnDescriptor  lastNameDesc = new DefaultColumnDescriptor("table.user.lastname", 0, CMD_HOMEPAGE, ureq.getLocale());
-		lastNameDesc.setIsPopUpWindowAction(true, "height=600, width=900, location=no, menubar=no, resizable=yes, status=no, scrollbars=yes, toolbar=no");
-		userListCtr.addColumnDescriptor(lastNameDesc);
-		DefaultColumnDescriptor  firstNameDesc = new DefaultColumnDescriptor("table.user.firstname", 1, CMD_HOMEPAGE, ureq.getLocale());
-		firstNameDesc.setIsPopUpWindowAction(true, "height=600, width=900, location=no, menubar=no, resizable=yes, status=no, scrollbars=yes, toolbar=no");
-		userListCtr.addColumnDescriptor(firstNameDesc);
-		userListCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.user.replies", 2, null, ureq.getLocale()));
-		userListCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.user.threads", 3, null, ureq.getLocale()));
-		userListCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.lastModified", 4, null, ureq.getLocale()));
-		userListCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.numOfCharacters", 5, null, ureq.getLocale()));
-		userListCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.numOfWords", 6, null, ureq.getLocale()));
-		userListCtr.addColumnDescriptor(new StaticColumnDescriptor(CMD_SHOW, "viewswitch.title", getTranslator().translate("viewswitch.title")));
-		
-		usersTableModel = new UsersTableModel(userInfoList);
-		userListCtr.setTableDataModel(usersTableModel);
-		listenTo(userListCtr);
-		
-		mainVC.put("userAutoCompleter", userAutoCompleterCtr.getInitialComponent());
-		mainVC.put("userList", userListCtr.getInitialComponent());
-		
-		//results
-		vcThreadView = createVelocityContainer("threadview");
-
-		// Mapper to display thumbnail images of file attachments
-		thumbMapper = registerCacheableMapper(ureq, "fo_att_" + forum.getKey(), new Mapper() {
-			@Override
-			public MediaResource handle(String relPath, HttpServletRequest request) {
-				String[] query = relPath.split("/"); // exptected path looks like this /messageId/attachmentUUID/filename
-				if (query.length == 4) {
-					try {
-						Long mId = Long.valueOf(Long.parseLong(query[1]));
-						Map<String, Object> map = null;
-						for (Map<String, Object> m : currentMessagesMap) {
-							// search for message in current message map
-							if (m.get("id").equals(mId)) {
-								map = m;
-								break;
-							}
-						}
-						if (map != null) {
-							ArrayList<VFSItem> attachments = (ArrayList<VFSItem>) map.get("attachments");
-							for (VFSItem vfsItem : attachments) {
-								MetaInfo meta = ((MetaTagged)vfsItem).getMetaInfo();
-								if (meta.getUUID().equals(query[2])) {
-									if (meta.isThumbnailAvailable()) {
-										VFSLeaf thumb = meta.getThumbnail(200, 200, false);
-										if(thumb != null) {
-											// Positive lookup, send as response
-											return new VFSMediaResource(thumb);
-										}
-									}
-									break;
-								}
-							}
-						}
-					} catch (NumberFormatException e) {
-						logDebug("Could not parse attachment path::" + relPath, null);
-					}
-				}
-				// In any error case, send not found
-				return new NotFoundMediaResource(request.getRequestURI());
-			}
-		});					
-
-		searchPanel = putInitialPanel(mainVC);
-	}
-	
-	/**
-	 * Is the controller displaying the results
-	 * @return
-	 */
-	public boolean isShowResults() {
-		return searchPanel.getContent() == vcThreadView;
-	}
-	
-	/**
-	 * set the controller to its initial status, the search form
-	 */
-	public void setShowSearch() {
-		searchPanel.setContent(mainVC);
-	}
-	
-	public void forumChanged() {
-		forumChangedEventReceived = true;
-	}
-	
-	private boolean checkForumChangedEventReceived() {
-		if(forumChangedEventReceived) {
-			loadMessages();
-			forumChangedEventReceived = false;
-			return true;
-		}
-		return false;
-	}
-	
-	private void loadMessages() {
-		
-		msgs = ForumManager.getInstance().getMessagesByForum(forum);
-		
-		List<UserInfo> userInfoList = getUserInfoList();
-		userListProvider.setUserInfos(userInfoList);
-		usersTableModel = new UsersTableModel(userInfoList);
-		userListCtr.setTableDataModel(usersTableModel);
-	}
-	
-	protected List<UserInfo> getUserInfoList() {
-		Map<Identity,UserInfo> infoMap = new HashMap<Identity,UserInfo>();
-		
-		for(Message msg:msgs) {
-			Identity creator = msg.getCreator();
-			if(creator == null) continue;
-			UserInfo stats = infoMap.get(creator);
-			if(stats == null) {
-				stats = new UserInfo(creator);
-				stats.setLastModified(msg.getLastModified());
-				infoMap.put(creator, stats);
-			} else {
-
-				Date lastModified = msg.getLastModified();
-				if(stats.getLastModified().compareTo(lastModified) > 0) {
-					stats.setLastModified(lastModified);
-				}
-			}
-			
-			if(msg.getParent() == null) {
-				stats.incThreads();
-			} else {
-				stats.incReplies();
-			}
-			stats.addNumOfCharacters(msg.getNumOfCharacters());
-			stats.addNumOfWords(msg.getNumOfWords());
-		}
-		
-		List<UserInfo> infoList = new ArrayList<UserInfo>(infoMap.values());
-		Collections.sort(infoList);
-		return infoList;
-	}
-
-	@Override
-	protected void doDispose() {
-		//
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Component source, Event event) {
-		checkForumChangedEventReceived();
-		
-		if (source instanceof Link) {
-			// all other commands have the message value map id coded into the
-			// the command name. get message from this id
-			Link link = (Link) source;
-			String command = link.getCommand();
-			Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command);
-			Long messageId = (Long) messageMap.get("id");
-			
-			Message selectedMessage = forumManager.loadMessage(messageId);
-			if (selectedMessage != null) {
-				if (command.startsWith("open_in_thread_")) {
-					fireEvent(ureq, new OpenMessageInThreadEvent(selectedMessage));
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Get the message value map from a velocity command. The command must have
-	 * the signature commandname_messagemapid
-	 * 
-	 * @param identity
-	 * @param command
-	 * @return Map the value map for the current message
-	 */
-	private Map<String, Object> getMessageMapFromCommand(Identity identity, String command) {
-		String cmdId = command.substring(command.lastIndexOf("_") + 1);
-		try {
-			Integer id = Integer.valueOf(cmdId);
-			return currentMessagesMap.get(id.intValue());
-		} catch (NumberFormatException e) {
-			throw new AssertException("Tried to parse forum message id from command::" + command
-					+ " but message id was not a long. Could be a user who tries to hack the system. User::" + identity.getName(), e);
-		}
-	}
-	
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		checkForumChangedEventReceived();
-		
-		if(source == userListCtr) {
-			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
-				TableEvent te = (TableEvent) event;
-				
-				int rowid = te.getRowId();
-				final UserInfo selectedInfo = usersTableModel.getUserInfo(rowid);
-				if (te.getActionId().equals(CMD_SHOW)) {
-					showMessages(ureq, selectedInfo);
-				} else if (te.getActionId().equals(CMD_HOMEPAGE)) {
-					ControllerCreator ctrlCreator = new ControllerCreator() {
-						@Override
-						public Controller createController(UserRequest lureq, WindowControl lwControl) {
-							return new UserInfoMainController(lureq, lwControl, selectedInfo.getIdentity(), true, false);
-						}
-					};
-					// wrap the content controller into a full header layout
-					ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(ureq, ctrlCreator);
-					// open in new browser window
-					PopupBrowserWindow pbw = getWindowControl().getWindowBackOffice().getWindowManager().createNewPopupBrowserWindowFor(ureq,
-							layoutCtrlr);
-					pbw.open(ureq);
-				}
-			}
-		} else if (source == userAutoCompleterCtr) {
-			if(event instanceof EntriesChosenEvent) {
-				List<String> selectedUsernames = ((EntriesChosenEvent)event).getEntries();
-				if(selectedUsernames.size() == 1) {
-					String username = selectedUsernames.get(0);
-					UserInfo selectedInfo = usersTableModel.getUserInfo(username);
-					if(selectedInfo != null) {
-						showMessages(ureq, selectedInfo);
-					}
-				}
-			}
-		}
-	}
-	
-	protected void showMessages(UserRequest ureq, UserInfo selectedInfo) {
-		// for simplicity no reuse of container, always create new one
-		vcThreadView = createVelocityContainer("threadview");
-		vcThreadView.contextPut("filteredForFirstName", selectedInfo.getFirstName());
-		vcThreadView.contextPut("filteredForLastName", selectedInfo.getLastName());
-
-		vcThreadView.contextPut("isClosed", Boolean.FALSE); 
-		vcThreadView.contextPut("isHidden",Boolean.FALSE);		
-
-		vcThreadView.contextPut("showThreadTable", Boolean.FALSE);
-		vcThreadView.contextPut("threadMode", Boolean.FALSE);
-		vcThreadView.contextPut("msgDeepMap", null);
-		
-		threadMsgs = getMessages(selectedInfo.getIdentity());
-
-		// add all messages that are needed
-		currentMessagesMap = new ArrayList<Map<String, Object>>(threadMsgs.size());
-		
-		// load marks
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		List<String> markResSubPath = new ArrayList<String>();
-		for(Message threadMsg:threadMsgs) {
-			markResSubPath.add(threadMsg.getKey().toString());
-		}
-		List<Mark> markList =  markingService.getMarkManager().getMarks(forumOres, ureq.getIdentity(), markResSubPath);
-		Map<String,Mark> marks = new HashMap<String,Mark>(markList.size() * 2 + 1);
-		for(Mark mark:markList) {
-			marks.put(mark.getResSubPath(), mark);
-		}
-		List<MarkResourceStat> statList =  markingService.getMarkManager().getStats(forumOres, markResSubPath, null);
-		Map<String,MarkResourceStat> stats = new HashMap<String,MarkResourceStat>(statList.size() * 2 + 1);
-		for(MarkResourceStat stat:statList) {
-			stats.put(stat.getSubPath(), stat);
-		}
-			
-		// all messages in flat view
-		List<Message> orderedMessages = new ArrayList<Message>();
-					
-		orderedMessages.addAll(threadMsgs);
-		orderedMessages = threadMsgs;
-		Collections.sort(orderedMessages, new MessageComparatorByDate());
-		
-		int msgNum = 0;
-		for(Message msg:orderedMessages) {
-			addMessageToCurrentMessagesAndVC(ureq, msg, vcThreadView, currentMessagesMap, msgNum++, marks, stats);
-		}
-
-		vcThreadView.contextPut("messages", currentMessagesMap);
-
-		// Mapper to display thumbnail images of file attachments
-		vcThreadView.contextPut("thumbMapper", thumbMapper);
-		// add security callback
-		vcThreadView.contextPut("security", new SearchForumCallback());
-		searchPanel.setContent(vcThreadView);
-	}
-	
-	//TODO this method is very similar to the same in ForumController
-	private void addMessageToCurrentMessagesAndVC(UserRequest ureq, Message m, VelocityContainer vcContainer, List<Map<String, Object>> allList, int msgCount, Map<String,Mark> marks, Map<String,MarkResourceStat> stats) {
-		// all values belonging to a message are stored in this map
-		// these values can be accessed in velocity. make sure you clean up
-		// everything
-		// you create here in disposeCurrentMessages()!
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("id", m.getKey());
-		
-		map.put("newMessage", Boolean.FALSE);
-
-		// add some data now
-		Date creationDate = m.getCreationDate();
-		Identity modifier = m.getModifier();
-		if (modifier != null) {
-			map.put("isModified", Boolean.TRUE);
-			map.put("modfname",StringHelper.escapeHtml( modifier.getUser().getProperty(UserConstants.FIRSTNAME, ureq.getLocale())));
-			map.put("modlname", StringHelper.escapeHtml(modifier.getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale())));
-		} else {
-			map.put("isModified", Boolean.FALSE);
-		}
-		map.put("title", m.getTitle());
-		map.put("body", m.getBody());
-		map.put("date", dateFormat.format(creationDate));
-		Identity creator = m.getCreator();
-		
-		
-		map.put("firstname", StringHelper.escapeHtml(Formatter.truncate(creator.getUser().getProperty(UserConstants.FIRSTNAME, ureq.getLocale()), 18))); //keeps the first 15 chars
-		map.put("lastname", StringHelper.escapeHtml(Formatter.truncate(creator.getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale()), 18)));
-		
-		String subPath = m.getKey().toString();
-		Mark currentMark = marks.get(subPath);
-		MarkResourceStat stat = stats.get(subPath);
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		
-		if(!ureq.getUserSession().getRoles().isGuestOnly()) {
-			String businessPath = currentMark == null ?
-					getWindowControl().getBusinessControl().getAsString() + "[Message:" + m.getKey() + "]"
-					: currentMark.getBusinessPath();
-			Controller markCtrl = markingService.getMarkController(ureq, getWindowControl(), currentMark, stat, forumOres, subPath, businessPath);
-			vcThreadView.put("mark_"+msgCount, markCtrl.getInitialComponent());
-		}
-		
-		map.put("modified", dateFormat.format(m.getLastModified()));
-		// message attachments
-		ForumManager fm = ForumManager.getInstance();
-		VFSContainer msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey());
-		map.put("messageContainer", msgContainer);
-		List<VFSItem> attachments = new ArrayList<VFSItem>(msgContainer.getItems(new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES)));
-//		List attachments = msgContainer.getItems();
-		map.put("attachments", attachments);
-		if (attachments == null || attachments.size() == 0) map.put("hasAttachments", Boolean.FALSE);
-		else map.put("hasAttachments", Boolean.TRUE);
-		// number of children and modify/delete permissions
-		map.put("nOfCh", new Integer(1));
-		boolean userIsMsgCreator = ureq.getIdentity().getKey().equals(creator.getKey());
-		Boolean uIsMsgC = new Boolean(userIsMsgCreator);
-		map.put("uIsMsgC", uIsMsgC);
-		boolean isThreadtop = m.getThreadtop()==null;
-		map.put("isThreadtop", Boolean.valueOf(isThreadtop));
-		boolean isThreadClosed = Status.getStatus(m.getStatusCode()).isClosed(); 
-		if(!isThreadtop) {
-			isThreadClosed = Status.getStatus(m.getThreadtop().getStatusCode()).isClosed();
-		}
-		map.put("isThreadClosed", isThreadClosed);
-		// add portrait to map for later disposal and key for rendering in velocity
-		DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(), m.getCreator(), true, true);
-		// add also to velocity
-		map.put("portrait", portrait);
-		String portraitComponentVCName = m.getKey().toString();
-		map.put("portraitComponentVCName", portraitComponentVCName);
-		vcContainer.put(portraitComponentVCName, portrait.getInitialComponent());
-		// Add link with username that is clickable
-		String creatorFullName = StringHelper.escapeHtml(UserManager.getInstance().getUserDisplayName(creator));
-		Link vcLink = LinkFactory.createCustomLink("vc_"+msgCount, "vc_"+msgCount, creatorFullName, Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED, vcThreadView, this);
-		vcLink.setUserObject(msgCount);
-		LinkPopupSettings settings = new LinkPopupSettings(800, 600, "_blank");
-		vcLink.setPopup(settings);
-		allList.add(map);
-		
-		Link link = LinkFactory.createCustomLink("open_in_thread_"+msgCount, "open_in_thread_"+msgCount, "msg.open_in_thread", Link.BUTTON_SMALL, vcThreadView, this);
-		link.setIconRightCSS("o_icon o_icon_start");
-	}
-	
-	private List<Message> getMessages(Identity identity) {
-		List<Message> usersMessages = new ArrayList<Message>();
-		for(Message msg:msgs) {
-			if(identity.equals(msg.getCreator())) {
-				usersMessages.add(msg);
-			}
-		}
-		return usersMessages;
-	}
-	
-	/**
-	 * Provider for the autocomplete
-	 */
-	public class UserListProvider implements ListProvider {
-		private List<UserInfo> stats;
-		
-		public UserListProvider(List<UserInfo> stats) {
-			this.stats = stats;
-		}
-
-		public List<UserInfo> getUserInfos() {
-			return stats;
-		}
-
-		public void setUserInfos(List<UserInfo> stats) {
-			this.stats = stats;
-		}
-
-		public void getResult(String searchValue, ListReceiver receiver) {
-			searchValue = searchValue == null ? null : searchValue.toLowerCase();
-			for(UserInfo info:stats) {
-				Identity identity = info.getIdentity();
-				String name = identity.getName();
-				
-				if(identity.getName().startsWith(searchValue)) {
-					receiver.addEntry(name, name, info.getLastName() + " " + info.getFirstName(), CSSHelper.CSS_CLASS_USER);
-				} else if(info.getFirstNameLowerCase().startsWith(searchValue)) {
-					receiver.addEntry(name, name, info.getLastName() + " " + info.getFirstName(), CSSHelper.CSS_CLASS_USER);
-				} else if(info.getLastNameLowerCase().startsWith(searchValue)) {
-					receiver.addEntry(name, name, info.getLastName() + " " + info.getFirstName(), CSSHelper.CSS_CLASS_USER);
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Read-only security callback
-	 */
-	public class SearchForumCallback implements ForumCallback {
-
-		public SubscriptionContext getSubscriptionContext() {
-			return null;
-		}
-
-		public boolean mayArchiveForum() {
-			return false;
-		}
-
-		public boolean mayDeleteMessageAsModerator() {
-			return false;
-		}
-
-		public boolean mayEditMessageAsModerator() {
-			return false;
-		}
-
-		public boolean mayFilterForUser() {
-			return true;
-		}
-
-		public boolean mayOpenNewThread() {
-			return false;
-		}
-
-		public boolean mayReplyMessage() {
-			return false;
-		}
-	}
-	
-	/**
-	 * TableDataModel for the overview of all users in the forum
-	 */
-	public class UsersTableModel extends BaseTableDataModelWithoutFilter<UserInfo> implements TableDataModel<UserInfo> {
-		private final List<UserInfo> infos;
-		
-		public UsersTableModel(List<UserInfo> infos) {
-			this.infos = infos;
-		}
-		
-		public UserInfo getUserInfo(String username) {
-			for(UserInfo info:infos) {
-				Identity id = info.getIdentity();
-				if(username.equals(id.getName())) {
-					return info;
-				}
-			}
-			return null;
-		}
-		
-		public UserInfo getUserInfoByKey(Long key) {
-			for (UserInfo info : infos) {
-				Identity id = info.getIdentity();
-				if (key.equals(id.getKey())) { return info; }
-			}
-			return null;
-		}
-		
-		public UserInfo getUserInfo(int rowid) {
-			if(rowid >= 0 && rowid < infos.size()) {
-				return infos.get(rowid);
-			}
-			return null;
-		}
-
-		public int getColumnCount() {
-			return 5;
-		}
-
-		public int getRowCount() {
-			return infos.size();
-		}
-
-		public Object getValueAt(int row, int col) {
-			UserInfo userStats = infos.get(row);
-			switch(col) {
-				case 0: return userStats.getLastName();
-				case 1: return userStats.getFirstName();
-				case 2: return Integer.toString(userStats.getReplies());
-				case 3: return Integer.toString(userStats.getThreads());
-				case 4: {
-					if(userStats.getLastModified() == null)
-						return "";
-					return dateFormat.format(userStats.getLastModified());
-				}
-				case 5: return userStats.getNumOfCharacters();
-				case 6: return userStats.getNumOfWords();
-				case 7: return userStats;
-				default: return "";
-			}
-		}
-
-	}
-	
-	/**
-	 * Wrapper for all the statistics needed by the overview of all users
-	 * and the autocomplete
-	 */
-	public class UserInfo  implements Comparable<UserInfo> {
-		private int replies = 0;
-		private int threads = 0;
-		private int numOfCharacters = 0;
-		private int numOfWords = 0;
-		private Date lastModified;
-		private final Identity identity;
-		
-		private String firstName;
-		private String lastName;
-		private String firstNameLowerCase;
-		private String lastNameLowerCase;
-		
-		public UserInfo(Identity identity) {
-			this.identity = identity;
-			
-			firstName = identity.getUser().getProperty(UserConstants.FIRSTNAME, getLocale());
-			lastName = identity.getUser().getProperty(UserConstants.LASTNAME, getLocale());
-			firstNameLowerCase = firstName.toLowerCase();
-			lastNameLowerCase = lastName.toLowerCase();
-		}
-
-		public Identity getIdentity() {
-			return identity;
-		}
-		
-		public int getReplies() {
-			return replies;
-		}
-
-		public int getThreads() {
-			return threads;
-		}
-
-		public int getNumOfCharacters() {
-			return numOfCharacters;
-		}
-
-		public int getNumOfWords() {
-			return numOfWords;
-		}
-
-		public Date getLastModified() {
-			return lastModified;
-		}
-
-		public void setLastModified(Date lastModified) {
-			this.lastModified = lastModified;
-		}
-
-		public String getFirstName() {
-			return firstName;
-		}
-
-		public String getLastName() {
-			return lastName;
-		}
-
-		public String getFirstNameLowerCase() {
-			return firstNameLowerCase;
-		}
-
-		public String getLastNameLowerCase() {
-			return lastNameLowerCase;
-		}
-
-		public void incReplies() {
-			replies++;
-		}
-		
-		public void incThreads() {
-			threads++;
-		}
-		
-		public void addNumOfCharacters(Integer characters) {
-			if(characters != null) {
-				numOfCharacters += characters.intValue();
-			}
-		}
-		
-		public void addNumOfWords(Integer words) {
-			if(words != null) {
-				numOfWords += words.intValue();
-			}
-		}
-
-		public int compareTo(UserInfo o) {
-			if(o == null) return -1;
-			String l1 = getLastNameLowerCase();
-			String l2 = o.getLastNameLowerCase();
-			if(l1 == null)
-				return -1;
-			if(l2 == null)
-				return 1;
-			return l1.compareTo(l2);
-		}
-	}
-	
-	/**
-	 * Sort the message by date, ascending
-	 */
-	private class MessageComparatorByDate implements Comparator<Message> {
-		public int compare(Message o1, Message o2) {
-			Date d1 = o1.getLastModified();
-			Date d2 = o2.getLastModified();
-			
-			if(d1 == null)
-				return -1;
-			else if(d2 == null)
-				return 1;
-			return d1.compareTo(d2);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/modules/fo/ForumCallback.java b/src/main/java/org/olat/modules/fo/ForumCallback.java
index d29a61e2aa3..3c6b12d44b1 100644
--- a/src/main/java/org/olat/modules/fo/ForumCallback.java
+++ b/src/main/java/org/olat/modules/fo/ForumCallback.java
@@ -31,40 +31,45 @@ import org.olat.core.commons.services.notifications.SubscriptionContext;
  * @author schneider
  */
 public interface ForumCallback {
+	
+	/**
+	 * @return if allowed to post in forum with a pseudonym
+	 */
+	public boolean mayUsePseudonym();
 
 	/**
 	 * @return if allowed to open a new forum thread
 	 */
-	boolean mayOpenNewThread();
+	public boolean mayOpenNewThread();
 	
 	/**
 	 * @return if the current user may reply to messages
 	 */
-	boolean mayReplyMessage();
+	public boolean mayReplyMessage();
 	
 	/**
 	 * @return if allowed to moderate
 	 */
-	boolean mayEditMessageAsModerator();
+	public boolean mayEditMessageAsModerator();
 	
 	/**
 	 * @return if allowed to delete non-owned messages
 	 */
-	boolean mayDeleteMessageAsModerator();
+	public boolean mayDeleteMessageAsModerator();
 	
 	/**
 	 * @return true if allowed to archive the whole forum or threads of it
 	 */
-	boolean mayArchiveForum();
+	public boolean mayArchiveForum();
 	
 	/**
 	 * @return true if allowed to filter the whole forum
 	 */
-	boolean mayFilterForUser();
+	public boolean mayFilterForUser();
 	
 	/**
 	 * @return the subscriptionContext. if null, then no subscription must be offered
 	 */
-	SubscriptionContext getSubscriptionContext();
+	public SubscriptionContext getSubscriptionContext();
 	
 }
diff --git a/src/main/java/org/olat/modules/fo/ForumChangedEvent.java b/src/main/java/org/olat/modules/fo/ForumChangedEvent.java
index 554729273f2..de6a5e7bbc9 100644
--- a/src/main/java/org/olat/modules/fo/ForumChangedEvent.java
+++ b/src/main/java/org/olat/modules/fo/ForumChangedEvent.java
@@ -39,8 +39,29 @@ import org.olat.core.util.event.MultiUserEvent;
 public class ForumChangedEvent extends MultiUserEvent {
 
 	private static final long serialVersionUID = -6798225990538608024L;
+	
+	public static final String SPLIT = "split";
+	public static final String CLOSE = "close";
+	public static final String OPEN = "open";
+	public static final String HIDE = "hide";
+	public static final String SHOW = "show";
+	public static final String NEW = "new";
+	public static final String STICKY = "sticky";
+	
+	private Long threadtopKey;
+	private Long messageKey;
 
-	public ForumChangedEvent(String command) {
-		super(command);		
-	}	
+	public ForumChangedEvent(String command, Long threadtopKey, Long messageKey) {
+		super(command);	
+		this.threadtopKey = threadtopKey;
+		this.messageKey = messageKey;
+	}
+
+	public Long getThreadtopKey() {
+		return threadtopKey;
+	}
+
+	public Long getMessageKey() {
+		return messageKey;
+	}
 }
diff --git a/src/main/java/org/olat/modules/fo/ForumController.java b/src/main/java/org/olat/modules/fo/ForumController.java
deleted file mode 100644
index 3967c45039d..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumController.java
+++ /dev/null
@@ -1,1797 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.orgrmform
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <p>
-*/ 
-
-package org.olat.modules.fo;
-
-import java.io.File;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringEscapeUtils;
-import org.olat.NewControllerFactory;
-import org.olat.basesecurity.BaseSecurityModule;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.modules.bc.FolderConfig;
-import org.olat.core.commons.modules.bc.meta.MetaInfo;
-import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
-import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.commons.persistence.PersistenceHelper;
-import org.olat.core.commons.services.mark.Mark;
-import org.olat.core.commons.services.mark.MarkResourceStat;
-import org.olat.core.commons.services.mark.MarkingService;
-import org.olat.core.commons.services.notifications.NotificationsManager;
-import org.olat.core.commons.services.notifications.PublisherData;
-import org.olat.core.commons.services.notifications.SubscriptionContext;
-import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
-import org.olat.core.dispatcher.mapper.Mapper;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.link.LinkPopupSettings;
-import org.olat.core.gui.components.panel.SimpleStackedPanel;
-import org.olat.core.gui.components.panel.StackedPanel;
-import org.olat.core.gui.components.table.BooleanColumnDescriptor;
-import org.olat.core.gui.components.table.ColumnDescriptor;
-import org.olat.core.gui.components.table.CustomCellRenderer;
-import org.olat.core.gui.components.table.CustomCssCellRenderer;
-import org.olat.core.gui.components.table.CustomRenderColumnDescriptor;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.DefaultTableDataModel;
-import org.olat.core.gui.components.table.GenericObjectArrayTableDataModel;
-import org.olat.core.gui.components.table.Table;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableEvent;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-import org.olat.core.gui.components.velocity.VelocityContainer;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.gui.media.MediaResource;
-import org.olat.core.gui.media.NotFoundMediaResource;
-import org.olat.core.gui.render.Renderer;
-import org.olat.core.gui.render.StringOutput;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.User;
-import org.olat.core.id.UserConstants;
-import org.olat.core.id.context.BusinessControl;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.OLATSecurityException;
-import org.olat.core.logging.activity.ILoggingAction;
-import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.ConsumableBoolean;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.event.GenericEventListener;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.core.util.vfs.VFSMediaResource;
-import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
-import org.olat.modules.fo.archiver.ForumArchiveManager;
-import org.olat.modules.fo.archiver.formatters.ForumRTFFormatter;
-import org.olat.portfolio.EPUIFactory;
-import org.olat.search.SearchServiceUIFactory;
-import org.olat.search.SearchServiceUIFactory.DisplayOption;
-import org.olat.user.DisplayPortraitController;
-import org.olat.user.UserManager;
-import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Description: <br>
- * CREATE: - new thread (topmessage) -> ask ForumCallback 'mayOpenNewThread' -
- * new message -> ask ForumCallback 'mayReplyMessage' <br>
- * READ: - everybody may read every message <br>
- * UPDATE: - who wrote a message may edit and save his message as long as it has
- * no children. - if somebody want to edit a message of somebodyelse -> ask
- * ForumCallback 'mayEditMessageAsModerator' <br>
- * DELETE: - who wrote a message may delete his message as long as it has no
- * children. - if somebody want to delete a message of somebodyelse -> ask
- * ForumCallback 'mayDeleteMessageAsModerator' <br>
- * <br>
- * Notifications: notified when: <br>
- * a new thread is opened <br>
- * a new reply is given <br>
- * a message has been edited <br>
- * but not when a message has been deleted <br>
- * 
- * @author Felix Jost
- * @author Refactorings: Roman Haag, roman.haag@frentix.com, frentix GmbH
- */
-public class ForumController extends BasicController implements GenericEventListener, Activateable2 {
-
-	protected static final String TINYMCE_EMPTYLINE_CODE = "<p>&nbsp;</p>"; //is pre/appended to quote message to allow writing inside.
-
-	private static final String CMD_SHOWDETAIL = "showdetail";
-	private static final String CMD_SHOWMARKED = "showmarked";
-	private static final String CMD_SHOWNEW = "shownew";
-
-	protected static final String GUI_PREFS_THREADVIEW_KEY = "forum.threadview.enabled";
-
-	private ForumCallback focallback;
-
-	Message currentMsg; // current Msg (in detailview), so we know after
-	private Formatter f;
-
-	private Collator collator; 
-
-	private StackedPanel forumPanel;
-
-	private VelocityContainer vcListTitles;
-	private VelocityContainer vcEditMessage;
-	private VelocityContainer vcThreadView;
-	private VelocityContainer vcFilterView;
-	private Link msgCreateButton;
-	private Link archiveForumButton;
-	private Link archiveThreadButton;
-	private Link backLinkListTitles;
-	private Link backLinkSearchListTitles;
-	private List<Map<String, Object>> currentMessagesMap;
-	private Link closeThreadButton;
-	private Link openThreadButton;
-	private Link hideThreadButton;
-	private Link showThreadButton;
-	private Link filterForUserButton;
-	
-	private TableController allThreadTableCtr;
-	private TableController singleThreadTableCtr;
-	
-	private GenericObjectArrayTableDataModel attdmodel;
-	private ForumMessagesTableDataModel sttdmodel;
-	private ForumManager fm;
-	private Forum forum;
-	private List<Message> msgs;
-	private List<Message> threadMsgs;
-	private Set<Long> rms; // all keys from messages that the user already read
-	private boolean forumChangedEventReceived = false;
-
-	private DialogBoxController yesno, yesNoSplit, archiveFoDiaCtr, archiveThDiaCtr;
-	private TableController moveMessageTableCtr;
-	List<Message> threadList;
-	private CloseableModalController cmcMoveMsg;
-
-	private SubscriptionContext subsContext;
-	private ContextualSubscriptionController csc;
-
-	private MessageEditController msgEditCtr;
-	private CloseableModalController msgEditCmc;
-	private ForumThreadViewModeController viewSwitchCtr;
-	private Map<Long, Integer> msgDeepMap;
-	
-	private boolean searchMode = false;
-	private FilterForUserController filterForUserCtr;
-	
-	private Controller searchController;
-	
-	private final OLATResourceable forumOres;
-	
-	private final String thumbMapper;
-
-	@Autowired
-	private BaseSecurityModule securityModule;
-	@Autowired
-	private UserManager userManager;
-
-	/**
-	 * @param forum
-	 * @param focallback
-	 * @param ureq
-	 * @param wControl
-	 */
-	public ForumController(UserRequest ureq, WindowControl wControl,
-			Forum forum, ForumCallback focallback, boolean showSubscriptionButton) {
-		super(ureq, wControl);
-		this.forum = forum;
-		this.focallback = focallback;
-		addLoggingResourceable(LoggingResourceable.wrap(forum));
-		
-		forumOres = OresHelper.createOLATResourceableInstance(Forum.class,forum.getKey());
-		f = Formatter.getInstance(ureq.getLocale());
-		fm = ForumManager.getInstance();
-				
-		msgs = fm.getMessagesByForum(forum);
-
-		collator = Collator.getInstance(ureq.getLocale());
-		collator.setStrength(Collator.PRIMARY);
-
-		forumPanel = new SimpleStackedPanel("forumPanel");
-		forumPanel.addListener(this);
-
-		//create page
-		vcListTitles = createVelocityContainer("list_titles");
-		
-		msgCreateButton = LinkFactory.createButtonSmall("msg.create", vcListTitles, this);
-		msgCreateButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_thread_icon");
-		msgCreateButton.setElementCssClass("o_sel_forum_thread_new");
-		archiveForumButton = LinkFactory.createButtonSmall("archive.forum", vcListTitles, this);
-		archiveForumButton.setIconLeftCSS("o_icon o_icon-fw o_icon_archive_tool");
-		archiveForumButton.setElementCssClass("o_sel_forum_archive");
-		
-		if(securityModule.isUserAllowedAutoComplete(ureq.getUserSession().getRoles())) {
-			filterForUserButton = LinkFactory.createButtonSmall("filter", vcListTitles, this);
-			filterForUserButton.setIconLeftCSS("o_icon o_icon-fw o_icon_user");
-			filterForUserButton.setElementCssClass("o_sel_forum_filter");
-		}
-		
-		if(!this.isGuestOnly(ureq)) {
-		  SearchServiceUIFactory searchServiceUIFactory = (SearchServiceUIFactory)CoreSpringFactory.getBean(SearchServiceUIFactory.class);
-		  searchController = searchServiceUIFactory.createInputController(ureq, wControl, DisplayOption.STANDARD, null);
-		  listenTo(searchController);
-		  vcListTitles.put("search_input", searchController.getInitialComponent());
-		}
-		
-		// a list of titles of all messages in all threads
-		vcListTitles.contextPut("security", focallback);
-
-		// --- subscription ---
-		subsContext = focallback.getSubscriptionContext();
-		// if sc is null, then no subscription is desired
-		if (subsContext != null && showSubscriptionButton) {
-			String businessPath = wControl.getBusinessControl().getAsString();
-			String data = String.valueOf(forum.getKey());
-			PublisherData pdata = new PublisherData(OresHelper.calculateTypeName(Forum.class), data, businessPath);
-			
-			csc = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, pdata);
-			listenTo(csc);
-			
-			vcListTitles.put("subscription", csc.getInitialComponent());
-		}
-
-		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		tableConfig.setCustomCssClass("o_forum");
-		tableConfig.setSelectedRowUnselectable(true);
-		tableConfig.setDownloadOffered(false);
-		tableConfig.setTableEmptyMessage(translate("forum.emtpy"));
-
-		allThreadTableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
-		listenTo(allThreadTableCtr);
-		allThreadTableCtr.addColumnDescriptor(new CustomRenderColumnDescriptor("table.header.typeimg", 0, null, 
-				ureq.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, new MessageIconRenderer()));
-		allThreadTableCtr.addColumnDescriptor(new StickyRenderColumnDescriptor("table.thread", 1, CMD_SHOWDETAIL, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_LEFT, new StickyThreadCellRenderer()));		
-		allThreadTableCtr.addColumnDescriptor(new StickyColumnDescriptor("table.userfriendlyname", 2, null, ureq.getLocale()));
-		allThreadTableCtr.addColumnDescriptor(new StickyColumnDescriptor("table.lastModified", 3, null, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_CENTER));					
-		  allThreadTableCtr.addColumnDescriptor(new StickyColumnDescriptor("table.marked", 4, CMD_SHOWMARKED, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_RIGHT));		
-		  allThreadTableCtr.addColumnDescriptor(new StickyColumnDescriptor("table.unread", 5, CMD_SHOWNEW, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_RIGHT));
-		  allThreadTableCtr.addColumnDescriptor(new StickyColumnDescriptor("table.total", 6, null, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_RIGHT));
-				
-		singleThreadTableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
-		listenTo(singleThreadTableCtr);
-		singleThreadTableCtr.addColumnDescriptor(new ThreadColumnDescriptor("table.title", 0, CMD_SHOWDETAIL));
-		singleThreadTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.userfriendlyname", 1, null, ureq.getLocale()));
-		singleThreadTableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.modified", 2, null, ureq.getLocale(),
-				ColumnDescriptor.ALIGNMENT_CENTER));
-		singleThreadTableCtr
-				.addColumnDescriptor(new BooleanColumnDescriptor("table.header.state", 3, "", translate("table.row.new")));
-		
-		rms = getReadSet(ureq.getIdentity()); // here we fetch which messages had		
-				
-		// been read by the user
-		threadList = prepareListTitles(msgs);
-		
-		//precalulate message deepness
-		precalcMessageDeepness(msgs);
-		
-		// Default view
-		forumPanel = putInitialPanel(vcListTitles);
-		// jump to either the forum or the folder if the business-launch-path says so.
-		BusinessControl bc = getWindowControl().getBusinessControl();
-		ContextEntry ce = bc.popLauncherContextEntry();
-		if ( ce != null) { // a context path is left for me
-			if (isLogDebugEnabled()) logDebug("businesscontrol (for further jumps) would be: ", bc.toString());
-			OLATResourceable ores = ce.getOLATResourceable();
-			if (isLogDebugEnabled()) logDebug("OLATResourceable= " , ores.toString());
-			Long resId = ores.getResourceableId();
-			if (resId.longValue() != 0) {
-				if (isLogDebugEnabled()) logDebug("messageId=" , ores.getResourceableId().toString());
-				currentMsg = fm.loadMessage(ores.getResourceableId());
-				if (currentMsg != null) {
-					showThreadView(ureq, currentMsg, null);
-					scrollToCurrentMessage();					
-				} else {
-					// message not found, do nothing. Load normal start screen
-					showError("deleteok");
-					logDebug("Invalid messageId=", ores.getResourceableId().toString());
-				}
-			} else {
-				//FIXME:chg: Should not happen, occurs when course-node are called
-				if (isLogDebugEnabled()) logDebug("Invalid messageId=" , ores.getResourceableId().toString());
-			}
-		}
-		
-		// Mapper to display thumbnail images of file attachments
-		thumbMapper = registerCacheableMapper(ureq, "fo_att_" + forum.getKey(), new Mapper() {
-			@Override
-			public MediaResource handle(String relPath, HttpServletRequest request) {
-				String[] query = relPath.split("/"); // exptected path looks like this /messageId/attachmentUUID/filename
-				if (query.length == 4) {
-					try {
-						Long mId = Long.valueOf(Long.parseLong(query[1]));
-						Map<String, Object> map = null;
-						for (Map<String, Object> m : currentMessagesMap) {
-							// search for message in current message map
-							if (m.get("id").equals(mId)) {
-								map = m;
-								break;
-							}
-						}
-						if (map != null) {
-							ArrayList<VFSItem> attachments = (ArrayList<VFSItem>) map.get("attachments");
-							for (VFSItem vfsItem : attachments) {
-								MetaInfo meta = ((MetaTagged)vfsItem).getMetaInfo();
-								if (meta.getUUID().equals(query[2])) {
-									if (meta.isThumbnailAvailable()) {
-										VFSLeaf thumb = meta.getThumbnail(200, 200, false);
-										if(thumb != null) {
-											// Positive lookup, send as response
-											return new VFSMediaResource(thumb);
-										}
-									}
-									break;
-								}
-							}
-						}
-					} catch (NumberFormatException e) {
-						logDebug("Could not parse attachment path::" + relPath, null);
-					}
-				}
-				// In any error case, send not found
-				return new NotFoundMediaResource(request.getRequestURI());
-			}
-		});					
-
-		// Register for forum events
-		CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), forum);
-		
-		//filter for user
-		vcFilterView = createVelocityContainer("filter_view");
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-		Long resId = entries.get(0).getOLATResourceable().getResourceableId();
-		if (resId.longValue() != 0) {
-			currentMsg = fm.loadMessage(resId);
-			if (currentMsg != null) {
-				showThreadView(ureq, currentMsg, null);
-				scrollToCurrentMessage();					
-			}
-		}
-	}
-
-	/**
-	 * If event received, must update thread overview.
-	 */
-	private boolean checkForumChangedEventReceived() {
-		if(forumChangedEventReceived) {
-			this.showThreadOverviewView();
-			forumChangedEventReceived = false;
-			return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Component source, Event event) {
-		if(checkForumChangedEventReceived()) {
-			return;
-		}
-		String cmd = event.getCommand();
-		if (source == msgCreateButton){
-			showNewThreadView(ureq);
-		} else if (source == archiveForumButton){
-			archiveFoDiaCtr = activateYesNoDialog(ureq, null, translate("archive.forum.dialog"), archiveFoDiaCtr);
-		} else if (source == filterForUserButton) {
-			showFilterForUserView(ureq);
-		} else if (source == backLinkListTitles){ // back link list titles
-			if(searchMode && filterForUserCtr != null && filterForUserCtr.isShowResults()) {
-				forumPanel.setContent(vcFilterView);
-			} else {
-				searchMode = false;
-				showThreadOverviewView();
-			}
-		} else if (source == backLinkSearchListTitles) {
-			if(filterForUserCtr != null && filterForUserCtr.isShowResults()) {
-				filterForUserCtr.setShowSearch();
-			} else {
-				showThreadOverviewView();
-			}
-		} else if (source == archiveThreadButton){
-			archiveThDiaCtr = activateYesNoDialog(ureq, null, translate("archive.thread.dialog"), archiveThDiaCtr);
-		} else if (source == closeThreadButton) {
-			closeThread(currentMsg, true);
-		} else if (source == openThreadButton) {
-			closeThread(currentMsg, false);
-		} else if (source == hideThreadButton) {
-			hideThread(currentMsg, true);
-		} else if (source == showThreadButton) {
-			hideThread(currentMsg, false);		
-		}	else if (source == vcThreadView) {
-			if (cmd.startsWith("attachment_")) {
-				Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), cmd);
-				Long messageId = (Long) messageMap.get("id");
-				currentMsg = fm.loadMessage(messageId);
-				doAttachmentDelivery(ureq, cmd, messageMap);
-			}
-		} else if (source instanceof Link) {
-			// all other commands have the message value map id coded into the
-			// the command name. get message from this id
-			Link link = (Link) source;
-			String command = link.getCommand();
-			Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command);
-			Long messageId = (Long) messageMap.get("id");
-			
-			Message updatedMessage = fm.loadMessage(messageId);
-			if (updatedMessage!=null) {
-				currentMsg = updatedMessage;
-				// now dispatch the commands
-				if (command.startsWith("qt_")) {
-					showReplyView(ureq, true, currentMsg);
-				} else if (command.startsWith("rp_")) {
-					showReplyView(ureq, false, currentMsg);
-				} else if (command.startsWith("dl_")) {
-					showDeleteMessageView(ureq);
-				} else if (command.startsWith("ed_")) {
-					showEditMessageView(ureq);
-				}	else if (command.startsWith("split_")) {
-					showSplitThreadView(ureq);
-				} else if (command.startsWith("move_")) {
-					showMoveMessageView(ureq);
-				} else if (command.startsWith("vc_")) {
-					Map<String, Object> map = currentMessagesMap.get((Integer)link.getUserObject());
-					DisplayPortraitController dpC = (DisplayPortraitController) map.get("portrait");
-					if (dpC != null) {
-						dpC.showUserInfo(ureq);
-					}
-				}
-			} else if (currentMsg != null) {
-				showInfo("header.cannoteditmessage");
-				showThreadOverviewView();
-			}			
-		} 	
-	}
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Controller source, Event event) {
-		if(checkForumChangedEventReceived()) {
-			return;
-		}
-		if (source == yesno) {
-			if (DialogBoxUIFactory.isYesEvent(event)) { // yes
-				doDeleteMessage(ureq);
-				if (currentMsg.getThreadtop() == null) {
-					showThreadOverviewView(); // was last message in thread
-				} else {
-					showThreadView(ureq, currentMsg.getThreadtop(), null);
-				}
-			}
-		} else if (source == archiveFoDiaCtr) {
-			if (DialogBoxUIFactory.isYesEvent(event)) { // ok
-				doArchiveForum(ureq);
-				showInfo("archive.forum.successfully");
-			}
-		} else if (source == archiveThDiaCtr) {
-			if (DialogBoxUIFactory.isYesEvent(event)) { // ok
-				doArchiveThread(ureq, currentMsg);
-				showInfo("archive.thread.successfully");
-			}
-		} else if (source == singleThreadTableCtr) {
-			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
-				// user has selected a message title from singleThreadTable
-				// -> display message details and below all messages with the same
-				// topthread_id as the selected one
-				TableEvent te = (TableEvent) event;
-				String actionid = te.getActionId();
-				if (actionid.equals(CMD_SHOWDETAIL)) {
-					int rowid = te.getRowId();
-					Message m = sttdmodel.getObjects().get(rowid);
-					showThreadView(ureq, m, null);
-					ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_READ, getClass(), LoggingResourceable.wrap(currentMsg));
-				}
-			}
-		} else if (source == allThreadTableCtr) {
-			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
-				TableEvent te = (TableEvent) event;
-				String actionid = te.getActionId();
-				int rowid = te.getRowId();
-				Object[] msgWrapper = attdmodel.getObjects().get(rowid);
-				int size = msgWrapper.length;
-				Message m = (Message) msgWrapper[size-1];		
-				if (actionid.equals(CMD_SHOWDETAIL)) {			
-					showThreadView(ureq, m, null);
-				} else if (CMD_SHOWMARKED.equals(actionid)) {
-					showThreadView(ureq, m, ForumThreadViewModeController.VIEWMODE_MARKED);
-				} else if (CMD_SHOWNEW.equals(actionid)) {
-					showThreadView(ureq, m, ForumThreadViewModeController.VIEWMODE_NEW);
-				}
-			}
-		} else if (source == yesNoSplit) {
-			// the dialogbox is already removed from the gui stack - do not use getWindowControl().pop(); to remove dialogbox
-			if (DialogBoxUIFactory.isYesEvent(event)){
-				splitThread(ureq);				
-			}
-		} else if (source == moveMessageTableCtr) {
-			TableEvent te = (TableEvent)event;
-			Message topMsg = threadList.get(te.getRowId());
-			moveMessage(ureq, topMsg);
-		} else if(source == msgEditCmc) {
-			removeAsListenerAndDispose(msgEditCmc);
-			removeAsListenerAndDispose(msgEditCtr);
-			msgEditCtr = null;
-			msgEditCmc = null;
-		}
-		// events from messageEditor
-		else if (source == msgEditCtr){
-			//persist changed or new message
-			if (event == Event.DONE_EVENT){
-				if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_NEWTHREAD)){
-					// creation done -> save
-					doNewThread(ureq);
-					msgEditCtr.persistTempUploadedFiles(currentMsg);
-				} else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_EDITMSG)){
-					// edit done -> save 
-					Message updatedMessage = fm.loadMessage(currentMsg.getKey());
-					if(updatedMessage!=null) {
-					  doEditMessage(ureq);
-					  //file persisting is done already, as a msg-key was known during edit.
-					}	else {
-					  showInfo("header.cannoteditmessage");
-					}
-				} else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_REPLYMSG)){
-					// reply done -> save
-					Message updatedMessage = fm.loadMessage(currentMsg.getKey());
-				  if(updatedMessage!=null) {	
-					  doReplyMessage(ureq);
-					  msgEditCtr.persistTempUploadedFiles(currentMsg);
-				  } else {
-				  	showInfo("header.cannotsavemessage");
-				  }
-				}
-				//show thread view after all kind of operations
-				showThreadView(ureq, currentMsg, null);
-			
-			//editor was canceled
-			} else if (event == Event.CANCELLED_EVENT) {
-				// back to 'list all titles' if canceled on new thread
-				if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_NEWTHREAD)){
-					forumPanel.setContent(vcListTitles);
-				} else {
-					showThreadView(ureq, currentMsg, null);
-				}
-			}
-			if(msgEditCmc != null) {
-				msgEditCmc.deactivate();
-			}
-			cleanUp();
-		} else if (source == viewSwitchCtr){
-			if (event == Event.CHANGED_EVENT){
-				//viewmode has been switched, so change view:
-				String mode = viewSwitchCtr.getSelectedViewMode();
-				showThreadView(ureq, currentMsg, mode);
-			}
-		} else if (source == filterForUserCtr) {
-			if(event instanceof OpenMessageInThreadEvent) {
-				OpenMessageInThreadEvent openEvent = (OpenMessageInThreadEvent)event;
-				Message selectedMsg = openEvent.getMessage();
-				showThreadView(ureq,selectedMsg, null);
-				scrollToCurrentMessage();
-			}
-		}
-	}
-	
-	private void cleanUp() {
-		removeAsListenerAndDispose(msgEditCtr);
-		removeAsListenerAndDispose(msgEditCmc);
-		msgEditCmc = null;
-		msgEditCtr = null;
-	}
-	
-	/**
-	 * 
-	 * @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event)
-	 */
-	public void event(Event event) {
-		if(event instanceof ForumChangedEvent) {
-			forumChangedEventReceived = true;			
-		}		
-	}
-	
-	
-	////////////////////////////////////////
-	 // Application logic, do sth...
-	////////////////////////////////////////
-	
-	
-
-	private void doEditMessage(UserRequest ureq) {
-		//after editing message
-		boolean userIsMsgCreator = ureq.getIdentity().getKey().equals(currentMsg.getCreator().getKey());
-		boolean children = fm.hasChildren(currentMsg);
-
-		if (focallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (children == false))) {
-
-			currentMsg = msgEditCtr.getMessageBackAfterEdit();
-			currentMsg.setModifier(ureq.getIdentity());			
-			
-			final boolean changeLastModifiedDate = true; // OLAT-6295
-			fm.updateMessage(currentMsg, changeLastModifiedDate, null);
-			// if notification is enabled -> notify the publisher about news
-			if (subsContext != null) {
-				NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
-			}
-
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_EDIT, getClass(),
-					LoggingResourceable.wrap(currentMsg));
-
-		} else {
-			showWarning("may.not.save.msg.as.author");
-			forumPanel.setContent(vcEditMessage);
-		}
-	}
-
-	private void doReplyMessage(UserRequest ureq) {
-		//after replying to a message
-		Message m = fm.createMessage();
-		m = msgEditCtr.getMessageBackAfterEdit();
-
-		fm.replyToMessage(m, ureq.getIdentity(), currentMsg);
-		DBFactory.getInstance().intermediateCommit();
-		// if notification is enabled -> notify the publisher about news
-		if (subsContext != null) {
-			NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
-		}
-		currentMsg = m;
-		markRead(m, ureq.getIdentity());
-		
-		// do logging
-		ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_REPLY_MESSAGE_CREATE, getClass(),
-				LoggingResourceable.wrap(currentMsg));
-	}
-
-	private void doNewThread(UserRequest ureq) {
-		//after creating a thread
-		Message m = fm.createMessage();
-		m = msgEditCtr.getMessageBackAfterEdit();
-		
-		if (!focallback.mayOpenNewThread()) throw new OLATSecurityException("not allowed to open new thread in forum " + forum.getKey());
-		// open a new thread
-		fm.addTopMessage(ureq.getIdentity(), forum, m);
-		// if notification is enabled -> notify the publisher about news
-		if (subsContext != null) {
-			NotificationsManager.getInstance().markPublisherNews(subsContext, ureq.getIdentity(), true);
-		}
-		currentMsg = m;
-		markRead(m, ureq.getIdentity());
-
-		// do logging
-		addLoggingResourceable(LoggingResourceable.wrap(m));
-		ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_CREATE, getClass());
-	}
-
-	private void doAttachmentDelivery(UserRequest ureq, String cmd, Map<String, Object> messageMap) {
-		// user selected one attachment from the attachment list
-		int pos = Integer.parseInt(cmd.substring(cmd.indexOf("_") + 1, cmd.lastIndexOf("_")));
-		// velocity counter starts at 1
-		List<VFSItem> attachments = new ArrayList<VFSItem>();
-		attachments.addAll((Collection<VFSItem>) messageMap.get("attachments"));
-		VFSItem vI = attachments.get(pos - 1);
-		VFSLeaf vl = (VFSLeaf) vI;
-		VFSMediaResource res = new VFSMediaResource(vl);
-		res.setDownloadable(true); // prevent XSS attack
-		ureq.getDispatchResult().setResultingMediaResource(res);
-	}
-
-	private void doDeleteMessage(UserRequest ureq) {
-		boolean children = fm.hasChildren(currentMsg);
-		boolean hasParent = currentMsg.getParent() != null;
-		boolean userIsMsgCreator = ureq.getIdentity().getKey().equals(currentMsg.getCreator().getKey());
-		if (focallback.mayDeleteMessageAsModerator() || (userIsMsgCreator && children == false)) {
-			fm.deleteMessageTree(forum.getKey(), currentMsg);
-			showInfo("deleteok");
-			// do logging
-			if(hasParent) {
-				ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_DELETE, getClass(),
-						LoggingResourceable.wrap(currentMsg));
-			} else {
-				ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_DELETE, getClass(),
-						LoggingResourceable.wrap(currentMsg));
-			}
-		} else {
-			showWarning("may.not.delete.msg.as.author");
-		}
-	}
-
-	private void doArchiveForum(UserRequest ureq) {
-		ForumRTFFormatter rtff = new ForumRTFFormatter(getArchiveContainer(ureq), false);
-		ForumArchiveManager fam = ForumArchiveManager.getInstance();
-		fam.applyFormatter(rtff, forum.getKey(), focallback);
-	}
-
-	private void doArchiveThread(UserRequest ureq, Message currMsg) {
-		Message m = currMsg.getThreadtop();
-		Long topMessageId = (m == null) ? currMsg.getKey() : m.getKey();
-
-		ForumRTFFormatter rtff = new ForumRTFFormatter(getArchiveContainer(ureq), true);
-		ForumArchiveManager fam = ForumArchiveManager.getInstance();
-		fam.applyFormatterForOneThread(rtff, forum.getKey(), topMessageId);
-	}
-	
-	
-	
-	////////////////////////////////////////
-	 // Presentation
-	////////////////////////////////////////
-	
-	private void showFilterForUserView(UserRequest ureq) {
-		if(securityModule.isUserAllowedAutoComplete(ureq.getUserSession().getRoles())) {
-			searchMode = true;
-			backLinkSearchListTitles = LinkFactory.createCustomLink("backLinkLT", "back", "listalltitles", Link.LINK_BACK, vcFilterView, this);
-			
-			removeAsListenerAndDispose(filterForUserCtr);
-			filterForUserCtr = new FilterForUserController(ureq, getWindowControl(), forum);
-			listenTo(filterForUserCtr);
-			
-			vcFilterView.put("filterForUser", filterForUserCtr.getInitialComponent());
-			forumPanel.setContent(vcFilterView);
-		}
-	}
-
-	private void showThreadOverviewView() {
-		// user has clicked on button 'list all message titles'
-		// -> display allThreadTable
-		msgs = fm.getMessagesByForum(forum);
-		prepareListTitles(msgs);
-		forumPanel.setContent(vcListTitles);
-		// do logging
-		ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_LIST, getClass());
-	}	
-	
-	private void showNewThreadView(UserRequest ureq) {
-		cleanUp();
-		// user has clicked on button 'open new thread'.
-		Message m = fm.createMessage();
-		msgEditCtr = new MessageEditController(ureq, getWindowControl(), focallback, m, null);
-		listenTo(msgEditCtr);
-		
-		String title = translate("msg.create");
-		msgEditCmc = new CloseableModalController(getWindowControl(), "close",
-				msgEditCtr.getInitialComponent(), true, title);
-		listenTo(msgEditCmc);
-		msgEditCmc.activate();
-	}
-	
-	private void showEditMessageView(UserRequest ureq) {
-		// user has clicked on button 'edit'
-		boolean userIsMsgCreator = ureq.getIdentity().getKey().equals(currentMsg.getCreator().getKey());
-		boolean children = fm.hasChildren(currentMsg);
-		if (focallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (children == false))) {
-			// user is forum-moderator -> may edit every message on every level
-			// or user is author of the current message and it has still no
-			// children
-			cleanUp();
-			
-			msgEditCtr = new MessageEditController(ureq, getWindowControl(), focallback, currentMsg, null);
-			listenTo(msgEditCtr);
-			
-			String title = translate("msg.update");
-			msgEditCmc = new CloseableModalController(getWindowControl(), "close",
-					msgEditCtr.getInitialComponent(), true, title);
-			listenTo(msgEditCmc);
-			msgEditCmc.activate();
-		} else if ((userIsMsgCreator) && (children == true)) {
-			// user is author of the current message but it has already at least
-			// one child
-			showWarning("may.not.save.msg.as.author");
-		} else {
-			// user isn't author of the current message
-			showInfo("may.not.edit.msg");
-		}
-	}
-
-	private void showDeleteMessageView(UserRequest ureq) {
-		// user has clicked on button 'delete'
-		// -> display modal dialog 'Do you really want to delete this message?'
-		// 'yes': back to allThreadTable, 'no' back to messageDetails
-		int numOfChildren = countNumOfChildren(currentMsg, threadMsgs);
-		boolean children = fm.hasChildren(currentMsg);
-		boolean userIsMsgCreator = ureq.getIdentity().getKey().equals(currentMsg.getCreator().getKey());
-		String currentMsgTitle = StringHelper.escapeHtml(currentMsg.getTitle());
-		
-		if (focallback.mayDeleteMessageAsModerator()) {
-			// user is forum-moderator -> may delete every message on every level
-			if (numOfChildren == 0) {
-				yesno = activateYesNoDialog(ureq, null, translate("reallydeleteleaf", currentMsgTitle), yesno);
-			} else if (numOfChildren == 1) {
-				yesno = activateYesNoDialog(ureq, null, translate("reallydeletenode1", currentMsgTitle), yesno);
-			} else {
-				yesno = activateYesNoDialog(ureq, null, getTranslator().translate("reallydeletenodeN", new String[] { currentMsgTitle, Integer.toString(numOfChildren) }), yesno);
-			}
-		} else if ((userIsMsgCreator) && (children == false)) {
-			// user may delete his own message if it has no children
-			yesno = activateYesNoDialog(ureq, null, translate("reallydeleteleaf", currentMsgTitle), yesno);
-		} else if ((userIsMsgCreator) && (children == true)) {
-			// user may not delete his own message because it has at least one child
-			showWarning("may.not.delete.msg.as.author");
-		} else {
-			// user isn't author of the current message
-			showInfo("may.not.delete.msg");
-		}
-	}
-
-	private void showReplyView(UserRequest ureq, boolean quote, Message parent) {
-		// user has clicked on button 'reply'
-		if (focallback.mayReplyMessage()) {
-
-			Message quotedMessage = fm.createMessage();
-			String reString = "";
-			if(parent!=null && parent.getThreadtop()==null) {
-				//add reString only for the first answer
-				reString = translate("msg.title.re");
-			}			
-			quotedMessage.setTitle(reString + currentMsg.getTitle());
-			if (quote) {
-				// load message to form as quotation				
-				StringBuilder quoteSB = new StringBuilder();
-				quoteSB.append(TINYMCE_EMPTYLINE_CODE);
-				quoteSB.append("<div class=\"o_quote_wrapper\"><div class=\"o_quote_author mceNonEditable\">");
-				String date = f.formatDateAndTime(currentMsg.getCreationDate());
-				User creator = currentMsg.getCreator().getUser();
-				String creatorName = creator.getProperty(UserConstants.FIRSTNAME, ureq.getLocale()) + " " + creator.getProperty(UserConstants.LASTNAME, ureq.getLocale());
-				quoteSB.append(getTranslator().translate("msg.quote.intro", new String[]{date, creatorName}));
-				quoteSB.append("</div><blockquote class=\"o_quote\">");
-				quoteSB.append(currentMsg.getBody());
-				quoteSB.append("</blockquote></div>");
-				quoteSB.append(TINYMCE_EMPTYLINE_CODE);
-				quotedMessage.setBody(quoteSB.toString());
-			}
-			
-			cleanUp();
-			
-			msgEditCtr = new MessageEditController(ureq, getWindowControl(), focallback, currentMsg, quotedMessage);
-			listenTo(msgEditCtr);
-			
-			String title = quote ? translate("msg.quote") : translate("msg.reply");
-			msgEditCmc = new CloseableModalController(getWindowControl(), "close",
-					msgEditCtr.getInitialComponent(), true, title);
-			listenTo(msgEditCmc);
-			msgEditCmc.activate();
-		} else {
-			showInfo("may.not.reply.msg");
-		}
-	}
-
-	private void showSplitThreadView(UserRequest ureq) {		
-		if (focallback.mayEditMessageAsModerator()) {
-			// user is forum-moderator -> may delete every message on every level
-			int numOfChildren = countNumOfChildren(currentMsg, threadMsgs);
-			
-			// provide yesNoSplit as argument, this ensures that dc is disposed before newly created
-			yesNoSplit = activateYesNoDialog(ureq, null, getTranslator().translate("reallysplitthread", new String[] { currentMsg.getTitle(), Integer.toString(numOfChildren) }), yesNoSplit);
-
-			//activateYesNoDialog means that this controller listens to it, and dialog is shown on screen.
-			//nothing further to do here!
-			return;
-		}
-	}
-	
-	private void showMoveMessageView(UserRequest ureq) {
-		if (focallback.mayEditMessageAsModerator()) {
-			//prepare the table data
-			msgs = fm.getMessagesByForum(forum);
-			threadList = prepareListTitles(msgs);
-			DefaultTableDataModel<Message> tdm = new DefaultTableDataModel<Message>(threadList) {
-				
-					@Override
-					public Object getValueAt(int row, int col) {
-						Message m = threadList.get(row);
-						boolean isSource = m.equalsByPersistableKey(currentMsg.getThreadtop());
-						switch (col) {
-							case 0:
-								String title = StringEscapeUtils.escapeHtml(m.getTitle()).toString();
-								return title;
-							case 1:
-								if (m.getCreator().getStatus().equals(Identity.STATUS_DELETED)) {
-									return m.getCreator().getName();
-								} else {
-									return userManager.getUserDisplayName(m.getCreator()); 
-								}
-							case 2 :
-								Date mod = m.getLastModified();
-								return mod;
-							case 3:
-								return !isSource;
-
-							default: return "error";
-						}
-					}
-				
-					@Override
-					public int getColumnCount() {
-						return 4;
-					}
-			};
-			
-			//prepare the table config
-			TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-			tableConfig.setCustomCssClass("o_forum");
-			tableConfig.setSelectedRowUnselectable(true);
-			tableConfig.setDownloadOffered(false);
-			tableConfig.setTableEmptyMessage(translate("forum.emtpy"));
-			
-			//prepare the table controller
-			removeAsListenerAndDispose(moveMessageTableCtr);
-			moveMessageTableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
-			listenTo(moveMessageTableCtr);
-			
-			moveMessageTableCtr.addColumnDescriptor(true, new DefaultColumnDescriptor("table.thread", 0, null, ureq.getLocale()));
-			moveMessageTableCtr.addColumnDescriptor(true, new DefaultColumnDescriptor("table.userfriendlyname", 1, null, ureq.getLocale()));
-			moveMessageTableCtr.addColumnDescriptor(true, new DefaultColumnDescriptor("table.lastModified", 2, null, ureq.getLocale()));				
-			moveMessageTableCtr.addColumnDescriptor(true, new BooleanColumnDescriptor("table.choose", 3, "move", translate("table.choose"), translate("table.source")));
-			moveMessageTableCtr.setTableDataModel(tdm);
-			
-			//push the modal dialog with the table as content
-			removeAsListenerAndDispose(cmcMoveMsg);
-			cmcMoveMsg = new CloseableModalController(getWindowControl(), "close", moveMessageTableCtr.getInitialComponent());
-			listenTo(cmcMoveMsg);
-			
-			cmcMoveMsg.activate();
-		}
-	}
-	
-	private void showThreadView(UserRequest ureq, Message m, String viewMode) {
-		
-		adjustBusinessControlPath(ureq, m);
-		
-		// remove old messages from velocity and dispose controllers
-		disposeCurrentMessages();
-		// now fetch current thread
-		Message threadTopM = m.getThreadtop();
-		currentMsg = m; // in some cases already set, but set current message anyway
-		threadMsgs = fm.getThread(threadTopM == null ? m.getKey() : threadTopM.getKey());
-		precalcMessageDeepness(threadMsgs);
-		// for simplicity no reuse of container, always create new one
-		vcThreadView = createVelocityContainer("threadview");
-		
-		backLinkListTitles = LinkFactory.createCustomLink("backLinkLT", "back", "listalltitles", Link.LINK_BACK, vcThreadView, this);
-		archiveThreadButton = LinkFactory.createButtonSmall("archive.thread", vcThreadView, this);
-		archiveThreadButton.setIconLeftCSS("o_icon o_icon-fw o_icon_archive_tool");
-
-				
-		boolean isClosed = Status.getStatus(m.getStatusCode()).isClosed(); 
-		vcThreadView.contextPut("isClosed",isClosed);
-		if(!isClosed) {
-			closeThreadButton = LinkFactory.createButtonSmall("close.thread", vcThreadView, this);
-			closeThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_closed_icon");
-		} else {
-			openThreadButton = LinkFactory.createButtonSmall("open.thread", vcThreadView, this);
-			openThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_opened_icon");
-		}	
-		boolean isHidden = Status.getStatus(m.getStatusCode()).isHidden(); 
-		vcThreadView.contextPut("isHidden",isHidden);		
-		if(!isHidden) {
-			hideThreadButton = LinkFactory.createButtonSmall("hide.thread", vcThreadView, this);
-			hideThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_hidden_icon");
-		} else {
-			showThreadButton = LinkFactory.createButtonSmall("show.thread", vcThreadView, this);
-			showThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_visible_icon");
-		}	
-
-		//allow to set thread-viewmode prefs and get actual ones
-		viewSwitchCtr = new ForumThreadViewModeController(ureq,getWindowControl(), viewMode);
-		listenTo(viewSwitchCtr);
-		vcThreadView.put("threadViewSwitch", viewSwitchCtr.getInitialComponent());
-		
-		vcThreadView.contextPut("showThreadTable", Boolean.FALSE);
-		vcThreadView.contextPut("threadMode", Boolean.FALSE);
-		vcThreadView.contextPut("msgDeepMap", msgDeepMap);
-		
-		// add all messages that are needed
-		currentMessagesMap = new ArrayList<Map<String, Object>>(threadMsgs.size());
-		
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		List<String> markResSubPath = new ArrayList<String>();
-		for(Message threadMsg:threadMsgs) {
-			markResSubPath.add(threadMsg.getKey().toString());
-		}
-		List<Mark> markList =  markingService.getMarkManager().getMarks(forumOres, ureq.getIdentity(), markResSubPath);
-		Map<String,Mark> marks = new HashMap<String,Mark>(markList.size() * 2 + 1);
-		for(Mark mark:markList) {
-			marks.put(mark.getResSubPath(), mark);
-		}
-		List<MarkResourceStat> statList =  markingService.getMarkManager().getStats(forumOres, markResSubPath, null);
-		Map<String,MarkResourceStat> stats = new HashMap<String,MarkResourceStat>(statList.size() * 2 + 1);
-		for(MarkResourceStat stat:statList) {
-			stats.put(stat.getSubPath(), stat);
-		}
-		
-		if(viewMode == null) {
-			viewMode = viewSwitchCtr.getThreadViewMode(ureq);
-		}
-		
-		if (ForumThreadViewModeController.VIEWMODE_FLAT.equals(viewMode)) {							
-			// all messages in flat view
-			List<Message> orderedMessages = new ArrayList<Message>();
-						
-			orderedMessages.addAll(threadMsgs);
-			orderedMessages = threadMsgs;
-			Collections.sort(orderedMessages);
-			
-			int msgNum = 0;
-			Iterator<Message> iter = orderedMessages.iterator();			
-			while (iter.hasNext()) {
-				Message msg = iter.next();
-				// add message and mark as read
-				addMessageToCurrentMessagesAndVC(ureq, msg, vcThreadView, currentMessagesMap, msgNum, marks, stats);
-				msgNum++;
-			}
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_READ, getClass(), LoggingResourceable.wrap(currentMsg));
-		} else if (ForumThreadViewModeController.VIEWMODE_MESSAGE.equals(viewMode)){
-			// single message in thread view, add message and mark as read
-			addMessageToCurrentMessagesAndVC(ureq, m, vcThreadView, currentMessagesMap, 0, marks, stats);
-			// init single thread list and append
-			sttdmodel = new ForumMessagesTableDataModel(userManager, threadMsgs, rms);
-			sttdmodel.setLocale(ureq.getLocale());
-			singleThreadTableCtr.setTableDataModel(sttdmodel);
-			int position = PersistenceHelper.indexOf(threadMsgs, currentMsg);
-			singleThreadTableCtr.setSelectedRowId(position);			
-			vcThreadView.contextPut("showThreadTable", Boolean.TRUE);
-			vcThreadView.put("singleThreadTable", singleThreadTableCtr.getInitialComponent());
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_READ, getClass(), LoggingResourceable.wrap(currentMsg));
-			
-		} else if (ForumThreadViewModeController.VIEWMODE_MARKED.equals(viewMode)) {
-			// marked messages in flat view
-			List<Message> orderedMessages = new ArrayList<Message>();
-						
-			orderedMessages.addAll(threadMsgs);
-			orderedMessages = threadMsgs;
-			Collections.sort(orderedMessages);
-			
-			int msgNum = 0;		
-			for (Message msg:orderedMessages) {
-				// add marked message
-				if(marks.containsKey(msg.getKey().toString())) {
-					addMessageToCurrentMessagesAndVC(ureq, msg, vcThreadView, currentMessagesMap, msgNum, marks, stats);
-					msgNum++;
-				}
-			}
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_READ, getClass(), LoggingResourceable.wrap(currentMsg));
-		} else if (ForumThreadViewModeController.VIEWMODE_NEW.equals(viewMode)) {
-			// new messages in flat view
-			List<Message> orderedMessages = new ArrayList<Message>();
-						
-			orderedMessages.addAll(threadMsgs);
-			orderedMessages = threadMsgs;
-			Collections.sort(orderedMessages);
-			
-			int msgNum = 0;		
-			for (Message msg:orderedMessages) {
-				// add new message
-				if(!rms.contains(msg.getKey())) {
-					addMessageToCurrentMessagesAndVC(ureq, msg, vcThreadView, currentMessagesMap, msgNum, marks, stats);
-					msgNum++;
-				}
-			}
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_READ, getClass(), LoggingResourceable.wrap(currentMsg));
-		} else {
-			//real threaded view with indent
-			vcThreadView.contextPut("threadMode", Boolean.TRUE);
-			List<Message> orderedMessages = new ArrayList<Message>();
-			orderMessagesThreaded(threadMsgs, orderedMessages, (threadTopM == null ? m : threadTopM));
-			// all messages in thread view
-			//Iterator iter = threadMsgs.iterator();
-			Iterator<Message> iter = orderedMessages.iterator();			
-			
-			int msgNum = 0;
-			while (iter.hasNext()) {
-				Message msg = iter.next();
-				// add message and mark as read
-				addMessageToCurrentMessagesAndVC(ureq, msg, vcThreadView, currentMessagesMap, msgNum, marks, stats);
-				msgNum++;
-			}
-			// do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_READ, getClass(), LoggingResourceable.wrap(m));
-		}
-		vcThreadView.contextPut("messages", currentMessagesMap);
-		
-		// Mapper to display thumbnail images of file attachments
-		vcThreadView.contextPut("thumbMapper", thumbMapper);
-		// add security callback
-		vcThreadView.contextPut("security", focallback);
-		vcThreadView.contextPut("mode", viewMode);
-		forumPanel.setContent(vcThreadView);
-	}
-
-	private void scrollToCurrentMessage() {
-		// Scroll to message, but only the first time the view is rendered
-		if (currentMsg.getThreadtop() == null || currentMessagesMap.size() == 1) {
-			vcThreadView.contextPut("goToMessage", Boolean.FALSE);
-		} else {
-			vcThreadView.contextPut("goToMessage", new ConsumableBoolean(true));
-			vcThreadView.contextPut("goToMessageId", currentMsg.getKey());						
-		}
-	}
-	
-	
-	////////////////////////////////////////
-	 // Helper Methods / Classes
-	////////////////////////////////////////
-
-	
-	private void precalcMessageDeepness(List<Message> msgList){
-		msgDeepMap = new HashMap<Long, Integer>(); 
-		for (Message message : msgList) {
-			int deepness = messageDeepness(message, 0);
-			msgDeepMap.put(message.getKey(), deepness);
-		}		
-	}
-	
-	private int messageDeepness(Message msg, int deep){
-		if (deep > 20) return 20;
-		if (msg.getParent()==null) return deep;
-		else {
-			int newDeep = deep + 1;
-			return messageDeepness(msg.getParent(), newDeep);
-		}
-	}
-	
-	
-	private void addMessageToCurrentMessagesAndVC(UserRequest ureq, Message m, VelocityContainer vcContainer, List<Map<String, Object>> allList, int msgCount, Map<String,Mark> marks, Map<String,MarkResourceStat> stats) {
-		// all values belonging to a message are stored in this map
-		// these values can be accessed in velocity. make sure you clean up
-		// everything
-		// you create here in disposeCurrentMessages()!
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("id", m.getKey());
-		
-		if (rms.contains(m.getKey())) {
-			// already read
-			map.put("newMessage", Boolean.FALSE);
-		} else {
-			// mark now as read
-			markRead(m, ureq.getIdentity());
-			map.put("newMessage", Boolean.TRUE);
-		}
-		// add some data now
-		Date creationDate = m.getCreationDate();
-		Identity modifier = m.getModifier();
-		if (modifier != null) {
-			map.put("isModified", Boolean.TRUE);
-			map.put("modfname", modifier.getUser().getProperty(UserConstants.FIRSTNAME, ureq.getLocale()));
-			map.put("modlname", modifier.getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale()));
-		} else {
-			map.put("isModified", Boolean.FALSE);
-		}
-		map.put("title", m.getTitle());
-		map.put("body", m.getBody());
-		map.put("date", f.formatDateAndTime(creationDate));
-		Identity creator = m.getCreator();
-		map.put("creator", creator.getKey());
-		map.put("firstname", Formatter.truncate(creator.getUser().getProperty(UserConstants.FIRSTNAME, ureq.getLocale()),18)); //keeps the first 15 chars
-		map.put("lastname", Formatter.truncate(creator.getUser().getProperty(UserConstants.LASTNAME, ureq.getLocale()),18));
-		map.put("modified", f.formatDateAndTime(m.getLastModified()));
-		// message attachments
-		VFSContainer msgContainer = fm.getMessageContainer(forum.getKey(), m.getKey());
-		map.put("messageContainer", msgContainer);
-		final List<VFSItem> attachments = new ArrayList<VFSItem>(msgContainer.getItems(new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES)));				
-		map.put("attachments", attachments);
-		if (attachments == null || attachments.size() == 0) map.put("hasAttachments", Boolean.FALSE);
-		else map.put("hasAttachments", Boolean.TRUE);
-		// number of children and modify/delete permissions
-		int numOfChildren;
-		numOfChildren = countNumOfChildren(m, threadMsgs);
-		Integer nOfCh = new Integer(numOfChildren);
-		map.put("nOfCh", nOfCh);
-		boolean userIsMsgCreator = getIdentity().getKey().equals(creator.getKey());
-		Boolean uIsMsgC = new Boolean(userIsMsgCreator);
-		map.put("uIsMsgC", uIsMsgC);
-		boolean isThreadtop = m.getThreadtop()==null;
-		map.put("isThreadtop", Boolean.valueOf(isThreadtop));
-		boolean isThreadClosed = Status.getStatus(m.getStatusCode()).isClosed(); 
-		if(!isThreadtop) {
-			isThreadClosed = Status.getStatus(m.getThreadtop().getStatusCode()).isClosed();
-		}
-		map.put("isThreadClosed", isThreadClosed);
-		if(!isGuestOnly(ureq)) {
-		  // add portrait to map for later disposal and key for rendering in velocity
-		  DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(), m.getCreator(), true, true, false, true);
-		  // add also to velocity
-		  map.put("portrait", portrait);
-		  String portraitComponentVCName = m.getKey().toString();
-		  map.put("portraitComponentVCName", portraitComponentVCName);
-		  vcContainer.put(portraitComponentVCName, portrait.getInitialComponent());
-		  // Add link with username that is clickable
-		  String creatorFullName = StringHelper.escapeHtml(UserManager.getInstance().getUserDisplayName(creator));
-		  Link vcLink = LinkFactory.createCustomLink("vc_"+msgCount, "vc_"+msgCount, creatorFullName, Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED, vcThreadView, this);
-		  vcLink.setUserObject(msgCount);
-		  LinkPopupSettings settings = new LinkPopupSettings(800, 600, "_blank");
-		  vcLink.setPopup(settings);
-		}
-		allList.add(map);
-		/*
-		 * those Link objects are used! see event method and the instanceof Link part!
-		 * but reference won't be used!
-		 */
-		Link dlLink = LinkFactory.createCustomLink("dl_"+msgCount, "dl_"+msgCount, "msg.delete", Link.BUTTON_SMALL, vcThreadView, this);
-		dlLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
-		Link edLink = LinkFactory.createCustomLink("ed_"+msgCount, "ed_"+msgCount, "msg.update", Link.BUTTON_SMALL, vcThreadView, this);
-		edLink.setIconLeftCSS("o_icon o_icon-fw o_icon_edit");
-
-		Link qtLink = LinkFactory.createCustomLink("qt_"+msgCount, "qt_"+msgCount, "msg.quote", Link.BUTTON_SMALL, vcThreadView, this);
-		qtLink.setElementCssClass("o_sel_forum_reply_quoted");
-		qtLink.setIconLeftCSS("o_icon o_icon-fw o_icon_reply_with_quote");
-		Link rpLink = LinkFactory.createCustomLink("rp_"+msgCount, "rp_"+msgCount, "msg.reply", Link.BUTTON_SMALL, vcThreadView, this);
-		rpLink.setElementCssClass("o_sel_forum_reply");
-		rpLink.setIconLeftCSS("o_icon o_icon-fw o_icon_reply");
-
-		Link splitLink = LinkFactory.createCustomLink("split_"+msgCount, "split_"+msgCount, "msg.split", Link.LINK, vcThreadView, this);
-		splitLink.setIconLeftCSS("o_icon o_icon-fw o_icon_split");
-		Link moveLink = LinkFactory.createCustomLink("move_"+msgCount, "move_"+msgCount, "msg.move", Link.LINK, vcThreadView, this);
-		moveLink.setIconLeftCSS("o_icon o_icon-fw o_icon_move");
-		
-		String subPath = m.getKey().toString();
-		Mark currentMark = marks.get(subPath);
-		MarkResourceStat stat = stats.get(subPath);
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		
-		if(!ureq.getUserSession().getRoles().isGuestOnly()) {
-			String businessPath = currentMark == null ?
-					getWindowControl().getBusinessControl().getAsString() + "[Message:" + m.getKey() + "]"
-					: currentMark.getBusinessPath();
-			Controller markCtrl = markingService.getMarkController(ureq, getWindowControl(), currentMark, stat, forumOres, subPath, businessPath);
-			vcThreadView.put("mark_"+msgCount, markCtrl.getInitialComponent());
-		}
-		
-		if (uIsMsgC) {
-			OLATResourceable messageOres = OresHelper.createOLATResourceableInstance("Forum", m.getKey());
-			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()) + "[Message:" + m.getKey() + "]";
-			Controller ePFCollCtrl = EPUIFactory.createArtefactCollectWizzardController(ureq, getWindowControl(), messageOres,
-					businessPath);
-			if (ePFCollCtrl != null) {
-				String ePFAddComponentName = "eportfolio_" + msgCount;
-				map.put("ePFCollCtrl", ePFCollCtrl);
-				map.put("ePFAddComponentName", ePFAddComponentName);
-				vcThreadView.put(ePFAddComponentName, ePFCollCtrl.getInitialComponent());
-			}
-		}
-	}
-	
-	private boolean isGuestOnly(UserRequest ureq) {
-    return ureq.getUserSession().getRoles().isGuestOnly();
-  }
-
-	private void disposeCurrentMessages() {
-		if (currentMessagesMap != null) {
-			Iterator<Map<String, Object>> iter = currentMessagesMap.iterator();
-			while (iter.hasNext()) {
-				Map<String, Object> messageMap = iter.next();
-				// cleanup portrait controllers
-				Controller ctr = (Controller) messageMap.get("portrait");
-				 if(ctr!=null) { //ctr could be null for a guest user
-				   ctr.dispose();
-				   vcThreadView.remove(ctr.getInitialComponent());
-				 }
-				// cleanup mark controllers
-				
-				// cleanup ePortfolio controllers
-				Controller ePCtr = (Controller) messageMap.get("ePFCollCtrl");
-				if (ePCtr != null) ePCtr.dispose();				
-			}
-		}
-	}
-
-	private List<Message> prepareListTitles(List<Message> messages) {
-		List<Message> tmpThreadList = new ArrayList<Message>();
-		// extract threads from all messages
-		List<Object[]> threads = new ArrayList<Object[]>();
-		int numTableCols = 8;
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		List<MarkResourceStat> stats = markingService.getMarkManager().getStats(forumOres, null, getIdentity());
-		
-		boolean isModerator = focallback.mayEditMessageAsModerator();	
-		for (Iterator<Message> iter = messages.iterator(); iter.hasNext();) {
-			Message thread = iter.next();
-			if (thread.getParent() == null) {
-				// put all data in a generic object array				
-				Object[] mesgWrapper = new Object[numTableCols];
-				String title = StringEscapeUtils.escapeHtml(thread.getTitle()).toString();
-				title = Formatter.truncate(title, 50);	
-				Status messageStatus = Status.getStatus(thread.getStatusCode());
-				boolean isSticky = messageStatus.isSticky(); 
-				boolean isClosed = messageStatus.isClosed(); 
-				boolean isHidden = messageStatus.isHidden(); 
-				if(isHidden && !isModerator) {
-					continue;
-				}
-				
-				mesgWrapper[0] = "status_thread";
-				if(isSticky && isClosed) {
-					mesgWrapper[0] = "status_sticky_closed";
-				} else if (isSticky) {
-					mesgWrapper[0] = "status_sticky";
-				} else if (isClosed) {
-					mesgWrapper[0] = "status_closed";
-				}								
-				if(isHidden) {
-					title = translate("msg.hidden")  + " " + title;
-				}
-				mesgWrapper[1] = new ForumHelper.MessageWrapper(title,isSticky,collator, f);
-				User creator = thread.getCreator().getUser();
-				mesgWrapper[2] = new ForumHelper.MessageWrapper(userManager.getUserDisplayName(creator),isSticky, collator, f);
-				// find latest date, and number of read messages for all children
-				// init with thread values
-				Date lastModified = thread.getLastModified();
-				int readCounter = (rms.contains(thread.getKey()) ? 1 : 0);
-				int childCounter = 1;
-				int statCounter = 0;
-				String threadSubPath = thread.getKey().toString();
-				for(MarkResourceStat stat:stats) {
-					if(threadSubPath.equals(stat.getSubPath())) {
-						statCounter += stat.getCount();
-					}
-				}
-				
-				for (Iterator<Message> iter2 = messages.iterator(); iter2.hasNext();) {
-					Message msg = iter2.next();
-					if (msg.getThreadtop() != null && msg.getThreadtop().getKey().equals(thread.getKey())) {
-						// a child is found, update values
-						childCounter++;
-						if (rms.contains(msg.getKey())) readCounter++;
-						if (msg.getLastModified().after(lastModified)) lastModified = msg.getLastModified();
-						
-						String subPath = msg.getKey().toString();
-						for(MarkResourceStat stat:stats) {
-							if(subPath.equals(stat.getSubPath())) {
-								statCounter += stat.getCount();
-							}
-						}
-					}
-				}				
-				mesgWrapper[3] = new ForumHelper.MessageWrapper(lastModified,isSticky,collator, f);
-				//lastModified
-				mesgWrapper[4] = new ForumHelper.MessageWrapper(new Integer(statCounter),isSticky,collator, f);
-				//marked
-				mesgWrapper[5] = new ForumHelper.MessageWrapper(new Integer((childCounter - readCounter)),isSticky,collator, f);
-				// unread					
-				mesgWrapper[6] = new ForumHelper.MessageWrapper(new Integer(childCounter),isSticky,collator, f);
-				// add message itself for later usage
-				mesgWrapper[7] = thread;
-				tmpThreadList.add(thread);
-				threads.add(mesgWrapper);
-			}
-		}
-		// build table model
-		attdmodel = new GenericObjectArrayTableDataModel(threads, numTableCols);
-		allThreadTableCtr.setTableDataModel(attdmodel);
-		allThreadTableCtr.setSortColumn(3, false);
-		
-		vcListTitles.put("allThreadTable", allThreadTableCtr.getInitialComponent());
-		vcListTitles.contextPut("hasThreads", (attdmodel.getRowCount() == 0) ? Boolean.FALSE : Boolean.TRUE);
-		
-		return tmpThreadList;
-	}
-
-	/**
-	 * @param m
-	 * @param messages
-	 * @return number of all children, grandchildren, grand-grandchildren etc. of
-	 *         a certain message
-	 */
-	private int countNumOfChildren(Message m, List<Message> messages) {
-		int counter = 0;
-		counter = countChildrenRecursion(m, messages, counter);
-		return counter;
-	}
-
-	private int countChildrenRecursion(Message m, List<Message> messages, int counter) {
-		for (Iterator<Message> iter = messages.iterator(); iter.hasNext();) {
-			Message element = iter.next();
-			if (element.getParent() != null) {
-				if (m.getKey().equals(element.getParent().getKey())) {
-					counter = countChildrenRecursion(element, messages, counter);
-					counter++;
-				}
-			}
-		}
-		return counter;
-	}
-
-	private VFSContainer getArchiveContainer(UserRequest ureq) {
-		VFSContainer container = new OlatRootFolderImpl(FolderConfig.getUserHomes() + File.separator + ureq.getIdentity().getName() + "/private/archive", null);
-    // append export timestamp to avoid overwriting previous export 
-		Date tmp = new Date(System.currentTimeMillis());
-		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH_mm_ss");
-		String folder = "forum_" + forum.getKey().toString()+"_"+formatter.format(tmp);
-		VFSItem vfsItem = container.resolve(folder);
-		if (vfsItem == null || !(vfsItem instanceof VFSContainer)) {
-			vfsItem = container.createChildContainer(folder);
-		}
-		container = (VFSContainer) vfsItem;
-		return container;
-	}
-
-	private void adjustBusinessControlPath(UserRequest ureq, Message m) {
-		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrap(m));
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Message.class,m.getKey());
-		//fxdiff BAKS-7 Resume function
-		WindowControl bwControl = addToHistory(ureq, ores, null);		
-		
-		//Simple way to "register" the new ContextEntry although only a VelocityPage was flipped.
-		Controller dummy = new BasicController(ureq, bwControl) {
-		
-			@Override
-			protected void event(UserRequest ureq, Component source, Event event) {
-			// TODO Auto-generated method stub
-		
-			}
-		
-			@Override
-			protected void doDispose() {
-			// TODO Auto-generated method stub
-		
-			}
-		
-		};
-		dummy.dispose();
-		dummy = null;
-	}
-
-	private Set<Long> getReadSet(Identity s) {
-		// FIXME:fj:c put the whole readset of 1 user / 1 forum in one property
-		// only: 234,45646,2343,23432 etc.
-		// Problem now is that a lot of rows are generated: number of users x
-		// visited messages of all forums = e.g. 5000 x 300 = 1.5 million etc.
-		
-		return ForumManager.getInstance().getReadSet(s, forum);
-	}
-
-	private void markRead(Message m, Identity s) {		
-		if (!rms.contains(m.getKey())) {
-			rms.add(m.getKey());
-		  ForumManager.getInstance().markAsRead(s, m);
-		}
-	}
-	
-	protected void doDispose() {
-		disposeCurrentMessages();
-		CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, forum);
-	}
-
-	/**
-	 * Get the message value map from a velocity command. The command must have
-	 * the signature commandname_messagemapid
-	 * 
-	 * @param identity
-	 * @param command
-	 * @return Map the value map for the current message
-	 */
-	private Map<String, Object> getMessageMapFromCommand(Identity identity, String command) {
-		String cmdId = command.substring(command.lastIndexOf("_") + 1);
-		try {
-			Integer id = Integer.valueOf(cmdId);
-			return currentMessagesMap.get(id.intValue());
-		} catch (NumberFormatException e) {
-			throw new AssertException("Tried to parse forum message id from command::" + command
-					+ " but message id was not a long. Could be a user who tries to hack the system. User::" + identity.getName(), e);
-		}
-	}
-	
-	/**
-	 * Orders the messages in the logical instead of chronological order.
-	 * @param messages
-	 * @param orderedList
-	 * @param startMessage
-	 */	
-	private void orderMessagesThreaded(List<Message> messages, List<Message> orderedList, Message startMessage) {
-	  if(messages==null || orderedList==null || startMessage==null) return;
-	   Iterator<Message> iterMsg = messages.iterator();
-	  while(iterMsg.hasNext())
-	  {
-	   Message msg = iterMsg.next();
-	   if (msg.getParent() == null) 
-	   {  
-	    orderedList.add(msg);     
-	    ArrayList<Message> copiedMessages = new ArrayList<Message>();
-	    copiedMessages.addAll(messages);
-	    copiedMessages.remove(msg);
-	    messages = copiedMessages;
-	    
-	    continue;
-	   }   
-	   if ((msg.getParent() != null) && (msg.getParent().getKey().equals(startMessage.getKey())))
-	   {    
-	    orderedList.add(msg);    
-	    orderMessagesThreaded(messages, orderedList, msg);
-	   }
-	  }
-	 }
-	
-	
-	/**
-	 * Calls splitThread on ForumManager and shows the new thread view.
-	 * @param ureq
-	 */
-	private void splitThread(UserRequest ureq) {
-		if (focallback.mayEditMessageAsModerator()) {
-			Message newTopMessage = fm.splitThread(currentMsg);						
-			showThreadView(ureq,newTopMessage, null);
-      //do logging
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_SPLIT, getClass(), LoggingResourceable.wrap(currentMsg));
-			
-		} else {
-			showWarning("may.not.split.thread");
-		}
-	}
-	
-	/**
-	 * Calls moveMessage on ForumManager
-	 * @param ureq
-	 * @param topMessage
-	 */
-	private void moveMessage(UserRequest ureq, Message topMsg) {
-		if (focallback.mayEditMessageAsModerator()) {
-			currentMsg = fm.moveMessage(currentMsg, topMsg);
-			cmcMoveMsg.deactivate();
-			showThreadView(ureq, topMsg, null);
-			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_MOVE, getClass(), LoggingResourceable.wrap(currentMsg));
-		} else {
-			showWarning("may.not.move.message");
-		}
-	}
-	
-	/**
-	 * Sets the closed status to the threadtop message.
-	 * @param ureq
-	 * @param msg
-	 * @param closed
-	 */
-	private void closeThread(Message msg, boolean closed) {	
-		//if the input message is not the Threadtop get the Threadtop message
-		if(msg != null && msg.getThreadtop()!=null) {
-			msg = msg.getThreadtop();
-		}
-		if (msg != null && msg.getThreadtop()==null) {
-			currentMsg = fm.loadMessage(msg.getKey());
-			Status status = Status.getStatus(currentMsg.getStatusCode());
-			status.setClosed(closed);
-			if (currentMsg.getParent() == null) {
-				currentMsg.setStatusCode(Status.getStatusCode(status));
-				final boolean changeLastModifiedDate = !closed; //OLAT-6295
-				fm.updateMessage(currentMsg, changeLastModifiedDate, new ForumChangedEvent("close"));
-			}
-			// do logging
-			ILoggingAction loggingAction;
-			if (closed)  {
-				loggingAction = ForumLoggingAction.FORUM_THREAD_CLOSE;
-			} else {
-				loggingAction = ForumLoggingAction.FORUM_THREAD_REOPEN;
-			}
-			
-			ThreadLocalUserActivityLogger.log(loggingAction, getClass(), LoggingResourceable.wrap(currentMsg));
-			showThreadOverviewView();
-		}
-	}
-	
-	/**
-	 * Sets the hidden status to the threadtop message.
-	 * @param ureq
-	 * @param msg
-	 * @param hidden
-	 */
-	private void hideThread(Message msg, boolean hidden) {		
-    //if the input message is not the Threadtop get the Threadtop message
-		if(msg != null && msg.getThreadtop()!=null) {
-			msg = msg.getThreadtop();
-		}
-		if (msg != null && msg.getThreadtop()==null) {
-			currentMsg = fm.loadMessage(msg.getKey());
-			Status status = Status.getStatus(currentMsg.getStatusCode());
-			status.setHidden(hidden);
-			if(currentMsg.getParent()==null) {
-			  currentMsg.setStatusCode(Status.getStatusCode(status));
-			  final boolean changeLastModifiedDate = !hidden; //OLAT-6295
-			  fm.updateMessage(currentMsg, changeLastModifiedDate, new ForumChangedEvent("hide"));
-			}
-			// do logging
-			ILoggingAction loggingAction;
-			if (hidden)  {
-				loggingAction = ForumLoggingAction.FORUM_THREAD_HIDE;
-			} else {
-				loggingAction = ForumLoggingAction.FORUM_THREAD_SHOW;
-			}
-			
-			ThreadLocalUserActivityLogger.log(loggingAction, getClass(), LoggingResourceable.wrap(currentMsg));
-			showThreadOverviewView();
-		}
-	}
-				
-	
-	////////////////////////////////////////
-	 // Sticky things
-	////////////////////////////////////////	
-	
-	/**
-	 * 
-	 * Description:<br>
-	 * Tree cell renderer for the sticky thread titles.
-	 * 
-	 * <P>
-	 * Initial Date:  09.07.2007 <br>
-	 * @author Lavinia Dumitrescu
-	 */
-	private static class StickyThreadCellRenderer implements CustomCellRenderer {
-		@Override
-		public void render(final StringOutput sb, final Renderer renderer, final Object val, final Locale locale, final int alignment, final String action) {
-			if(val instanceof ForumHelper.MessageWrapper) {
-				ForumHelper.MessageWrapper messageWrapper = (ForumHelper.MessageWrapper)val;
-				String content = messageWrapper.toString();
-				if (renderer == null) {
-					sb.append(content);
-				} else {
-					sb.append("<span class='");
-					if (messageWrapper.isSticky()) {			
-						sb.append("o_forum_thread_sticky");
-					}
-					sb.append("'>").append(content).append("</span>");			
-				}
-			}
-		}
-	}	
-	
-	/**
-	 * 
-	 * Description:<br>
-	 * <code>ColumnDescriptor</code> with special <code>compareTo</code> method implementation. 
-	 * Allows a special column sorting for MessageWrappers considering the sticky attribute.
-	 * 
-	 * <P>
-	 * Initial Date:  11.07.2007 <br>
-	 * @author Lavinia Dumitrescu
-	 */
-  private class StickyColumnDescriptor extends DefaultColumnDescriptor{		
-		public StickyColumnDescriptor(String headerKey, int dataColumn, String action, Locale locale) {
-			 super(headerKey, dataColumn, action, locale, ColumnDescriptor.ALIGNMENT_LEFT);
-		}
-		/**
-		 * Sole constructor.
-		 * @param headerKey
-		 * @param dataColumn
-		 * @param action
-		 * @param locale used ONLY for method getRenderValue in case the Object is of type Date to provide locale-sensitive Date formatting
-		 * @param alignment left, middle or right; constants in ColumnDescriptor
-		 */
-		public StickyColumnDescriptor(String headerKey, int dataColumn, String action, Locale locale, int alignment) {
-			super(headerKey, dataColumn, action, locale, alignment);
-		}
-		
-		/**
-		 * Delegates comparison to the <code>ForumHelper.compare</code>. In case the <code>ForumHelper.compare</code>
-		 * returns <code>ForumHelper.NOT_MY_JOB</code>, the comparison is executed by the superclass.
-		 * @see org.olat.core.gui.components.table.ColumnDescriptor#compareTo(int, int)
-		 */
-		@Override
-		public int compareTo(int rowa, int rowb) {
-			ForumHelper.MessageWrapper a = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowa,getDataColumn());
-			ForumHelper.MessageWrapper b = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowb,getDataColumn());
-			boolean sortAscending = getTable().isSortAscending();
-
-			int comparisonOutcome = ForumHelper.compare(a,b,sortAscending);
-			if(comparisonOutcome == ForumHelper.NOT_MY_JOB) {
-				comparisonOutcome = super.compareTo(rowa, rowb);
-			}
-			return comparisonOutcome;
-		}	    
-	}
-
-  /**
-   * 
-   * Description:<br>
-   * <code>ColumnDescriptor</code> with special <code>compareTo</code> method implementation for a <code>CustomCellRenderer</code>. 
-	 * Allows a special column sorting for MessageWrappers considering the sticky attribute.
-   * 
-   * <P>
-   * Initial Date:  11.07.2007 <br>
-   * @author Lavinia Dumitrescu
-   */
-  private static class StickyRenderColumnDescriptor extends CustomRenderColumnDescriptor {
-  	
-  	public StickyRenderColumnDescriptor(String headerKey, int dataColumn, String action, Locale locale, int alignment,
-  			CustomCellRenderer customCellRenderer) {
-  		super(headerKey, dataColumn, action, locale, alignment,customCellRenderer);  		
-  	}
-  	
-  		/**
-		 * Delegates comparison to the <code>ForumHelper.compare</code>. In case the <code>ForumHelper.compare</code>
-		 * returns <code>ForumHelper.NOT_MY_JOB</code>, the comparison is executed by the superclass.
-		 * @see org.olat.core.gui.components.table.ColumnDescriptor#compareTo(int, int)
-		 */	
-  		@Override	
-		public int compareTo(int rowa, int rowb) {
-			ForumHelper.MessageWrapper a = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowa,getDataColumn());
-			ForumHelper.MessageWrapper b = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowb,getDataColumn());
-			boolean sortAscending = getTable().isSortAscending();
-
-			int comparisonOutcome = ForumHelper.compare(a,b,sortAscending);
-			if(comparisonOutcome == ForumHelper.NOT_MY_JOB) {
-				comparisonOutcome = super.compareTo(rowa, rowb);
-			}
-			return comparisonOutcome;
-		}				
-  }
-	
-  public class MessageIconRenderer extends CustomCssCellRenderer {
-		@Override
-		protected String getHoverText(Object val) {
-			return NewControllerFactory.translateResourceableTypeName((String)val, getLocale());
-		}
-
-		@Override
-		protected String getCellValue(Object val) {
-			return "";
-		}
-
-		@Override
-		protected String getCssClass(Object val) {
-			// use small icon and create icon class for resource: o_FileResource-SHAREDFOLDER_icon
-			return "o_icon o_forum_" + ((String)val) + "_icon";
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ForumHelper.java b/src/main/java/org/olat/modules/fo/ForumHelper.java
index 3690843e478..31e7e62bf9f 100644
--- a/src/main/java/org/olat/modules/fo/ForumHelper.java
+++ b/src/main/java/org/olat/modules/fo/ForumHelper.java
@@ -25,12 +25,18 @@
 
 package org.olat.modules.fo;
 
-import java.text.Collator;
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.Comparator;
 import java.util.Date;
-import java.util.Locale;
 
-import org.olat.core.util.Formatter;
+import org.olat.core.commons.modules.bc.FolderConfig;
+import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.modules.fo.archiver.MessageNode;
 
 /**
  * 
@@ -46,6 +52,20 @@ public class ForumHelper {
 	public static final String CSS_ICON_CLASS_MESSAGE = "o_forum_message_icon";
 	
 	public static int NOT_MY_JOB = 0;
+	
+	public static final VFSContainer getArchiveContainer(UserRequest ureq, Forum forum) {
+		VFSContainer container = new OlatRootFolderImpl(FolderConfig.getUserHomes() + File.separator + ureq.getIdentity().getName() + "/private/archive", null);
+		// append export timestamp to avoid overwriting previous export 
+		DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH_mm_ss");
+		String folder = "forum_" + forum.getKey().toString()+"_"+formatter.format(new Date());
+		VFSItem vfsItem = container.resolve(folder);
+		if (vfsItem == null || !(vfsItem instanceof VFSContainer)) {
+			vfsItem = container.createChildContainer(folder);
+		}
+		container = (VFSContainer) vfsItem;
+		return container;
+	}
+	
 
 	/**
 	 * Comparators can be passed to a sort method (such as Collections.sort) 
@@ -60,104 +80,8 @@ public class ForumHelper {
 		return new MessageNodeComparator();
 	}
 	
-	/**
-	 * Compares two MessageWrappers. <br>
-	 * If a and b both sticky or if none sticky, let the caller do the sorting (return NOT_MY_JOB),<br> 
-	 * else if a is sticky and sortAscending is true then a less then b (return -1) <br>
-	 * else if b is sticky and sortAscending is true then a greater then b (return 1)<p>
-	 * @param a
-	 * @param b
-	 * @param sortAscending
-	 * @return -1, 1, or NOT_MY_JOB which means the caller has to do the comparison.
-	 */
-	public static int compare(MessageWrapper a, MessageWrapper b, boolean sortAscending) {
-		if (a.isSticky() && b.isSticky()) {
-			return NOT_MY_JOB;
-		} else if (a.isSticky()) {
-			if (sortAscending) return -1;
-			else return 1;
-		} else if (b.isSticky()) {
-			if (sortAscending) return 1;
-			else return -1;
-		} else {
-			return NOT_MY_JOB;
-		}
-	}
-	
-	/**
-	 * Description:<br>
-	 * Wrapper for the table cell values for providing the sticky info
-	 * about a message.
-	 * <P>
-	 * Initial Date: 11.07.2007 <br>
-	 * 
-	 * @author Lavinia Dumitrescu
-	 */
-	protected static class MessageWrapper implements Comparable {	
-		
-		private Comparable value;
-		private boolean sticky;
-		private Collator collator = Collator.getInstance();
-		private Formatter formatter = Formatter.getInstance(Locale.getDefault());
-		
-		public MessageWrapper(Comparable value_, boolean sticky_, Collator collator, Formatter formatter) {
-			value = value_;
-			sticky = sticky_;
-			if (collator != null) {				
-				this.collator = collator;
-			}
-			if (formatter != null) {				
-				this.formatter = formatter;
-			}
-		}
-		
-		/**
-		 * 
-		 * @see java.lang.Object#toString()
-		 */
-		public String toString() {
-			if (value instanceof Date) {
-				return formatter.formatDateAndTime((Date)value);
-			}
-			else return value.toString();
-		}
-
-		public boolean isSticky() {
-			return sticky;
-		}			
-
-		public Comparable getValue() {
-			return value;
-		}
-
-		/**
-		 * 
-		 * @see java.lang.Comparable#compareTo(java.lang.Object)
-		 */
-		public int compareTo(Object o) {	
-			MessageWrapper theOtherMessage = ((MessageWrapper)o);
-			if(getValue() instanceof String) {				
-				return collator.compare(getValue().toString(), theOtherMessage.getValue().toString());
-			}
-			return getValue().compareTo(theOtherMessage.getValue());
-		}
-		
-		/**
-		 * 
-		 * @see java.lang.Object#equals(java.lang.Object)
-		 */
-		public boolean equals(Object obj) {
-			try {
-				MessageWrapper theOther = (MessageWrapper)obj;
-				return getValue().equals(theOther.getValue());
-			} catch(Exception ex) {
-				//nothing to do
-			}
-			return false;
-		}		
-	}
-	
 	private static class MessageNodeComparator implements Comparator<MessageNode> {
+		@Override
 		public int compare(final MessageNode m1, final MessageNode m2) {			
 			if(m1.isSticky() && m2.isSticky()) {
 				return m2.getModifiedDate().compareTo(m1.getModifiedDate()); //last first
diff --git a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml b/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
deleted file mode 100644
index 5e0b21f1ce0..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC 
-        "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-  <class name="org.olat.modules.fo.ForumImpl" table="o_forum">
-  
-    <id name="key" column="forum_id" type="long" unsaved-value="null">
-      <generator class="hilo"/>
-    </id>
-
-	<version name="version" access="field" column="version" type="int"/>
-	<property  name="creationDate" column="creationdate" type="timestamp" />   
- 	
-  </class>  
-</hibernate-mapping>
-
diff --git a/src/main/java/org/olat/modules/fo/ForumImpl.java b/src/main/java/org/olat/modules/fo/ForumImpl.java
deleted file mode 100644
index 1176054bff3..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumImpl.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.modules.fo;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.logging.AssertException;
-import org.olat.core.util.resource.OresHelper;
-/**
- * Implementation of the Forum Interface 
- *
- * @author Felix Jost
- */
-public class ForumImpl extends PersistentObject implements Forum {
-
-	/* (non-Javadoc)
-	 * @see org.olat.core.id.OLATResourceablegetTypeName()
-	 */
-	public String getResourceableTypeName() {
-		//TODO:fj:b: make constant later
-		return OresHelper.calculateTypeName(Forum.class);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.olat.core.id.OLATResourceablegetId()
-	 */
-	public Long getResourceableId() {
-		Long id = getKey();
-		if (id == null) throw new AssertException("getId() must not be called before an id has been generated by the persister");				
-		return id;
-	}
-
-}
diff --git a/src/main/java/org/olat/modules/fo/ForumLoggingAction.java b/src/main/java/org/olat/modules/fo/ForumLoggingAction.java
index f25aa3f597e..9cb78544094 100644
--- a/src/main/java/org/olat/modules/fo/ForumLoggingAction.java
+++ b/src/main/java/org/olat/modules/fo/ForumLoggingAction.java
@@ -51,7 +51,7 @@ import org.olat.core.logging.activity.ResourceableTypeList;
  * Initial Date:  20.10.2009 <br>
  * @author Stefan
  */
-/* package protected */ class ForumLoggingAction extends BaseLoggingAction {
+public class ForumLoggingAction extends BaseLoggingAction {
 
 	public static final ILoggingAction FORUM_MESSAGE_LIST = 
 		new ForumLoggingAction(ActionType.tracking, CrudAction.retrieve, ActionVerb.view, ActionObject.forumthread).setTypeList(
diff --git a/src/main/java/org/olat/modules/fo/ForumManager.java b/src/main/java/org/olat/modules/fo/ForumManager.java
deleted file mode 100644
index 4bcea1c5440..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumManager.java
+++ /dev/null
@@ -1,728 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.modules.fo;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-import javax.persistence.TemporalType;
-
-import org.hibernate.type.StandardBasicTypes;
-import org.hibernate.type.Type;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
-import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.commons.persistence.DBQuery;
-import org.olat.core.commons.services.mark.MarkingService;
-import org.olat.core.commons.services.text.TextService;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSItem;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * 
- * @author Felix Jost
- */
-@Service
-public class ForumManager {
-	private static final OLog log = Tracing.createLoggerFor(ForumManager.class);
-	
-	private static ForumManager INSTANCE;
-	@Autowired
-	private TextService txtService;
-	@Autowired
-	private DB dbInstance;
-
-	/**
-	 * [spring]
-	 */
-	private ForumManager() {
-		INSTANCE = this;
-	}
-
-	/**
-	 * @return the singleton
-	 */
-	public static ForumManager getInstance() {
-		return INSTANCE;
-	}
-	
-	public int countThread(Long msgid) {
-		StringBuilder query = new StringBuilder();
-		query.append("select count(msg) from ").append(MessageImpl.class.getName()).append(" as msg")
-		     .append(" where (msg.key=:messageKey or msg.threadtop.key=:messageKey) ");
-
-		DBQuery dbQuery = DBFactory.getInstance().createQuery(query.toString());
-		dbQuery.setLong("messageKey", msgid);
-		Number totalCount = (Number)dbQuery.uniqueResult();
-		return totalCount.intValue();
-	}
-
-	/**
-	 * @param msgid msg id of the topthread
-	 * @return List messages
-	 */
-	public List<Message> getThread(Long msgid) {
-		return getThread(msgid, 0, -1, Message.OrderBy.creationDate, true); 
-	}
-	
-	public List<Message> getThread(Long msgid, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
-		long rstart = 0;
-		if (log.isDebug()){
-			rstart = System.currentTimeMillis();
-		}
-		
-		StringBuilder query = new StringBuilder();
-		query.append("select msg from ").append(MessageImpl.class.getName()).append(" as msg")
-		     .append(" inner join fetch msg.creator as creator")
-		     .append(" where (msg.key=:messageKey or msg.threadtop.key=:messageKey) ");
-		if(orderBy != null) {
-			query.append(" order by msg.").append(orderBy.name()).append(asc ? " ASC " : " DESC ");
-		}
-		
-		DBQuery dbQuery = DBFactory.getInstance().createQuery(query.toString());
-		dbQuery.setLong("messageKey", msgid);
-		dbQuery.setFirstResult(firstResult);
-		if(maxResults > 0) {
-			dbQuery.setMaxResults(maxResults);
-		}
-		
-		List<Message> messages = dbQuery.list();
-		if (log.isDebug()){
-			long rstop = System.currentTimeMillis();
-			log.debug("time to fetch thread with topmsg_id " + msgid + " :" + (rstop - rstart), null);
-		}
-		return messages;
-	}
-
-	public List<Long> getAllForumKeys(){
-		List<Long> tmpRes = DBFactory.getInstance().find("select key from org.olat.modules.fo.ForumImpl");
-		return tmpRes;
-	}
-
-	/**
-	 * 
-	 * @param forum_id
-	 * @return
-	 */
-	public int countThreadsByForumID(Long forum_id) {
-		return countMessagesByForumID(forum_id, true);
-	}
-	
-	/**
-	 * 
-	 * @param forum_id
-	 * @param start
-	 * @param limit
-	 * @param orderBy
-	 * @param asc
-	 * @return
-	 */
-	public List<Message> getThreadsByForumID(Long forum_id, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
-		return getMessagesByForumID(forum_id, firstResult, maxResults, true, orderBy, asc);
-	}
-	
-	/**
-	 * 
-	 * @param forum
-	 * @return
-	 */
-	public List<Message> getMessagesByForum(Forum forum){
-		if (forum == null) return new ArrayList<Message>(0); // fxdiff: while indexing it can somehow occur, that forum is null!
-		return getMessagesByForumID(forum.getKey(),  0, -1, null, true);
-	}
-	
-	/**
-	 * @param forum
-	 * @return List messages
-	 */
-	public List<Message> getMessagesByForumID(Long forum_id) {
-		return getMessagesByForumID(forum_id, 0, -1, false, null, true);
-	}
-	
-	/**
-	 * 
-	 * @param forum_id
-	 * @param start
-	 * @param limit
-	 * @param orderBy
-	 * @param asc
-	 * @return
-	 */
-	public List<Message> getMessagesByForumID(Long forum_id, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
-		return getMessagesByForumID(forum_id, firstResult, maxResults, false, orderBy, asc);
-	}
-	
-	/**
-	 * 
-	 * @param forum_id
-	 * @param start
-	 * @param limit
-	 * @param onlyThreads
-	 * @param orderBy
-	 * @param asc
-	 * @return
-	 */
-	private List<Message> getMessagesByForumID(Long forum_id, int firstResult, int maxResults, boolean onlyThreads, Message.OrderBy orderBy, boolean asc) {
-		long rstart = 0;
-		if(log.isDebug()){
-			rstart = System.currentTimeMillis();
-		}
-		
-		StringBuilder query = new StringBuilder();
-		query.append("select msg from ").append(MessageImpl.class.getName()).append(" as msg")
-		     .append(" inner join fetch msg.creator as creator")
-		     .append(" where msg.forum.key=:forumId ");
-		if(onlyThreads) {
-			query.append(" and msg.parent is null");
-		}
-		if(orderBy != null) {
-			query.append(" order by msg.").append(orderBy.name()).append(asc ? " ASC" : " DESC");
-		}
-		
-		DBQuery dbQuery = DBFactory.getInstance().createQuery(query.toString());
-		dbQuery.setLong("forumId", forum_id);
-		dbQuery.setFirstResult(firstResult);
-		if(maxResults > 0) {
-			dbQuery.setMaxResults(maxResults);
-		}
-		
-		List<Message> messages = dbQuery.list();
-		if(log.isDebug()){
-			long rstop = System.currentTimeMillis();
-			log.debug("time to fetch forum with forum_id " + forum_id + " :" + (rstop - rstart), null);
-		}
-		return messages;
-	}
-	
-	private int countMessagesByForumID(Long forumId, boolean onlyThreads) {
-		StringBuilder query = new StringBuilder();
-		query.append("select count(msg) from ").append(MessageImpl.class.getName()).append(" as msg")
-		     .append(" where msg.forum.key=:forumId ");
-		if(onlyThreads) {
-			query.append(" and msg.parent is null");
-		}
-		
-		return dbInstance.getCurrentEntityManager()
-				.createQuery(query.toString(), Number.class)
-				.setParameter("forumId", forumId)
-				.getSingleResult()
-				.intValue();
-	}
-	
-	/**
-	 * 
-	 * @param forumkey
-	 * @return the count of all messages by this forum
-	 */
-	public Integer countMessagesByForumID(Long forum_id) {
-		return countMessagesByForumID(forum_id, false);
-	}
-	
-	/**
-	 * Implementation with one entry per message.
-	 * @param identity
-	 * @param forumkey
-	 * @return number of read messages
-	 */
-	public int countReadMessagesByUserAndForum(Identity identity, Long forumkey) {
-		StringBuilder query = new StringBuilder();
-		query.append("select count(msg) from ").append(ReadMessageImpl.class.getName()).append(" as msg ")
-		     .append(" where msg.identity=:ident and msg.forum=:forumId");
-
-		DBQuery dbQuery = DBFactory.getInstance().createQuery(query.toString());
-		dbQuery.setLong("forumId", forumkey);
-		dbQuery.setLong("ident", identity.getKey());
-
-		return ((Number)dbQuery.uniqueResult()).intValue();
-	}
-
-	/**
-	 * @param forumKey
-	 * @param latestRead
-	 * @return a List of Object[] with a key(Long), title(String), a creator(Identity), and
-	 *         the lastmodified(Date) of the messages of the forum with the given
-	 *         key and with last modification after the "latestRead" Date
-	 */
-	public List<Message> getNewMessageInfo(Long forumKey, Date latestRead) {
-		// FIXME:fj: lastModified has no index -> test performance with forum with
-		// 200 messages
-		StringBuilder query = new StringBuilder();
-		query.append("select msg from ").append(MessageImpl.class.getName()).append(" as msg ")
-		     .append(" inner join fetch msg.creator as creator")
-		     .append(" where msg.forum.key =:forumKey and msg.lastModified>:latestRead order by msg.lastModified desc");
-
-		return DBFactory.getInstance().getCurrentEntityManager()
-				.createQuery(query.toString(), Message.class)
-				.setParameter("forumKey", forumKey.longValue())
-				.setParameter("latestRead", latestRead, TemporalType.TIMESTAMP)
-				.getResultList();
-	}
-
-	/**
-	 * @return the newly created and persisted forum
-	 */
-	public Forum addAForum() {
-		Forum fo = createForum();
-		saveForum(fo);
-		return fo;
-	}
-
-	/**
-	 * @param forumKey
-	 * @return the forum with the given key
-	 */
-	public Forum loadForum(Long forumKey) {
-		ForumImpl fo = DBFactory.getInstance().loadObject(ForumImpl.class, forumKey);
-		return fo;
-	}
-
-	private Forum saveForum(Forum forum) {
-		DB db = DBFactory.getInstance();
-		db.saveObject(forum);
-		return forum;
-	}
-
-	/**
-	 * @param forumKey
-	 */
-	public void deleteForum(Long forumKey) {
-		Forum foToDel = loadForum(forumKey);
-		if (foToDel == null) throw new AssertException("forum to delete was not found: key=" + forumKey);
-		// delete properties, messages and the forum itself
-		doDeleteForum(foToDel);
-		// delete directory for messages with attachments
-		deleteForumContainer(forumKey);
-	}
-
-	/**
-	 * deletes all messages belonging to this forum and the forum entry itself
-	 * 
-	 * @param forum
-	 */
-	private void doDeleteForum(final Forum forum) {
-		Long forumKey = forum.getKey();
-		DB db = DBFactory.getInstance();
-		//delete read messsages
-		db.delete("from readMsg in class org.olat.modules.fo.ReadMessageImpl where readMsg.forum = ? ", forumKey, StandardBasicTypes.LONG);
-		// delete messages
-		db.delete("from message in class org.olat.modules.fo.MessageImpl where message.forum = ?", forumKey, StandardBasicTypes.LONG);
-		// delete forum
-		db.delete("from forum in class org.olat.modules.fo.ForumImpl where forum.key = ?", forumKey, StandardBasicTypes.LONG);
-		// delete properties
-		
-		//delete all flags
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forum.getKey());
-		markingService.getMarkManager().deleteMarks(ores);
-	}
-
-	/**
-	 * create (in RAM only) a new Forum
-	 */
-	private ForumImpl createForum() {
-		return new ForumImpl();
-	}
-
-	/**
-	 * sets the parent and threadtop of the message automatically
-	 * 
-	 * @param newMessage the new message which has title and body set
-	 * @param creator
-	 * @param replyToMessage
-	 */
-	public void replyToMessage(Message newMessage, Identity creator, Message replyToMessage) {
-		newMessage.setForum(replyToMessage.getForum());
-		Message top = replyToMessage.getThreadtop();
-		newMessage.setThreadtop((top != null ? top : replyToMessage));
-		newMessage.setParent(replyToMessage);
-		newMessage.setCreator(creator);
-		saveMessage(newMessage);
-	}
-
-	/**
-	 * @param creator
-	 * @param forum
-	 * @param topMessage
-	 */
-	public void addTopMessage(Identity creator, Forum forum, Message topMessage) {
-		topMessage.setForum(forum);
-		topMessage.setParent(null);
-		topMessage.setThreadtop(null);
-		topMessage.setCreator(creator);
-
-		saveMessage(topMessage);
-	}
-
-	/**
-	 * @param messageKey
-	 * @return the message with the given messageKey
-	 */
-	public Message loadMessage(Long messageKey) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select msg from ").append(MessageImpl.class.getName()).append(" msg where msg.key=:messageKey");
-		List<Message> messages = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), Message.class)
-				.setParameter("messageKey", messageKey)
-				.getResultList();
-		return messages == null || messages.isEmpty() ? null : messages.get(0);
-	}
-
-	private void saveMessage(Message m) {
-		// TODO: think about where maxlenrestriction comes: manager or controller
-		updateCounters(m);
-		m.setLastModified(new Date());
-		DBFactory.getInstance().saveObject(m);
-	}
-
-	/**
-	 * creates (in RAM only) a new Message<br>
-	 * fill the values and use saveMessage to make it persistent
-	 * 
-	 * @return the message
-	 * @see ForumManager#saveMessage(Message)
-	 */
-	public Message createMessage() {
-		return new MessageImpl();
-	}
-
-	/**
-	 * Update message and fire MultiUserEvent, if any provided. If a not null
-	 * ForumChangedEvent object is provided, then fire event to listeners.
-	 * 
-	 * @param m
-	 * @param updateLastModifiedDate
-	 *            true: the last modified date is updated to trigger a
-	 *            notification; false: last modified date is not modified and no
-	 *            notification is sent
-	 * @param event
-	 */
-	public void updateMessage(final Message m, final boolean updateLastModifiedDate, final ForumChangedEvent event) {
-		updateCounters(m);
-		// OLAT-6295 Only update last modified for the operations edit(update), show, and open. 
-		// Don't update the last modified date for the operations close, hide, move and split.
-		if (updateLastModifiedDate) {
-			m.setLastModified(new Date());
-		}
-		DBFactory.getInstance().updateObject(m);
-		if (event!=null) {
-	    CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new ForumChangedEvent("hide"), m.getForum());	   
-		}
-	}
-
-	/**
-	 * @param forumKey
-	 * @param m
-	 */
-	public void deleteMessageTree(Long forumKey, Message m) {
-		deleteMessageRecursion(forumKey, m);
-	}
-
-	private void deleteMessageRecursion(final Long forumKey, Message m) {
-		deleteMessageContainer(forumKey, m.getKey());
-		DB db = DBFactory.getInstance();
-		Long message_id = m.getKey();
-		List messages = db
-				.find("select msg from msg in class org.olat.modules.fo.MessageImpl where msg.parent = ?", message_id, StandardBasicTypes.LONG);
-
-		for (Iterator iter = messages.iterator(); iter.hasNext();) {
-			Message element = (Message) iter.next();
-			deleteMessageRecursion(forumKey, element);
-		}
-
-		/*
-		 * if (! db.contains(m)){ log.debug("Message " + m.getKey() + " not in
-		 * hibernate session, reloading before delete"); m =
-		 * loadMessage(m.getKey()); }
-		 */
-		// make sure the message is reloaded if it is not in the hibernate session
-		// cache
-		m = (Message) db.loadObject(m);
-    // delete all properties of one single message
-		deleteMessageProperties(forumKey, m);
-		db.deleteObject(m);
-		
-		//delete all flags
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forumKey);
-		markingService.getMarkManager().deleteMarks(ores, m.getKey().toString());
-		
-		if(log.isDebug()){
-			log.debug("Deleting message ", m.getKey().toString());
-		}
-	}
-
-	/**
-	 * @param m
-	 * @return true if the message has children
-	 */
-	public boolean hasChildren(Message m) {
-		boolean children = false;
-		DB db = DBFactory.getInstance();
-		Long message_id = m.getKey();
-		String q = " select count(msg) from org.olat.modules.fo.MessageImpl msg where msg.parent = :input ";
-
-		DBQuery query = db.createQuery(q);
-		query.setLong("input", message_id.longValue());
-		List result = query.list();
-		int count = ((Long) result.get(0)).intValue();
-
-		if (count > 0) {
-			children = true;
-		}
-
-		return children;
-	}
-
-	/**
-	 * deletes entry of one message
-	 */
-	private void deleteMessageProperties(Long forumKey, Message m) {
-		DB db = DBFactory.getInstance();
-		Long messageKey = m.getKey();
-
-		StringBuilder query = new StringBuilder();		
-		query.append("from readMsg in class org.olat.modules.fo.ReadMessageImpl ");
-		query.append("where readMsg.forum = ? ");
-		query.append("and readMsg.message = ? ");
-
-		db.delete(query.toString(), new Object[] { forumKey, messageKey }, new Type[] { StandardBasicTypes.LONG, StandardBasicTypes.LONG });
-	}
-
-	/**
-	 * @param forumKey
-	 * @param messageKey
-	 * @return the valid container for the attachments to place into
-	 */
-	public VFSContainer getMessageContainer(Long forumKey, Long messageKey) {
-		VFSContainer forumContainer = getForumContainer(forumKey);
-		VFSItem messageContainer = forumContainer.resolve(messageKey.toString());
-		if(messageContainer == null) {
-			return forumContainer.createChildContainer(messageKey.toString());
-		} else if(messageContainer instanceof VFSContainer) {
-			return (VFSContainer)messageContainer;
-		}
-		log.error("The following message container is not a directory: " + messageContainer);
-		return null;
-	}
-	
-	private void moveMessageContainer(Long fromForumKey, Long fromMessageKey, Long toForumKey, Long toMessageKey) {
-		// copy message container
-		VFSContainer toMessageContainer = getMessageContainer(toForumKey, toMessageKey);
-		VFSContainer fromMessageContainer = getMessageContainer(fromForumKey, fromMessageKey);
-		for (VFSItem vfsItem : fromMessageContainer.getItems()) {
-			toMessageContainer.copyFrom(vfsItem);
-		}
-	}
-
-	private void deleteMessageContainer(Long forumKey, Long messageKey) {
-		VFSContainer mContainer = getMessageContainer(forumKey, messageKey);
-		mContainer.delete();
-	}
-
-	private void deleteForumContainer(Long forumKey) {
-		VFSContainer fContainer = getForumContainer(forumKey);
-		fContainer.delete();
-	}
-
-	private VFSContainer getForumContainer(Long forumKey) {
-		OlatRootFolderImpl fContainer = new OlatRootFolderImpl("/forum", null);
-		VFSItem forumContainer = fContainer.resolve(forumKey.toString());
-		if(forumContainer == null) {
-			return fContainer.createChildContainer(forumKey.toString());
-		} else if(forumContainer instanceof VFSContainer) {
-			return (VFSContainer)forumContainer;
-		}
-		log.error("The following forum container is not a directory: " + forumContainer);
-		return null;
-	}
-	
-	/**
-	 * Splits the current thread starting from the current message.
-	 * It updates the messages of the selected subthread by setting the Parent and the Threadtop.
-	 * 
-	 * @param msgid
-	 * @return the top message of the newly created thread.
-	 */
-	public Message splitThread(Message msg){
-		Message newTopMessage = null;
-		if(msg.getThreadtop()==null) {
-			newTopMessage = msg;
-		} else {	
-		//it only make sense to split a thread if the current message is not a threadtop message.	
-		List<Message> threadList = this.getThread(msg.getThreadtop().getKey());
-			List<Message> subthreadList = new ArrayList<Message>();
-			subthreadList.add(msg);
-			getSubthread(msg, threadList, subthreadList);
-
-			Iterator<Message> messageIterator = subthreadList.iterator();
-			Message firstMessage = null;
-			final DB db = DBFactory.getInstance();
-			final boolean changeLastModifiedDate = false; // OLAT-6295
-			if (messageIterator.hasNext()) {
-				firstMessage = messageIterator.next();
-				firstMessage = (Message) db.loadObject(firstMessage);
-				firstMessage.setParent(null);
-				firstMessage.setThreadtop(null);
-				this.updateMessage(firstMessage, changeLastModifiedDate, new ForumChangedEvent("split"));
-				newTopMessage = firstMessage;
-			}
-			while (firstMessage != null && messageIterator.hasNext()) {
-				Message message = messageIterator.next();
-				message = (Message) db.loadObject(message);
-				message.setThreadtop(firstMessage);
-				this.updateMessage(message, changeLastModifiedDate, null);
-			}	
-		}		
-		return newTopMessage;
-	}
-	
-	/**
-	 * Moves the current message from the current thread in another thread.
-	 * 
-	 * @param msg
-	 * @param topMsg
-	 * @return the moved message
-	 */
-	public Message moveMessage(Message msg, Message topMsg) {
-		DB db = DBFactory.getInstance();
-		List<Message> oldThreadList = getThread(msg.getThreadtop().getKey());
-		List<Message> subThreadList = new ArrayList<Message>();
-		this.getSubthread(msg, oldThreadList, subThreadList);
-		// one has to set a new parent for all childs of the moved message
-		// first message of sublist has to get the parent from the moved message
-		final boolean changeLastModifiedDate = false; // OLAT-6295
-		for (Message childMessage : subThreadList) {
-			childMessage = (Message) db.loadObject(childMessage);
-			childMessage.setParent(msg.getParent());
-			updateMessage(childMessage, changeLastModifiedDate, null);
-		}
-		// now move the message to the choosen thread
-		final Message oldMessage = (Message) db.loadObject(msg);
-		Message message = createMessage();
-		message.setCreator(oldMessage.getCreator());
-		message.setForum(oldMessage.getForum());
-		message.setModifier(oldMessage.getModifier());
-		message.setLastModified(oldMessage.getLastModified()); // OLAT-6295
-		message.setTitle(oldMessage.getTitle());
-		message.setBody(oldMessage.getBody());
-		message.setThreadtop(topMsg);
-		message.setParent(topMsg);
-		Status status = Status.getStatus(oldMessage.getStatusCode());
-		status.setMoved(true);
-		message.setStatusCode(Status.getStatusCode(status));
-		saveMessage(message);
-		
-		//move marks
-		MarkingService markingService = (MarkingService)CoreSpringFactory.getBean(MarkingService.class);
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, msg.getForum().getKey());
-		markingService.getMarkManager().moveMarks(ores, msg.getKey().toString(), message.getKey().toString());
-		
-		moveMessageContainer(oldMessage.getForum().getKey(), oldMessage.getKey(), message.getForum().getKey(), message.getKey());
-		deleteMessageRecursion(oldMessage.getForum().getKey(), oldMessage);
-		return message;
-	}
-	
-	/**
-	 * This is a recursive method. The subthreadList in an ordered list with all descendents of the input msg.
-	 * @param msg
-	 * @param threadList
-	 * @param subthreadList
-	 */
-	private void getSubthread(Message msg, List<Message> threadList, List<Message> subthreadList) {		
-		Iterator<Message> listIterator = threadList.iterator();
-		while(listIterator.hasNext()) {
-			Message currMessage = listIterator.next();
-			if(currMessage.getParent()!=null && currMessage.getParent().getKey().equals(msg.getKey())) {
-				subthreadList.add(currMessage);				
-				getSubthread(currMessage, threadList, subthreadList);
-			}
-		}		
-	}
-	
-	/**
-	 * 
-	 * @param identity
-	 * @param forum
-	 * @return a set with the read messages keys for the input identity and forum.  
-	 */
-	public Set<Long> getReadSet(Identity identity, Forum forum) {	
-		StringBuilder query = new StringBuilder();
-		query.append("select rmsg.message.key from ").append(ReadMessageImpl.class.getName()).append(" as rmsg")
-		     .append(" inner join rmsg.message as msg")
-		     .append(" where msg.forum.key=:forumId and rmsg.identity.key=:ident");
-
-		DBQuery dbQuery = DBFactory.getInstance().createQuery(query.toString());
-		dbQuery.setLong("forumId", forum.getKey());
-		dbQuery.setLong("ident", identity.getKey());
-		List<Long> messageKeys = dbQuery.list();
-		return new HashSet<Long>(messageKeys);	
-	}
-	
-	/**
-	 * Implementation with one entry per forum message.
-	 * Adds a new entry into the ReadMessage for the input message and identity.
-	 * @param msg
-	 * @param identity
-	 */
-	public void markAsRead(Identity identity,Message msg) {		
-		//Check if the message was not already deleted
-		Message retrievedMessage = loadMessage(msg.getKey());
-		if(retrievedMessage!=null) {
-			ReadMessageImpl readMessage = new ReadMessageImpl();
-			readMessage.setIdentity(identity);
-			readMessage.setMessage(msg);
-			readMessage.setForum(msg.getForum());
-		  DBFactory.getInstance().saveObject(readMessage);
-		}		
-	}
-	
-	/**
-	 * Update the counters for words and characters
-	 * @param m the message
-	 */
-	public void updateCounters(Message m) {
-		String body = m.getBody();
-		String unQuotedBody = new QuoteAndTagFilter().filter(body);
-		Locale suggestedLocale = txtService.detectLocale(unQuotedBody);
-		m.setNumOfWords(txtService.wordCount(unQuotedBody, suggestedLocale));
-		m.setNumOfCharacters(txtService.characterCount(unQuotedBody, suggestedLocale));
-	}
-}
diff --git a/src/main/java/org/olat/modules/fo/ForumMessagesTableDataModel.java b/src/main/java/org/olat/modules/fo/ForumMessagesTableDataModel.java
deleted file mode 100644
index 67d79d45d67..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumMessagesTableDataModel.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.modules.fo;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import org.olat.core.gui.components.table.DefaultTableDataModel;
-import org.olat.user.UserManager;
-
-/**
-* @author Felix Jost
-*/
-public class ForumMessagesTableDataModel extends DefaultTableDataModel<Message> {
-
-	private Set<Long> readMsgs;
-	private UserManager userManager;
-
-	public ForumMessagesTableDataModel(UserManager userManager, List<Message> objects, Set<Long> readMsgs) {
-		super(objects);
-		this.readMsgs = readMsgs;
-		this.userManager = userManager;
-	}
-
-	public int getColumnCount() {
-		return 4;
-	}
-
-	/**
-	 * 4 columns: 
-	 * first is the title of the message
-	 * second the (name, firstname) of the creator
-	 * third lastModifiedDate
-	 * fourth if it is new or not
-	 */
-	public final Object getValueAt(int row, int col) {
-		Message m= getObject(row);
-		switch (col) {
-			case 0 :
-				String title = m.getTitle();
-				return title;
-			case 1 :
-				return userManager.getUserDisplayName(m.getCreator().getUser());
-			case 2 :
-				Date mod = m.getLastModified();
-				return mod;
-			case 3: // return if we have read this message before or not
-				return ( readMsgs.contains(m.getKey())? Boolean.TRUE : Boolean.FALSE );
-			default :
-				return "error";
-		}
-	}
-}
-	
diff --git a/src/main/java/org/olat/modules/fo/ForumModule.java b/src/main/java/org/olat/modules/fo/ForumModule.java
new file mode 100644
index 00000000000..e9779a02ecc
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ForumModule.java
@@ -0,0 +1,97 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo;
+
+import org.olat.core.configuration.AbstractSpringModule;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.coordinate.CoordinatorManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service("forumModule")
+public class ForumModule extends AbstractSpringModule {
+	
+	@Value("${forum.anonymous.posting.enabled:disabled}")
+	private String anonymousPostingWithPseudonymEnabled;
+	@Value("${forum.course.default:disabled}")
+	private String courseForumDefault;
+	@Value("${forum.group.default:disabled}")
+	private String groupForumDefault;
+	
+	@Autowired
+	public ForumModule(CoordinatorManager coordinatorManager) {
+		super(coordinatorManager);
+	}
+
+	@Override
+	public void init() {
+		initFromChangedProperties();
+	}
+
+	@Override
+	protected void initFromChangedProperties() {
+		String anonymousPostingObj = getStringPropertyValue("forum.anonymous.posting.enabled", true);
+		if(StringHelper.containsNonWhitespace(anonymousPostingObj)) {
+			anonymousPostingWithPseudonymEnabled = anonymousPostingObj;
+		}
+		String courseDefaultObj = getStringPropertyValue("forum.course.default", true);
+		if(StringHelper.containsNonWhitespace(courseDefaultObj)) {
+			courseForumDefault = courseDefaultObj;
+		}
+		String groupDefaultObj = getStringPropertyValue("forum.group.default", true);
+		if(StringHelper.containsNonWhitespace(groupDefaultObj)) {
+			groupForumDefault = groupDefaultObj;
+		}
+	}
+	
+	public boolean isAnonymousPostingWithPseudonymEnabled() {
+		return "enabled".equals(anonymousPostingWithPseudonymEnabled);
+	}
+	
+	public void setAnonymousPostingWithPseudonymEnabled(boolean enabled) {
+		anonymousPostingWithPseudonymEnabled = enabled ? "enabled" : "disabled";
+		setStringProperty("forum.anonymous.posting.enabled", enabled ? "enabled" : "disabled", true);
+	}
+	
+	public boolean isPseudonymForCourseEnabledByDefault() {
+		return "enabled".equals(courseForumDefault);
+	}
+	
+	public void setPseudonymForCourseEnabledByDefault(boolean enabled) {
+		courseForumDefault = enabled ? "enabled" : "disabled";
+		setStringProperty("forum.course.default", enabled ? "enabled" : "disabled", true);
+	}
+	
+	public boolean isPseudonymForGroupEnabledByDefault() {
+		return "enabled".equals(groupForumDefault);
+	}
+	
+	public void setPseudonymForGroupEnabledByDefault(boolean enabled) {
+		groupForumDefault = enabled ? "enabled" : "disabled";
+		setStringProperty("forum.group.default", enabled ? "enabled" : "disabled", true);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
index 1cb40fc2fd1..61ba5102e0e 100644
--- a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
+++ b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
@@ -48,6 +48,7 @@ import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryManager;
 
 /**
diff --git a/src/main/java/org/olat/modules/fo/ForumThreadViewModeController.java b/src/main/java/org/olat/modules/fo/ForumThreadViewModeController.java
deleted file mode 100644
index 3ab1d2820a9..00000000000
--- a/src/main/java/org/olat/modules/fo/ForumThreadViewModeController.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.modules.fo;
-
-import java.util.Arrays;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.form.flexible.FormItem;
-import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.logging.AssertException;
-import org.olat.core.util.prefs.Preferences;
-
-/**
- * Description:<br>
- * Provides a Switch for all supported forum-view-modes and fires Event to ForumController.
- * 
- * <P>
- * Initial Date: 25.06.2009 <br>
- * 
- * @author Roman Haag, roman.haag@frentix.com, frentix GmbH
- */
-public class ForumThreadViewModeController extends FormBasicController {
-	protected static final String VIEWMODE_THREAD = "thread";
-	protected static final String VIEWMODE_FLAT = "flat";
-	protected static final String VIEWMODE_MESSAGE = "message";
-	protected static final String VIEWMODE_MARKED = "marked";
-	protected static final String VIEWMODE_NEW = "new";
-	
-	private static final String[] viewKeys = new String[] { VIEWMODE_THREAD, VIEWMODE_FLAT, VIEWMODE_MESSAGE, VIEWMODE_MARKED, VIEWMODE_NEW };
-	private static final String GUI_PREFS_VIEWMODE_KEY = "forum.threadview.mode";
-
-	private SingleSelection viewRadio;
-	private final String startingViewMode;
-
-	/**
-	 * @param ureq
-	 * @param control
-	 */
-	public ForumThreadViewModeController(UserRequest ureq, WindowControl control, String startingViewMode) {
-		super(ureq, control);
-		setFormStyle("o_forum_switch");
-		this.startingViewMode = startingViewMode;
-		initForm(ureq);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-	// nothing
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void formOK(UserRequest ureq) {
-	// nothing to do, handled with innerEvents
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
-	 */
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		String[] viewValues = new String[] { translate("viewswitch.threadview"), translate("viewswitch.flatview"),
-				translate("viewswitch.messageview"), translate("viewswitch.marked"), translate("viewswitch.new") };
-		viewRadio = uifactory.addRadiosHorizontal("viewswitch.title", formLayout, viewKeys, viewValues);
-		viewRadio.addActionListener(FormEvent.ONCLICK);
-		// preselect according to user-settings
-
-		if(startingViewMode == null) {
-			viewRadio.select(getThreadViewMode(ureq), true);
-		} else {
-			viewRadio.select(startingViewMode, true);
-		}
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == viewRadio){
-			String newViewMode = viewRadio.getSelectedKey();
-			if (Arrays.asList(viewKeys).contains(newViewMode)){
-				saveThreadViewModePrefs(ureq, newViewMode);
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			} else throw new AssertException("ForumViewController doesn't support this view-mode.");
-		}
-	}
-
-	private void saveThreadViewModePrefs(UserRequest ureq, String viewMode){
-		if(viewMode.equals(VIEWMODE_THREAD) || viewMode.equals(VIEWMODE_FLAT) || viewMode.equals(VIEWMODE_MESSAGE)){
-			Preferences prefs = ureq.getUserSession().getGuiPreferences();
-			prefs.putAndSave(this.getClass(), GUI_PREFS_VIEWMODE_KEY, viewMode);
-		}
-	}
-	
-	public String getSelectedViewMode() {
-		if(viewRadio == null) return null;
-		return viewRadio.getSelectedKey();
-	}
-	
-	// TODO:RH:forum: move this to upgrade code or to manager, to migrate settings, or kill
-	// them all???
-	public String getThreadViewMode(UserRequest ureq){
-		Preferences prefs = ureq.getUserSession().getGuiPreferences();		
-		// migrate old settings, keep appropriate to new possibilities
-		Boolean threadview = (Boolean) prefs.get(ForumController.class, ForumController.GUI_PREFS_THREADVIEW_KEY);
-		if (threadview != null) {
-			// remove old pref
-			prefs.putAndSave(ForumController.class, ForumController.GUI_PREFS_THREADVIEW_KEY, null);
-			if (threadview) {
-				prefs.putAndSave(this.getClass(), GUI_PREFS_VIEWMODE_KEY, VIEWMODE_FLAT);
-				return VIEWMODE_FLAT;
-			} else {
-				prefs.putAndSave(this.getClass(), GUI_PREFS_VIEWMODE_KEY, VIEWMODE_MESSAGE);
-				return VIEWMODE_MESSAGE;
-			}
-		}		
-		return (String) prefs.get(this.getClass(), GUI_PREFS_VIEWMODE_KEY, VIEWMODE_THREAD);
-	}
-}
diff --git a/src/main/java/org/olat/modules/fo/ForumUIFactory.java b/src/main/java/org/olat/modules/fo/ForumUIFactory.java
index 2a0dd63ddbf..0e9ed885622 100644
--- a/src/main/java/org/olat/modules/fo/ForumUIFactory.java
+++ b/src/main/java/org/olat/modules/fo/ForumUIFactory.java
@@ -35,6 +35,7 @@ import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
 import org.olat.core.gui.control.generic.title.TitleInfo;
 import org.olat.core.gui.control.generic.title.TitledWrapperController;
 import org.olat.core.util.StringHelper;
+import org.olat.modules.fo.ui.ForumController;
 
 
 /**
diff --git a/src/main/java/org/olat/modules/fo/Message.java b/src/main/java/org/olat/modules/fo/Message.java
index 6b89e19e10a..e4524534201 100644
--- a/src/main/java/org/olat/modules/fo/Message.java
+++ b/src/main/java/org/olat/modules/fo/Message.java
@@ -33,32 +33,53 @@ import org.olat.core.id.Persistable;
 /**
  * @author schneider
  */
-public interface Message extends CreateInfo, ModifiedInfo,  Persistable, Comparable<Message> {
-	public abstract String getBody();
-	public abstract Identity getCreator();
-	public abstract Forum getForum();
-	public abstract Identity getModifier();
-	public abstract Message getParent();
-	public abstract Message getThreadtop();
-	public abstract String getTitle();
-	public abstract Integer getNumOfWords();
-	public abstract Integer getNumOfCharacters();
-	public abstract void setBody(String string);
-	public abstract void setCreator(Identity identity);
-	public abstract void setForum(Forum forum);
-	public abstract void setModifier(Identity identity);
-	public abstract void setParent(Message message);
-	public abstract void setThreadtop(Message message);
-	public abstract void setTitle(String string);
-	public abstract void setNumOfWords(Integer numOfWords);
-	public abstract void setNumOfCharacters(Integer numOfCharacters);
+public interface Message extends MessageLight, CreateInfo, ModifiedInfo,  Persistable, Comparable<Message> {
+	
+	public String getTitle();
+	
+	public void setTitle(String string);
+	
+	public String getBody();
+	
+	public void setBody(String string);
+	
+	public Identity getCreator();
+	
+	public boolean isGuest();
+	
+	public String getPseudonym();
+	
+	public void setPseudonym(String pseudonym);
+	
+	public Forum getForum();
+	
+	public Identity getModifier();
+	
+	public void setModifier(Identity identity);
+	
+	public Message getParent();
+	
+	public void setParent(Message message);
+	
+	public Message getThreadtop();
+	
+	public void setThreadtop(Message message);
+
+	public Integer getNumOfWords();
+	
+	public void setNumOfWords(Integer numOfWords);
+	
+	public Integer getNumOfCharacters();
+
+	public void setNumOfCharacters(Integer numOfCharacters);
+	
 	public int getStatusCode();
+	
 	public void setStatusCode(int statusCode);
 	
 	
 	public enum OrderBy {
 		title,
 		creationDate
-		
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml b/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
deleted file mode 100644
index b3d67af3a9a..00000000000
--- a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC 
-        "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-
-  <!-- Can't name the class user, clashes with postgres database -->
-  <class name="org.olat.modules.fo.MessageImpl" table="o_message">
-    
-    <id name="key" column="message_id" type="long" unsaved-value="null">
-      <generator class="hilo"/>
-    </id>
-	
-	<version name="version" access="field" column="version" type="int"/>
-	<property  name="lastModified" column="lastmodified" type="timestamp" />
-	<property  name="creationDate" column="creationdate" type="timestamp" />   
- 
-    <property name="title" unique="false" type="string" not-null="false" length="100"/>
-    
-    <property name="body" unique="false" type="string" not-null="false">
-    	<column name="body" length="16777210"/>
-	</property> 
-    	
- 	<many-to-one name="parent" class="org.olat.modules.fo.MessageImpl" 
-		column="parent_id" outer-join="true" cascade="none"/> 
-
- 	<many-to-one name="threadtop" class="org.olat.modules.fo.MessageImpl" 
-		column="topthread_id" outer-join="true" cascade="none"/> 
-    	
-   	<many-to-one name="creator" class="org.olat.basesecurity.IdentityImpl" 
-		column="creator_id" outer-join="true" cascade="none" not-null="true"/>     	
-
-	<many-to-one name="modifier" class="org.olat.basesecurity.IdentityImpl" 
-		column="modifier_id" outer-join="true" cascade="none" not-null="false"/>     	
-    	
-	<many-to-one name="forum" class="org.olat.modules.fo.ForumImpl"  
-		column="forum_fk" cascade="none"/>
-		
-	<property name="statusCode" unique="false" type="int" not-null="true" />
-	
-	<property name="numOfWords" column="numofwords" unique="false" type="int" not-null="false" />
-	
-	<property name="numOfCharacters" column="numofcharacters" unique="false" type="int" not-null="false" />
-	
-  </class>  
-
-</hibernate-mapping>
-
diff --git a/src/main/java/org/olat/modules/fo/MessageImpl.java b/src/main/java/org/olat/modules/fo/MessageImpl.java
deleted file mode 100644
index 589315848e2..00000000000
--- a/src/main/java/org/olat/modules/fo/MessageImpl.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.modules.fo;
-
-import java.util.Date;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.id.Identity;
-/**
- * @author Felix Jost
- */
-
-public class MessageImpl extends PersistentObject implements Message {
-	
-	private String title;
-	private String body;
-	private Message parent;
-	private Message threadtop;
-	private Forum forum;
-
-	private Identity creator = null;
-	private Identity modifier = null;
-	private int statusCode;
-	private Date lastModified;
-	private Integer numOfCharacters;
-	private Integer numOfWords;
-		
-	/**
-	 * Default construcor
-	 */
-	MessageImpl() {
-	    // nothing to do 
-	}
-	
-
-	/**
-	 * @return
-	 */
-	public String getBody() {
-		return body;
-	}
-
-
-	/**
-	 * @return
-	 */
-	public Identity getCreator() {
-		return creator;
-	}
-
-	/**
-	 * @return
-	 */
-	public Forum getForum() {
-		return forum;
-	}
-
-	/**
-	 * @return
-	 */
-	public Identity getModifier() {
-		return modifier;
-	}
-
-	/**
-	 * @return
-	 */
-	public Message getParent() {
-		return parent;
-	}
-
-	/**
-	 * @return
-	 */
-	public Message getThreadtop() {
-		return threadtop;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	/**
-	 * @param string
-	 */
-	public void setBody(String string) {
-		body = string;
-	}
-
-	/**
-	 * @param identity
-	 */
-	public void setCreator(Identity identity) {
-		creator = identity;
-	}
-
-	/**
-	 * @param forum
-	 */
-	public void setForum(Forum forum) {
-		this.forum = forum;
-	}
-
-	/**
-	 * @param identity
-	 */
-	public void setModifier(Identity identity) {
-		modifier = identity;
-	}
-
-	/**
-	 * @param message
-	 */
-	public void setParent(Message message) {
-		parent = message;
-	}
-
-	/**
-	 * @param message
-	 */
-	public void setThreadtop(Message message) {
-		threadtop = message;
-	}
-
-	/**
-	 * @param string
-	 */
-	public void setTitle(String string) {
-		title = string;
-	}
-	
-	public int getStatusCode() {
-		return statusCode;
-	}
-	public void setStatusCode(int statusCode) {
-		this.statusCode = statusCode;
-	}
-
-	/**
-	 * 
-	 * @see org.olat.core.id.ModifiedInfo#getLastModified()
-	 */
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	/**
-	 * 
-	 * @see org.olat.core.id.ModifiedInfo#setLastModified(java.util.Date)
-	 */
-	public void setLastModified(Date date) {
-		this.lastModified = date;
-	}
-
-	public Integer getNumOfCharacters() {
-		return numOfCharacters;
-	}
-
-	public void setNumOfCharacters(Integer numOfCharacters) {
-		this.numOfCharacters = numOfCharacters;
-	}
-
-	public Integer getNumOfWords() {
-		return numOfWords;
-	}
-
-	public void setNumOfWords(Integer numOfWords) {
-		this.numOfWords = numOfWords;
-	}
-
-
-	public int compareTo(Message arg0) {
-		//threadtop always is on top!
-		if (arg0.getParent()==null) return 1;
-		if (getCreationDate().after(arg0.getCreationDate())) return 1;
-		return 0;
-	}
-
-}
diff --git a/src/main/java/org/olat/modules/fo/MessageLight.java b/src/main/java/org/olat/modules/fo/MessageLight.java
new file mode 100644
index 00000000000..fcace6e0567
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/MessageLight.java
@@ -0,0 +1,57 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo;
+
+import java.util.Date;
+
+import org.olat.core.id.Identity;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface MessageLight extends MessageRef {
+	
+	public int getStatusCode();
+	
+	public String getTitle();
+	
+	public String getBody();
+	
+	public boolean isGuest();
+	
+	public String getPseudonym();
+	
+	public Identity getCreator();
+	
+	public Identity getModifier();
+	
+	public Date getCreationDate();
+	
+	public Date getLastModified();
+	
+
+	public Long getParentKey();
+	
+	public MessageRef getThreadtop();
+
+}
diff --git a/src/main/java/org/olat/modules/fo/MessageRef.java b/src/main/java/org/olat/modules/fo/MessageRef.java
new file mode 100644
index 00000000000..2e9cffa9dc8
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/MessageRef.java
@@ -0,0 +1,34 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo;
+
+/**
+ * 
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface MessageRef {
+	
+	public Long getKey();
+	
+	public int getStatusCode();
+
+}
diff --git a/src/main/java/org/olat/modules/fo/QuoteAndTagFilter.java b/src/main/java/org/olat/modules/fo/QuoteAndTagFilter.java
index af13c4dca3f..6ec5bc9ebcc 100644
--- a/src/main/java/org/olat/modules/fo/QuoteAndTagFilter.java
+++ b/src/main/java/org/olat/modules/fo/QuoteAndTagFilter.java
@@ -23,7 +23,8 @@ import java.io.IOException;
 import java.io.StringReader;
 
 import org.cyberneko.html.parsers.DOMParser;
-import org.olat.core.logging.LogDelegator;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.filter.Filter;
 import org.w3c.dom.Document;
@@ -31,7 +32,9 @@ import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
-public class QuoteAndTagFilter extends LogDelegator implements Filter {
+public class QuoteAndTagFilter implements Filter {
+	
+	private static final OLog log = Tracing.createLoggerFor(QuoteAndTagFilter.class);
 
 	/**
 	 * @see org.olat.core.util.filter.Filter#filter(java.lang.String)
@@ -46,10 +49,10 @@ public class QuoteAndTagFilter extends LogDelegator implements Filter {
 			scanNode(document, sb);
 			return sb.toString();
 		} catch (SAXException e) {
-			logError("", e);
+			log.error("", e);
 			return null;
 		} catch (IOException e) {
-			logError("", e);
+			log.error("", e);
 			return null;
 		}
 	}
diff --git a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml b/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
deleted file mode 100644
index 0f93993e90a..00000000000
--- a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC 
-        "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-  <class name="org.olat.modules.fo.ReadMessageImpl" table="o_readmessage">
-  
-    <id name="key" type="long" column="id" unsaved-value="null">
-      <generator class="hilo" />
-    </id>
-    
-    <version name="version" access="field" column="version" type="int"/>
-    <property  name="creationDate" column="creationdate" type="timestamp" />
-    
-    <many-to-one name="identity" class="org.olat.basesecurity.IdentityImpl"
-		column="identity_id" outer-join="false" cascade="none"/>
-		
-	 <many-to-one name="forum" class="org.olat.modules.fo.ForumImpl"  
-		column="forum_id" outer-join="false" cascade="none"/>
-		
-	<many-to-one name="message" class="org.olat.modules.fo.MessageImpl" 
-		column="message_id" outer-join="false" cascade="none"/> 
- 	
-  </class>  
-</hibernate-mapping>
diff --git a/src/main/java/org/olat/modules/fo/ReadMessage.java b/src/main/java/org/olat/modules/fo/ReadMessage.java
deleted file mode 100644
index 515d186c650..00000000000
--- a/src/main/java/org/olat/modules/fo/ReadMessage.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.modules.fo;
-
-import org.olat.core.id.CreateInfo;
-import org.olat.core.id.Identity;
-import org.olat.core.id.Persistable;
-
-/**
- * 
- * Description:<br>
- * TODO: Lavinia Dumitrescu Class Description for ReadMessage
- * 
- * <P>
- * Initial Date:  14.03.2008 <br>
- * @author Lavinia Dumitrescu
- */
-public interface ReadMessage extends CreateInfo, Persistable {
-
-	public abstract Identity getIdentity();
-	public abstract Forum getForum();	
-	public abstract Message getMessage();
-	
-}
diff --git a/src/main/java/org/olat/modules/fo/ReadMessageImpl.java b/src/main/java/org/olat/modules/fo/ReadMessageImpl.java
deleted file mode 100644
index 4c678de6eac..00000000000
--- a/src/main/java/org/olat/modules/fo/ReadMessageImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-package org.olat.modules.fo;
-
-import org.olat.core.commons.persistence.PersistentObject;
-import org.olat.core.id.Identity;
-
-public class ReadMessageImpl extends PersistentObject implements ReadMessage {
-
-	private Identity identity;
-	private Message message;
-	private Forum forum;
-
-	ReadMessageImpl() {
-		//default constructor
-	}
-
-	public Forum getForum() {
-		return forum;
-	}
-
-	public void setForum(Forum forum) {
-		this.forum = forum;
-	}
-
-	public Identity getIdentity() {
-		return identity;
-	}
-
-	public void setIdentity(Identity identity) {
-		this.identity = identity;
-	}
-
-	public Message getMessage() {
-		return message;
-	}
-
-	public void setMessage(Message message) {
-		this.message = message;
-	}
-	
-	
-	
-}
diff --git a/src/main/java/org/olat/modules/fo/ThreadColumnDescriptor.java b/src/main/java/org/olat/modules/fo/ThreadColumnDescriptor.java
deleted file mode 100644
index 23b7e4b7c45..00000000000
--- a/src/main/java/org/olat/modules/fo/ThreadColumnDescriptor.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.modules.fo;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.render.Renderer;
-import org.olat.core.gui.render.StringOutput;
-import org.olat.core.util.Formatter;
-
-/**
- * Specialized ColumnDescriptor to display title of Forum messages in a indented
- * (thread-like) way
- * 
- * @author Felix Jost
- */
-public class ThreadColumnDescriptor extends DefaultColumnDescriptor {
-	private static final String ONEINDENT = "&nbsp;&nbsp;";
-
-	private static final int MAXINDENTS = 20;
-	private static final String[] INDENTS;
-
-	private List<Message> messages;
-	private TreeWalker tw;
-	private boolean toIndent;
-
-	static {
-		INDENTS = new String[MAXINDENTS];
-		StringBuilder sb = new StringBuilder();
-		for (int i = 0; i < MAXINDENTS; i++) {
-			INDENTS[i] = sb.toString();
-			sb.append(ONEINDENT);
-		}
-	}
-
-	/**
-	 * Description:<BR>
-	 * Private class that implements a tree comparator for forum messages 
-	 * <P>
-	 * Initial Date:  Jan 19, 2005
-	 *
-	 * @author gnaegi
-	 */
-	private static class MessageTreeComparator implements TreeComparator {
-		private class MessageComparator implements Comparator<GenericTraversalNode> {
-
-			/**
-			 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-			 */
-			public int compare(GenericTraversalNode ga, GenericTraversalNode gb) {
-				boolean asc = true; //ascending;
-				Message ma = (Message) ga.getItem();
-				Message mb = (Message) gb.getItem();
-				Date da = ma.getCreationDate();
-				Date db = mb.getCreationDate();
-				// TODO:fj: avoid allocation of lots of new Date objects
-				// timestamp and date did not compare? recheck.
-				// See also http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5103041 for the java 1.4/1.5 code bug
-				if (da instanceof Timestamp) {
-					da = new Date(da.getTime());
-				}
-				
-				if (db instanceof Timestamp) {
-					db = new Date(db.getTime());
-				}
-				
-				
-				return (asc ? da.compareTo(db) : db.compareTo(da));
-			}
-
-		}
-
-		private MessageComparator msgcomp;
-
-		
-		private MessageTreeComparator() {
-			msgcomp = new MessageComparator();
-		}
-
-		@Override
-		public void sort(int depth, List<GenericTraversalNode> children) {
-			/*
-			 * if (depth > 1) { msgcomp.setAscending(true); } else {
-			 * msgcomp.setAscending(false); }
-			 */
-			Collections.sort(children, msgcomp);
-		}
-	}
-
-	/**
-	 * @param headerKey
-	 * @param dataColumn
-	 * @param action
-	 */
-	public ThreadColumnDescriptor(String headerKey, int dataColumn, String action) {
-		super(headerKey, dataColumn, action, null);
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.ColumnDescriptor#renderValue(org.olat.core.gui.render.StringOutput, int, org.olat.core.gui.render.Renderer)
-	 */
-	public void renderValue(StringOutput sb, int row, Renderer renderer) {
-		StringOutput sbuf = new StringOutput();
-		super.renderValue(sbuf, row, renderer);
-		String val = sbuf.toString();
-		Object m = messages.get(getTable().getSortedRow(row));
-		GenericTraversalNode gtn = getTreeWalker().getGenericTraversalNode(m);
-		// + "..."+gtn.getDepth()+", vnr:"+gtn.getVisitNumber();
-		sb.append("<div style=\"white-space: nowrap;"); // do not wrap titles, looks unsexy
-		int indent = gtn.getDepth(); // starts with 1
-		if (indent > MAXINDENTS) indent = MAXINDENTS;
-		if (toIndent) {
-			sb.append("padding-left: ");
-			sb.append(Formatter.roundToString(((float)indent-1)/2, 2));
-			sb.append("em;");
-		}
-		sb.append("\">");
-		sb.append(Formatter.truncate(val, 50-indent));
-		sb.append("</div>");
-	}
-
-	/**
-	 * 
-	 */
-	private TreeWalker getTreeWalker() {
-		if (tw == null) {
-			tw = new TreeWalker(new MessageTreeComparator(), null); // no visitor,
-																															// since we just
-																															// need the
-																															// traversal order
-																															// after sorting
-			Iterator<Message> mit = messages.iterator();
-			while (mit.hasNext()) {
-				Message m = mit.next();
-				tw.addRelationship(m, m.getParent());
-			}
-			tw.traverse(); // now the visitednr of each node indicates the sorting
-										 // position
-		}
-		return tw;
-	}
-
-	/**
-	 * this special columndescriptor can only handle data from the column of the
-	 * tablemodel if it is of type Message, since this descriptor is especially
-	 * made for the forum
-	 */
-	public int compareTo(int rowa, int rowb) {
-		// we take the treewalker which we built previously and use the visitednr
-		// attribute to specify sort order
-		Object a = messages.get(rowa);
-		Object b = messages.get(rowb); // both are messages; to be compared
-		TreeWalker treeWalker = getTreeWalker();
-		GenericTraversalNode gtna = treeWalker.getGenericTraversalNode(a);
-		GenericTraversalNode gtnb = treeWalker.getGenericTraversalNode(b);
-		int sortedposa = gtna.getVisitNumber(); // the visitednumber was determined
-																						// by the sorting algorithm,
-																						// therefore it is the sorted
-																						// position
-		int sortedposb = gtnb.getVisitNumber();
-		int diff = sortedposa - sortedposb;
-		int res = (diff == 0 ? 0 : (diff > 0 ? 1 : -1));
-		return res;
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.ColumnDescriptor#modelChanged()
-	 */
-	public void modelChanged() {
-		ForumMessagesTableDataModel ftdm = (ForumMessagesTableDataModel) getTable().getTableDataModel();
-		// this specialized columndescriptor only works for the forumtabledatamodel
-		messages = ftdm.getObjects();
-		tw = null; // we need to build a new TreeWalker (which does the sorting,
-							 // since the model has changed
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.ColumnDescriptor#sortingAboutToStart()
-	 */
-	public void sortingAboutToStart() {
-		toIndent = true; // only indent messages if we are sorting this column
-
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.table.ColumnDescriptor#otherColumnDescriptorSorted()
-	 */
-	public void otherColumnDescriptorSorted() {
-		toIndent = false;
-	}
-	
-	private static class TreeWalker {
-		private Map<Object,GenericTraversalNode> nodemap = new HashMap<Object,GenericTraversalNode>();
-		private TreeComparator treecomp;
-		private Visitor v;
-		private GenericTraversalNode rootNode;
-		private int visitNumber = 0;
-
-		/**
-		 * @param treecomp
-		 * @param v the visitor, may be null
-		 */
-		public TreeWalker(TreeComparator treecomp, Visitor v) {
-			this.treecomp = treecomp;
-			this.v = v;
-			rootNode = new GenericTraversalNode(null);
-		}
-
-		/**
-		 * 
-		 */
-		public void traverse() {
-			doTraverse(rootNode, 0);
-		}
-
-		private void doTraverse(GenericTraversalNode node, int depth) {
-			if (depth > 0) { // we are not at the artificial root
-				node.setDepth(depth);
-				node.setVisitNumber(++visitNumber);
-				// preorder traversal
-				if (v != null) v.visit(node);
-			}
-			List<GenericTraversalNode> children = node.getChildren();
-			treecomp.sort(depth + 1, children);
-			for(Iterator<GenericTraversalNode> it = children.iterator(); it.hasNext(); ) {
-				GenericTraversalNode c = it.next();
-				doTraverse(c, depth + 1);
-			}
-		}
-
-		/**
-		 * @param childitem the child
-		 * @param parentitem the parent, may be null if top level
-		 */
-		public void addRelationship(Object childitem, Object parentitem) {
-			GenericTraversalNode gnp;
-			GenericTraversalNode gnc = getGenericTraversalNode(childitem);
-			if (parentitem != null) {
-				gnp = getGenericTraversalNode(parentitem);
-			} else {
-				gnp = rootNode;
-			}
-			gnp.addChild(gnc);
-
-		}
-
-		/**
-		 * @param item
-		 * @return GenericTraversalNode
-		 */
-		public GenericTraversalNode getGenericTraversalNode(Object item) {
-			GenericTraversalNode n = nodemap.get(item);
-			if (n == null) { // not existing, so create
-				n = new GenericTraversalNode(item);
-				nodemap.put(item, n);
-			}
-			return n;
-		}
-
-	}
-	
-	private static class GenericTraversalNode {
-		private Object item;
-		private int depth;
-		private List<GenericTraversalNode> children;
-		private int visitNumber;
-
-		/**
-		 * @param item
-		 */
-		public GenericTraversalNode(Object item) {
-			children = new ArrayList<GenericTraversalNode>();
-			this.item = item;
-		}
-
-		/**
-		 * add the child.
-		 * 
-		 * @param n
-		 */
-		public void addChild(GenericTraversalNode n) {
-			if (!children.add(n)) { throw new RuntimeException("duplicate child in List"); }
-		}
-
-		/**
-		 * Returns the children.
-		 * 
-		 * @return List
-		 */
-		public List<GenericTraversalNode> getChildren() {
-			return children;
-		}
-
-		/**
-		 * Returns the depth.
-		 * 
-		 * @return int
-		 */
-		public int getDepth() {
-			return depth;
-		}
-
-		/**
-		 * Returns the item.
-		 * 
-		 * @return Object
-		 */
-		public Object getItem() {
-			return item;
-		}
-
-		/**
-		 * Sets the depth.
-		 * 
-		 * @param depth The depth to set
-		 */
-		public void setDepth(int depth) {
-			this.depth = depth;
-		}
-
-		/**
-		 * Returns the visitNumber.
-		 * 
-		 * @return int
-		 */
-		public int getVisitNumber() {
-			return visitNumber;
-		}
-
-		/**
-		 * Sets the visitNumber.
-		 * 
-		 * @param visitNumber The visitNumber to set
-		 */
-		public void setVisitNumber(int visitNumber) {
-			this.visitNumber = visitNumber;
-		}
-
-	}
-	
-	public interface Visitor {
-
-		public void visit(GenericTraversalNode node);
-	}
-	
-	public interface TreeComparator {
-		/**
-		 * sorts the children of a node with depth 'depth' in a tree. depth = 1 = root children
-		 * @param depth
-		 * @param children
-		 */
-		public void sort(int depth, List<GenericTraversalNode> children);
-	}
-}
-
diff --git a/src/main/java/org/olat/modules/fo/_content/attachments-editview.html b/src/main/java/org/olat/modules/fo/_content/attachments-editview.html
deleted file mode 100644
index 7f113d55fac..00000000000
--- a/src/main/java/org/olat/modules/fo/_content/attachments-editview.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<table class="table table-condensed  table-striped">
-	<tbody>		
-		#foreach ($attachment in $attachments)
-			#set( $fname = $attachment.getName() )
-			<tr>
-				<td style="width:1%"><i class="o_icon o_icon-fw $r.getFiletypeIconCss($fname)"> </i></td>
-				<td>$r.escapeHtml($fname)</td>
-				<td>$r.formatBytes($attachment.getSize())</td>
-				<td style="width:1%">$r.render("delete.attachment.$velocityCount")</td>
-			</tr>
-		#end
-	</tbody>
-</table>
-
diff --git a/src/main/java/org/olat/modules/fo/_content/filter_for_user.html b/src/main/java/org/olat/modules/fo/_content/filter_for_user.html
deleted file mode 100644
index 538c341af2c..00000000000
--- a/src/main/java/org/olat/modules/fo/_content/filter_for_user.html
+++ /dev/null
@@ -1,8 +0,0 @@
-#if($ajax)
-<div class="o_block">
-	<h4>$r.translate("filter.header.title")</h4>
-	$r.render("userAutoCompleter")
-</div>
-#end
-<h4>$r.translate("filter.header.allUsers")</h4>
-$r.render("userList")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/_content/filter_view.html b/src/main/java/org/olat/modules/fo/_content/filter_view.html
deleted file mode 100644
index 94e85c19da3..00000000000
--- a/src/main/java/org/olat/modules/fo/_content/filter_view.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="o_block">
-	$r.render("backLinkLT")
-</div>
-$r.render("filterForUser")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/_content/msg-preview.html b/src/main/java/org/olat/modules/fo/_content/msg-preview.html
deleted file mode 100644
index 85171f55c6e..00000000000
--- a/src/main/java/org/olat/modules/fo/_content/msg-preview.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div class="o_forum">
-	<div class="o_forum_message o_block_large_bottom" >
-		<div class="o_forum_message_header clearfix">
-			$r.render("portrait")
-			<h4 class="o_forum_message_title">
-				$r.escapeHtml($message.getTitle())
-			</h4>
-			<div class="o_author">
-				$r.escapeHtml($identity.getUser().getProperty("firstName", $locale)) $r.escapeHtml($identity.getUser().getProperty("lastName", $locale))				
-			</div>
-			<div class="o_date">
-				$r.formatDateAndTime($message.getCreationDate())
-			</div>				
-		</div>
-		<div class="o_forum_message_body">
-			<div class="clearfix o_scrollblock">
-				$r.formatLatexFormulas($messageBody)						
-			</div>
-		</div>			
-	</div>
-</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/_content/threadview.html b/src/main/java/org/olat/modules/fo/_content/threadview.html
deleted file mode 100644
index f4e286d1de2..00000000000
--- a/src/main/java/org/olat/modules/fo/_content/threadview.html
+++ /dev/null
@@ -1,179 +0,0 @@
-#if($r.available("backLinkLT"))
-<div class="o_block">
-	$r.render("backLinkLT")
-</div>
-#end
-<div class="o_forum">
-	<div class="clearfix">
-		#if($filteredForLastName)
-		<h3>$r.translate("filter.results.title") $r.escapeHtml($filteredForFirstName) $r.escapeHtml($filteredForLastName)</h3>
-		#end
-		<div class="pull-right">
-			#if($r.available("threadViewSwitch"))
-				$r.render("threadViewSwitch")
-			#end
-		</div>		
-		#if ($security.mayArchiveForum())
-			$r.render("archive.thread")
-		#end
-	</div>
-	#if ($messages.isEmpty())
-		#if ($mode == "marked")
-		<p class="o_important">$r.translate("msg.no_marked_message")</p>
-		#elseif ($mode == "new")
-		<p class="o_important">$r.translate("msg.no_new_message")</p>
-		#end
-	#end
-	
-#foreach ($message in $messages)
-
-	#if($threadMode)
-		#set ( $deepnessFromMap = $msgDeepMap.get($message.get("id")) )
-	#end
-	#if($security.mayEditMessageAsModerator() && $message.get("isThreadtop"))
-	<div class="o_block">	
-		#if(!$isClosed)
-			$r.render("close.thread")
-		#else
-			$r.render("open.thread")
-		#end
-		
-		#if(!$isHidden)
-			$r.render("hide.thread")
-		#else
-			$r.render("show.thread")
-		#end
-	</div>
-	#end
-	
-	#set( $count = $velocityCount - 1)
-	<div #if($threadMode) style="margin-left: ${deepnessFromMap}em" #end class="o_forum_message o_block_large_bottom #if($message.get("newMessage")) o_forum_message_new #end #if($message.get("id") == $goToMessageId) o_forum_message_highlight #end" id="o_forum_message_${message.get("id")}">
-		<div class="o_forum_message_header clearfix">
-			#if($r.available($message.get("ePFAddComponentName")))
-				<div class="o_ep_collect">$r.render($message.get("ePFAddComponentName"))</div>
-			#end
-			#if($r.available("mark_${count}"))
-				<div class="o_mark">$r.render("mark_${count}")</div>
-			#end
-
-			#if($r.available($message.get("portraitComponentVCName")))
-				$r.render($message.get("portraitComponentVCName"))
-			#end
-				<h4 class="o_forum_message_title">
-					$r.escapeHtml($message.get("title"))
-					 #if($message.get("newMessage")) <span class="o_newindicator" title="$r.translateInAttribute("message.unread")"><i class="o_icon o_icon_new" ></i><span class="o_label">$r.translate("new")</span></span>#end
-				</h4>
-				<div class="o_author">
-					#if($r.available("vc_${count}"))
-						$r.render("vc_${count}")
-					#else							
-						$r.escapeHtml($message.get("firstname")) $r.escapeHtml($message.get("lastname"))
-					#end
-				</div>
-				<div class="o_date">
-					$r.translate("msg.creationdate") $message.get("date")
-				</div>
-				
-				#if(($message.get("isModified")) || ($message.get("isMoved")))
-				<div class="o_modified">
-					#if($message.get("isModified"))
-			   			$r.translate("msg.modified"): $r.escapeHtml($message.get("modfname")) $r.escapeHtml($message.get("modlname")) $message.get("modified")
-			   		#end
-			   		#if($message.get("isMoved"))
-			   			$r.translate("msg.moved")
-		   			#end
-			   	</div>
-				#end	
-		</div>
-		
-		<div class="o_forum_message_body">
-			<div class="clearfix o_scrollblock">
-				$r.formatLatexFormulas($message.get("body"))						
-			</div>
-		</div>
-
-		<div class="o_forum_message_actions o_button_group">
-			#if($r.available("open_in_thread_${count}"))
-			$r.render("open_in_thread_${count}")
-			#end
-
-			#if (!$message.get("isThreadClosed"))
-				#set($canDelete = (($message.get("nOfCh") == 0 && $message.get("uIsMsgC") == true) || ($security.mayDeleteMessageAsModerator())) )
-				#set($canEdit = (($message.get("nOfCh") == 0 && $message.get("uIsMsgC") == true) || ($security.mayEditMessageAsModerator())) )
-				
-				#if ($canDelete && $canEdit)<div class="btn-group">#end
-					#if ($canDelete)
-					$r.render("dl_${count}")
-					#end
-					#if ($canEdit)
-					$r.render("ed_${count}")
-					#end
-				#if ($canDelete && $canEdit)</div>#end
-			#end
-			
-			#if ($security.mayReplyMessage() && !$message.get("isThreadClosed"))
-			<div class="btn-group">
-				$r.render("qt_${count}")
-				$r.render("rp_${count}")
-			</div>
-			#end
-			
-			#if ($security.mayEditMessageAsModerator() && !$message.get("isThreadtop") && !$message.get("isThreadClosed"))
-			<div class="btn-group">
-				<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-					<i class="o_icon o_icon-fw o_icon_actions"></i>
-					<span class="caret"></span>
-				</button>
-				<ul class="dropdown-menu dropdown-menu-right">
-					<li>$r.render("split_${count}")</li>
-					<li>$r.render("move_${count}")</li>
-				</ul>
-			</div>
-			#end
-		</div>
-		
-		#if ($message.get("hasAttachments"))
-		<div class="o_forum_message_attachments">
-			<h5>$r.translate("attachments"):</h5>
-			<ul class="list-inline">
-			#foreach( $attachment in $message.get("attachments") )
-				#set($fname = $attachment.getName())
-				<li class="o_attachment">
-					<a href="$r.commandURI("attachment_${velocityCount}_${count}")$fname" target="_blank">
-						<div class="o_filename">
-							$r.escapeHtml($fname)
-						</div>
-						<div class="o_size">
-							<i class="o_icon o_icon-fw $r.getFiletypeIconCss($fname)"></i>
-							 $r.formatBytes($attachment.getSize())
-						</div>
-						#if ($attachment.getMetaInfo() && $attachment.getMetaInfo().isThumbnailAvailable())										
-						<img src="${thumbMapper}/$message.get("id")/$attachment.getMetaInfo().getUUID()/$fname" class="img-thumbnail" alt="$r.escapeHtml("$fname")" title="$r.escapeHtml("$fname")"/>
-						<i class="o_icon o_icon-lg o_icon_enlarge"></i>
-						#end
-					</a>		
-				</li>
-			#end 
-			</ul>
-		</div>
-		#end
-	</div>
-#end
-	
-#if($showThreadTable)
-	$r.render("singleThreadTable")
-	<script type="text/javascript">
-	/* <![CDATA[ */
-			o_scrollToElement('#o_top');
-	/* ]]> */
-	</script> 
-#end
-#if($goToMessage)
-	<script type="text/javascript">
-	/* <![CDATA[ */
-	    o_scrollToElement('#o_forum_message_$goToMessageId');
-	/* ]]> */
-	</script> 
-#end
-
-</div> ## END of o_forum
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
index 93e51812b5e..4fac1a036fe 100644
--- a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_de.properties
@@ -1,4 +1,14 @@
 #Mon Mar 02 09:54:04 CET 2009
+admin.menu.title=Forum
+admin.menu.title.alt=Konfiguration Forum
+admin.title=Konfiguration Forum
+anonymous.course.default=Default for course forum
+anonymous.default.enabled=Pseudonym enabled
+anonymous.default.disabled=Pseudonym disabled
+anonymous.group.default=Default for group forum
+anonymous.posting=Erlaubt anonymous posting using a pseudonym
+anonymous.poster=Gastbeitrag
+guest=Gast
 archive.forum=Forum archivieren
 archive.forum.dialog=Wollen Sie dieses Forum wirklich in Ihrem pers\u00F6nlichen Ordner im Unterordner "private/archive" archivieren?
 archive.forum.successfully=Das Forum wurde in Ihrem pers\u00F6nlichen Ordner im Unterordner "private/archive" archiviert.
@@ -14,6 +24,7 @@ close.thread=Diskussion beenden
 delete.att.ok=Die Datei wurde gel\u00F6scht.
 deleteok=Der Beitrag wurde gel\u00F6scht
 error.field.not.empty=Dieses Feld darf nicht leer sein.
+error.pseudonym=Pseudonym zu ähnlich einer existierende Benutzername
 filter=Personenfilter
 filter.header.title=Nach Personen suchen
 filter.header.allUsers=Beitr\u00E4ge aller Personen
@@ -70,11 +81,13 @@ notifications.header=In einem von Ihnen abonnierten Forum befinden sich neue Nac
 notifications.header.course=Forum in Kurs "{0}"
 notifications.header.group=Forum in Gruppe "{0}"
 open.thread=Diskussion \u00F6ffnen
+pseudonym.suffix=(Pseudonym)
 reallydeleteAtt=Wollen Sie diese Datei wirklich l\u00F6schen?
 reallydeleteleaf=Wollen Sie den Beitrag <i>{0}</i> wirklich l\u00F6schen?
 reallydeletenode1=Wollen Sie den Beitrag <i>{0}</i> mit seiner Antwort wirklich l\u00F6schen?
 reallydeletenodeN=Wollen Sie den Beitrag <i>{0}</i> mit seinen insgesamt <b>{1}</b> Antworten wirklich l\u00F6schen?
 reallysplitthread=Wollen Sie den Beitrag mit Antworten wirklich abtrennen?
+remove.sticky= Entfernt Priorisierung (sticky)
 show.thread=Diskussion anzeigen
 table.closed=Beendet
 table.download=Tabelle downloaden
@@ -99,6 +112,8 @@ table.user.firstname=Vorname
 table.user.lastname=Name
 table.user.replies=Antworten
 table.user.threads=Themen
+use.pseudonym=Verfasst von
+use.pseudonym.label=Pseudonym verwenden
 viewswitch.messageview=einer
 viewswitch.threadview=alle (geschachtelt)
 viewswitch.flatview=alle (flach)
diff --git a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_en.properties
index 8b23ad1873a..8f51ba29c89 100644
--- a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_en.properties
@@ -1,4 +1,13 @@
 #Sat Jan 22 13:41:44 CET 2011
+admin.menu.title=Forum
+admin.menu.title.alt=Forum configuration
+admin.title=Forum configuration
+anonymous.course.default=Default for course forum
+anonymous.default.enabled=Pseudonym enabled
+anonymous.default.disabled=Pseudonym disabled
+anonymous.group.default=Default for group forum
+anonymous.posting=Allow anonymous posting using a pseudonym
+anonymous.poster=Guest post
 archive.forum=Archive forum
 archive.forum.dialog=Do you really want to archive this forum in your personal folder, section "private/archive"?
 archive.forum.successfully=This forum has been archived in your personal folder, section "private/archive/".
@@ -72,12 +81,14 @@ notifications.entry.modified=Message "{0}" modified by {1}
 notifications.header=There are new messages in a forum subscribed by you\:
 notifications.header.course=Forum in course "{0}"
 notifications.header.group=Forum in group "{0}"
-open.thread=Open discussion 
+open.thread=Open discussion
+pseudonym.suffix=(Pseudonym)
 reallydeleteAtt=Do you really want to delete this file?
 reallydeleteleaf=Do you really want to delete the post <i>{0}</i>?
 reallydeletenode1=Do you really want to delete the post <i>{0}</i> along with its reply?
 reallydeletenodeN=Do you really want to delete the post <i>{0}</i> along with its <b>{1}</b> replies?
 reallysplitthread=Do you really want to detach this post along with its answers?
+remove.sticky=Remove prioritizing (sticky)
 show.thread=Show discussion 
 table.choose=Move here
 table.closed=Completed
@@ -104,6 +115,7 @@ table.user.lastname=Name
 table.user.replies=Replies
 table.user.threads=Threads
 table.userfriendlyname=Author
+use.pseudonym.label=Use a pseudonym
 viewswitch.flatview=all (flat)
 viewswitch.marked=marked
 viewswitch.messageview=one
diff --git a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_fr.properties
index a8034a10cd7..2af4fad9ee7 100644
--- a/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/fo/_i18n/LocalStrings_fr.properties
@@ -1,4 +1,5 @@
 #Mon Oct 22 15:53:49 CEST 2012
+admin.title=Configuration des forums
 archive.forum=Archiver le forum
 archive.forum.dialog=Etes-vous s\u00FBr de vouloir archiver ce forum dans votre dossier personnel sous private?
 archive.forum.successfully=Ce forum a \u00E9t\u00E9 archiv\u00E9 dans votre dossier personnel sous private.
@@ -104,6 +105,7 @@ table.user.lastname=Nom
 table.user.replies=R\u00E9ponses
 table.user.threads=Sujets
 table.userfriendlyname=Auteur
+use.pseudonym.label=Utiliser un pseudonyme
 viewswitch.flatview=tous (plat)
 viewswitch.marked=marqu\u00E9e
 viewswitch.messageview=une
diff --git a/src/main/java/org/olat/modules/fo/archiver/ForumArchiveManager.java b/src/main/java/org/olat/modules/fo/archiver/ForumArchiveManager.java
index 650c3669498..56eeeb5439f 100644
--- a/src/main/java/org/olat/modules/fo/archiver/ForumArchiveManager.java
+++ b/src/main/java/org/olat/modules/fo/archiver/ForumArchiveManager.java
@@ -37,10 +37,9 @@ import org.olat.core.util.tree.TreeVisitor;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumCallback;
 import org.olat.modules.fo.ForumHelper;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
-import org.olat.modules.fo.MessageNode;
 import org.olat.modules.fo.archiver.formatters.ForumFormatter;
+import org.olat.modules.fo.manager.ForumManager;
 
 /**
  *          Initial Date: Nov 11, 2005 <br>
@@ -86,7 +85,6 @@ public class ForumArchiveManager {
 	 * @return the message thread as String formatted
 	 */
 	public String applyFormatterForOneThread(ForumFormatter forumFormatter, Long forumId, Long topMessageId){
-		log.info("Archiving forum.thread: "+forumId+"."+topMessageId);
 		MessageNode topMessageNode = convertToThreadTree(topMessageId);
 		return formatThread(topMessageNode, forumFormatter, forumId);
 	}
diff --git a/src/main/java/org/olat/modules/fo/MessageNode.java b/src/main/java/org/olat/modules/fo/archiver/MessageNode.java
similarity index 71%
rename from src/main/java/org/olat/modules/fo/MessageNode.java
rename to src/main/java/org/olat/modules/fo/archiver/MessageNode.java
index e281a4e8a1a..e3865c00f3b 100644
--- a/src/main/java/org/olat/modules/fo/MessageNode.java
+++ b/src/main/java/org/olat/modules/fo/archiver/MessageNode.java
@@ -23,22 +23,29 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.modules.fo;
+package org.olat.modules.fo.archiver;
 
 import java.io.Serializable;
 import java.util.Date;
 
 import org.olat.core.id.Identity;
 import org.olat.core.util.nodes.GenericNode;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.Status;
 
 /**
  * Initial Date: 2005-11-08
  * @author Alexander Schneider
  */
 public class MessageNode extends GenericNode implements Serializable {
+
+	private static final long serialVersionUID = -521407664860133662L;
+	
 	private Long key;
 	private String title;
 	private String body;
+	private boolean guest;
+	private String pseudonym;
 	private Identity creator;
 	private Date creationDate;
 	private Identity modifier;
@@ -48,80 +55,55 @@ public class MessageNode extends GenericNode implements Serializable {
 	private boolean isHidden;
 	private boolean isMoved;
 
-	/**
-	 * 
-	 * @param message
-	 */
+	public MessageNode() {
+		//
+	}
+	
 	public MessageNode(Message message) {
-		this.key = message.getKey();
-		this.title = message.getTitle();
-		this.body = message.getBody();
-		this.creator = message.getCreator();
-		this.creationDate = message.getCreationDate();
-		this.modifier = message.getModifier();
-		this.modifiedDate = message.getLastModified();
+		key = message.getKey();
+		title = message.getTitle();
+		body = message.getBody();
+		creator = message.getCreator();
+		creationDate = message.getCreationDate();
+		modifier = message.getModifier();
+		modifiedDate = message.getLastModified();
+		guest = message.isGuest();
+		pseudonym = message.getPseudonym();
 		if(message.getParent()==null) {
 			//relevant only for the threadtop messages
-			this.isSticky = Status.getStatus(message.getStatusCode()).isSticky();
-			this.isClosed = Status.getStatus(message.getStatusCode()).isClosed();
-			this.isHidden = Status.getStatus(message.getStatusCode()).isHidden();
+			isSticky = Status.getStatus(message.getStatusCode()).isSticky();
+			isClosed = Status.getStatus(message.getStatusCode()).isClosed();
+			isHidden = Status.getStatus(message.getStatusCode()).isHidden();
 		}
-		this.isMoved = Status.getStatus(message.getStatusCode()).isMoved();
+		isMoved = Status.getStatus(message.getStatusCode()).isMoved();
 	}
 
-	/**
-	 * 
-	 */
-	public MessageNode() {
-	//
-	}
-
-	/**
-	 * @see org.olat.core.gui.components.tree.TreeNode#getTitle()
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	
-	
 	public Long getKey() {
 		return key;
 	}
-
-	public void setKey(Long key) {
-		this.key = key;
+	
+	public String getTitle() {
+		return title;
 	}
 
-	/**
-	 * @param title
-	 */
-	public void setTitle(String title) {
-		this.title = title;
-	}
-	
 	public String getBody() {
 		return body;
 	}
 
-	public void setBody(String body) {
-		this.body = body;
-	}
-
 	public Date getCreationDate() {
 		return creationDate;
 	}
 
-	public void setCreationDate(Date creationDate) {
-		this.creationDate = creationDate;
-	}
-
 	public Identity getCreator() {
 		return creator;
 	}
 
-	public void setCreator(Identity creator) {
-		this.creator = creator;
+	public boolean isGuest() {
+		return guest;
+	}
+	
+	public String getPseudonym() {
+		return pseudonym;
 	}
 
 	public Date getModifiedDate() {
diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumDownloadResource.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumDownloadResource.java
new file mode 100644
index 00000000000..b5bc26b06b9
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumDownloadResource.java
@@ -0,0 +1,177 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.archiver.formatters;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.util.Locale;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+import org.olat.core.gui.media.MediaResource;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.io.ShieldOutputStream;
+import org.olat.core.util.openxml.DocReference;
+import org.olat.core.util.openxml.OpenXMLDocumentWriter;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.archiver.ForumArchiveManager;
+
+/**
+ * 
+ * Initial date: 13.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumDownloadResource implements MediaResource {
+	
+	private final static OLog log = Tracing.createLoggerFor(ForumDownloadResource.class);
+	
+	private final Forum forum;
+	private final ForumCallback foCallback;
+	private Long topMessageId;
+	
+	private String label;
+	private VFSContainer mediaContainer;
+	private Locale locale;
+	
+	public ForumDownloadResource(String label, Forum forum, ForumCallback foCallback, Long topMessageId, VFSContainer mediaContainer, Locale locale) {
+		this.locale = locale;
+		this.forum = forum;
+		this.label = label;
+		this.foCallback = foCallback;
+		this.topMessageId = topMessageId;
+		this.mediaContainer = mediaContainer;
+	}
+	
+	@Override
+	public boolean acceptRanges() {
+		return false;
+	}
+	
+	@Override
+	public String getContentType() {
+		return "application/zip";
+	}
+
+	@Override
+	public Long getSize() {
+		return null;
+	}
+
+	@Override
+	public InputStream getInputStream() {
+		return null;
+	}
+
+	@Override
+	public Long getLastModified() {
+		return null;
+	}
+
+	@Override
+	public void release() {
+		//
+	}
+	
+
+	@Override
+	public void prepare(HttpServletResponse hres) {
+		try {
+			hres.setCharacterEncoding("UTF-8");
+		} catch (Exception e) {
+			log.error("", e);
+		}
+		
+		ZipOutputStream zout = null;
+		try {
+			String secureLabel = StringHelper.transformDisplayNameToFileSystemName(label);
+
+			String file = secureLabel + ".zip";
+			hres.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + StringHelper.urlEncodeUTF8(file));			
+			hres.setHeader("Content-Description", StringHelper.urlEncodeUTF8(label));
+			
+			zout = new ZipOutputStream(hres.getOutputStream());
+			zout.setLevel(9);
+
+			ZipEntry test = new ZipEntry(secureLabel + ".docx");
+			zout.putNextEntry(test);
+			Map<File,DocReference> attachments = exportForum(zout);
+			zout.closeEntry();
+			
+			if(attachments != null && attachments.size() > 0) {
+				for(Map.Entry<File,DocReference> attachmentEntry : attachments.entrySet()) {
+					File attachment = attachmentEntry.getKey();
+					DocReference ref = attachmentEntry.getValue();
+					zout.putNextEntry(new ZipEntry("attachments/" + ref.getFilename()));
+					Files.copy(attachment.toPath(), new ShieldOutputStream(zout));
+					zout.closeEntry();
+				}
+			}
+		} catch (Exception e) {
+			log.error("", e);
+		} finally {
+			IOUtils.closeQuietly(zout);
+		}
+	}
+	
+	private Map<File,DocReference> exportForum(OutputStream out) {
+		ZipOutputStream zout = null;
+		try {
+			ForumOpenXMLFormatter openXmlFormatter = new ForumOpenXMLFormatter(mediaContainer, locale);
+			
+			if(topMessageId != null) {
+				ForumArchiveManager.getInstance()
+					.applyFormatterForOneThread(openXmlFormatter, forum.getKey(), topMessageId);
+			} else {
+				ForumArchiveManager.getInstance()
+					.applyFormatter(openXmlFormatter, forum.getKey(), foCallback);
+			}
+
+			zout = new ZipOutputStream(out);
+			zout.setLevel(9);
+			
+			OpenXMLDocumentWriter writer = new OpenXMLDocumentWriter();
+			writer.createDocument(zout, openXmlFormatter.getOpenXMLDocument());
+			return openXmlFormatter.getAttachments();
+		} catch (Exception e) {
+			log.error("", e);
+			return null;
+		} finally {
+			if(zout != null) {
+				try {
+					zout.finish();
+				} catch (IOException e) {
+					log.error("", e);
+				}
+			}
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumFormatter.java
index 0f4a0f5d90b..60d6635108e 100644
--- a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumFormatter.java
+++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumFormatter.java
@@ -25,26 +25,34 @@
 
 package org.olat.modules.fo.archiver.formatters;
 
+import java.util.Locale;
+
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.Util;
 import org.olat.core.util.nodes.INode;
 import org.olat.core.util.tree.Visitor;
+import org.olat.modules.fo.Forum;
 
 /**
  * Initial Date: Nov 11, 2005 <br>
  * @author Patrick Brunner, Alexander Schneider
  */
 
-public abstract class ForumFormatter implements Visitor{
+public abstract class ForumFormatter implements Visitor {
 	protected StringBuilder sb;
 	protected boolean isTopThread = false;
 	protected boolean filePerThread = false;
 	private Long forumKey;
 
+	protected final Translator translator;
+
 	/**
 	 * init string buffer
 	 *
 	 */
-	protected ForumFormatter(){
-		this.sb = new StringBuilder();
+	protected ForumFormatter(Locale locale){
+		sb = new StringBuilder(4096);
+		translator = Util.createPackageTranslator(Forum.class, locale);
 	}
 	/**
 	 * contains (translation keys, value) pairs such as:
diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumOpenXMLFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumOpenXMLFormatter.java
new file mode 100644
index 00000000000..c756944a8aa
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumOpenXMLFormatter.java
@@ -0,0 +1,214 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.archiver.formatters;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.olat.core.id.Identity;
+import org.olat.core.id.UserConstants;
+import org.olat.core.util.Formatter;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.nodes.INode;
+import org.olat.core.util.openxml.DocReference;
+import org.olat.core.util.openxml.OpenXMLDocument;
+import org.olat.core.util.openxml.OpenXMLDocument.Spacing;
+import org.olat.core.util.openxml.OpenXMLDocument.Style;
+import org.olat.core.util.vfs.LocalFileImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
+import org.olat.modules.fo.archiver.MessageNode;
+import org.olat.modules.fo.ui.MessageEditController;
+
+/**
+ * 
+ * Initial date: 13.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumOpenXMLFormatter extends ForumFormatter {
+	
+	private final VFSItemExcludePrefixFilter filter = new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES);
+
+	private boolean firstThread = true;
+	
+	private final Formatter formatter;
+	private final VFSContainer forumContainer;
+	private final OpenXMLDocument document = new OpenXMLDocument();
+	
+	private final Set<String> attachmentsFilenames = new HashSet<>();
+	private final Map<File,DocReference> fileToAttachmentsMap = new HashMap<>();
+
+	public ForumOpenXMLFormatter(VFSContainer forumContainer, Locale locale) {
+		super(locale);
+		document.setMediaContainer(forumContainer);
+		this.forumContainer = forumContainer;
+		formatter = Formatter.getInstance(locale);
+	}
+	
+	public OpenXMLDocument getOpenXMLDocument() {
+		return document;
+	}
+	
+	public Map<File,DocReference> getAttachments() {
+		return fileToAttachmentsMap;
+	}
+
+	@Override
+	public void openForum() {
+		//
+	}
+
+	@Override
+	public void openThread() {
+		if(firstThread) {
+			firstThread = false;
+		} else {
+			document.appendPageBreak();
+		}
+		super.openThread();
+	}
+
+	@Override
+	public void visit(INode node) {
+		MessageNode m = (MessageNode) node;
+		
+		StringBuilder creatorAndDate = new StringBuilder();
+		if(StringHelper.containsNonWhitespace(m.getPseudonym())) {
+			creatorAndDate.append(m.getPseudonym())
+			  .append(" ")
+			  .append(translator.translate("pseudonym.suffix"));
+		} else if(m.isGuest()) {
+			creatorAndDate.append(translator.translate("guest"));
+		} else {
+			creatorAndDate.append(m.getCreator().getUser().getProperty(UserConstants.FIRSTNAME, null));
+			creatorAndDate.append(" ");
+			creatorAndDate.append(m.getCreator().getUser().getProperty(UserConstants.LASTNAME, null));
+		}
+		creatorAndDate.append(" ");
+		creatorAndDate.append(formatter.formatDateAndTime(m.getCreationDate()));
+
+		if (isTopThread) {
+			document.appendHeading1(m.getTitle(), creatorAndDate.toString());
+			this.isTopThread = false;
+		} else {
+			document.appendHeading2(m.getTitle(), creatorAndDate.toString());
+		}
+
+		Identity modifier = m.getModifier();
+		if (modifier != null) {
+			StringBuilder modSb = new StringBuilder();
+			modSb.append(translator.translate("msg.modified")).append(": ")
+			     .append(modifier.getUser().getProperty(UserConstants.FIRSTNAME, null))
+			     .append(" ")
+			     .append(modifier.getUser().getProperty(UserConstants.LASTNAME,  null))
+			     .append(" ")
+			     .append(formatter.formatDateAndTime(m.getModifiedDate()));
+			document.appendSubtitle(modSb.toString());
+		}
+		
+		String body = m.getBody();
+		document.appendHtmlText(body, new Spacing(180, 0));
+		
+		// message attachments
+		VFSItem attachmentsItem = forumContainer.resolve(m.getKey().toString());
+		if(attachmentsItem instanceof VFSContainer) {
+			processAttachments((VFSContainer)attachmentsItem);
+		}
+	}
+	
+	private void processAttachments(VFSContainer attachmentsContainer) {
+		List<VFSItem> attachments = new ArrayList<VFSItem>(attachmentsContainer.getItems(filter));
+		for(VFSItem attachment:attachments) {
+			if(attachment instanceof LocalFileImpl) {
+				//add the text
+				document.appendText(translator.translate("attachments"), true, Style.bold);
+			}
+		}
+		
+		
+		for(VFSItem attachment:attachments) {
+			if(attachment instanceof LocalFileImpl) {
+				File file = ((LocalFileImpl)attachment).getBasefile();
+				String filename = file.getName();
+				int lastDot = filename.lastIndexOf('.');
+				
+				boolean attach = true;
+				if (lastDot > 0) {
+					String extension = filename.substring(lastDot + 1).toLowerCase();
+					if("jpeg".equals(extension) || "jpg".equals(extension) || "gif".equals(extension) || "png".equals(extension)) {
+						document.appendImage(file);
+						attach = false;
+					}
+				}
+				
+				if(attach) {
+					StringBuilder attachSb = new StringBuilder(64);
+					String uniqueFilename = getUniqueFilename(file);
+					fileToAttachmentsMap.put(file, new DocReference("", uniqueFilename, null, file));
+					attachSb.append(filename).append(": /attachments/").append(uniqueFilename);
+					document.appendText(attachSb.toString(), true);
+				}
+			}
+		}
+	}
+
+	@Override
+	public StringBuilder closeThread() {
+		return super.closeThread();
+	}
+
+	@Override
+	public StringBuilder closeForum() {
+		return new StringBuilder();
+	}
+	
+	private String getUniqueFilename(File image) {
+		String filename = image.getName().toLowerCase();
+		int extensionIndex = filename.lastIndexOf('.');
+		if(extensionIndex > 0) {
+			String name = filename.substring(0, extensionIndex);
+			String extension = filename.substring(extensionIndex);
+			filename = StringHelper.transformDisplayNameToFileSystemName(name) + extension;
+		} else {
+			filename = StringHelper.transformDisplayNameToFileSystemName(filename);
+		}
+		if(attachmentsFilenames.contains(filename)) {
+			for(int i=1; i<1000; i++) {
+				String nextFilename = i +"_" + filename;
+				if(!attachmentsFilenames.contains(nextFilename)) {
+					filename = nextFilename;
+					attachmentsFilenames.add(filename);
+					break;
+				}
+			}
+		} else {
+			attachmentsFilenames.add(filename);
+		}
+		return filename;	
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java
index e7939387212..f48c1a4eb61 100644
--- a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java
+++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumRTFFormatter.java
@@ -35,6 +35,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -46,6 +47,7 @@ import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Formatter;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.ZipUtil;
 import org.olat.core.util.filter.FilterFactory;
@@ -55,8 +57,8 @@ import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.modules.fo.ForumManager;
-import org.olat.modules.fo.MessageNode;
+import org.olat.modules.fo.archiver.MessageNode;
+import org.olat.modules.fo.manager.ForumManager;
 
 /**
  * Initial Date: Nov 09, 2005 <br>
@@ -88,16 +90,16 @@ public class ForumRTFFormatter extends ForumFormatter {
 	
 	//TODO: (LD) translate this!
 	private String HIDDEN_STR = "VERBORGEN";
-		
+	
 	/**
 	 * 
 	 * @param container
 	 * @param filePerThread
 	 */
 
-	public ForumRTFFormatter(VFSContainer container, boolean filePerThread) {
+	public ForumRTFFormatter(VFSContainer container, boolean filePerThread, Locale locale) {
 		// init String Buffer in ForumFormatter
-		super();
+		super(locale);
 		// where to write
 		this.container = container;
 		this.filePerThread = filePerThread;
@@ -140,9 +142,17 @@ public class ForumRTFFormatter extends ForumFormatter {
 		sb.append("} \\line ");
 		sb.append("{\\pard \\f0\\fs15 created: ");
 		// Creator and creation date
-		sb.append(mn.getCreator().getUser().getProperty(UserConstants.FIRSTNAME, null));
-		sb.append(", ");
-		sb.append(mn.getCreator().getUser().getProperty(UserConstants.LASTNAME, null));
+		if(StringHelper.containsNonWhitespace(mn.getPseudonym())) {
+			sb.append(mn.getPseudonym())
+			  .append(" ")
+			  .append(translator.translate("pseudonym.suffix"));
+		} else if(mn.isGuest()) {
+			sb.append(translator.translate("guest"));
+		} else {
+			sb.append(mn.getCreator().getUser().getProperty(UserConstants.FIRSTNAME, null));
+			sb.append(", ");
+			sb.append(mn.getCreator().getUser().getProperty(UserConstants.LASTNAME, null));
+		}
 		sb.append(" ");
 		sb.append(mn.getCreationDate().toString());
 		// Modifier and modified date
@@ -411,10 +421,10 @@ public class ForumRTFFormatter extends ForumFormatter {
 	 * and adds it to the input container.
 	 * 
 	 * @param messageNode
-	 * @param container
+	 * @param imageContainer
 	 * @return
 	 */
-	private List<String> addImagesToVFSContainer(MessageNode messageNode, VFSContainer container) {
+	private List<String> addImagesToVFSContainer(MessageNode messageNode, VFSContainer imageContainer) {
 		List<String> fileNameList = new ArrayList<String>();
 		String iconPath = null;
 		if(messageNode.isClosed() && messageNode.isSticky()) {
@@ -428,7 +438,7 @@ public class ForumRTFFormatter extends ForumFormatter {
 			File file = new File(iconPath);
 			if (file.exists()) {
 				LocalFileImpl imgFile = new LocalFileImpl(file);
-				container.copyFrom(imgFile);
+				imageContainer.copyFrom(imgFile);
 				fileNameList.add(file.getName());
 			} else {
 				log.error("Could not find image for forum RTF formatter::" + iconPath);
diff --git a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java
index ea3c1df4ca2..b040af9caa0 100644
--- a/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java
+++ b/src/main/java/org/olat/modules/fo/archiver/formatters/ForumStreamedRTFFormatter.java
@@ -30,6 +30,7 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
@@ -43,14 +44,15 @@ import org.olat.core.id.UserConstants;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.ZipUtil;
 import org.olat.core.util.filter.FilterFactory;
 import org.olat.core.util.nodes.INode;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
-import org.olat.modules.fo.ForumManager;
-import org.olat.modules.fo.MessageNode;
+import org.olat.modules.fo.archiver.MessageNode;
+import org.olat.modules.fo.manager.ForumManager;
 
 /**
  * Initial Date: Dec 19, 2013 <br>
@@ -88,9 +90,9 @@ public class ForumStreamedRTFFormatter extends ForumFormatter {
 	 * @param filePerThread
 	 */
 
-	public ForumStreamedRTFFormatter(ZipOutputStream exportStream, String path, boolean filePerThread) {
+	public ForumStreamedRTFFormatter(ZipOutputStream exportStream, String path, boolean filePerThread, Locale locale) {
 		// init String Buffer in ForumFormatter
-		super();
+		super(locale);
 		// where to write
 		this.exportStream = exportStream;
 		this.filePerThread = filePerThread;
@@ -126,9 +128,17 @@ public class ForumStreamedRTFFormatter extends ForumFormatter {
 		sb.append("} \\line ");
 		sb.append("{\\pard \\f0\\fs15 created: ");
 		// Creator and creation date
-		sb.append(mn.getCreator().getUser().getProperty(UserConstants.FIRSTNAME, null));
-		sb.append(", ");
-		sb.append(mn.getCreator().getUser().getProperty(UserConstants.LASTNAME, null));
+		if(StringHelper.containsNonWhitespace(mn.getPseudonym())) {
+			sb.append(mn.getPseudonym())
+			  .append(" ")
+			  .append(translator.translate("pseudonym.suffix"));
+		} else if(mn.isGuest()) {
+			sb.append(translator.translate("guest"));
+		} else {
+			sb.append(mn.getCreator().getUser().getProperty(UserConstants.FIRSTNAME, null));
+			sb.append(", ");
+			sb.append(mn.getCreator().getUser().getProperty(UserConstants.LASTNAME, null));
+		}
 		sb.append(" ");
 		sb.append(mn.getCreationDate().toString());
 		// Modifier and modified date
@@ -353,14 +363,14 @@ public class ForumStreamedRTFFormatter extends ForumFormatter {
 	 * @return title prefix for hidden forum threads.
 	 */
 	private String getTitlePrefix(MessageNode messageNode) {
-		StringBuilder sb = new StringBuilder();
+		StringBuilder titleSb = new StringBuilder();
 		if(messageNode.isHidden()) {
-			sb.append(HIDDEN_STR);
+			titleSb.append(HIDDEN_STR);
 		} 		
-		if(sb.length()>1) {
-			sb.append(": ");
+		if(titleSb.length()>1) {
+			titleSb.append(": ");
 		}
-		return sb.toString();
+		return titleSb.toString();
 	}
 	
 	/**
@@ -369,13 +379,13 @@ public class ForumStreamedRTFFormatter extends ForumFormatter {
 	 * @return the RTF image section for the input messageNode.
 	 */
 	private String getImageRTF(MessageNode messageNode) {			
-		StringBuilder sb = new StringBuilder();
-		for(String fileName : addImagesToVFSContainer(messageNode)) {
-			sb.append("{\\field\\fldedit{\\*\\fldinst { INCLUDEPICTURE ")
-			  .append("\"").append(fileName).append("\"")
+		StringBuilder imgSb = new StringBuilder();
+		for(String imageName : addImagesToVFSContainer(messageNode)) {
+			imgSb.append("{\\field\\fldedit{\\*\\fldinst { INCLUDEPICTURE ")
+			  .append("\"").append(imageName).append("\"")
 			  .append(" \\\\d }}{\\fldrslt {}}}");			
 		}				
-		return sb.toString();
+		return imgSb.toString();
 	}
 	
 	/**
diff --git a/src/main/java/org/olat/modules/fo/manager/ForumManager.java b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
new file mode 100644
index 00000000000..a85da0265a2
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
@@ -0,0 +1,974 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+
+package org.olat.modules.fo.manager;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.TemporalType;
+import javax.persistence.TypedQuery;
+
+import org.olat.basesecurity.IdentityRef;
+import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.commons.services.mark.MarkingService;
+import org.olat.core.commons.services.mark.impl.MarkImpl;
+import org.olat.core.commons.services.text.TextService;
+import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.logging.AssertException;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumChangedEvent;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.MessageLight;
+import org.olat.modules.fo.MessageRef;
+import org.olat.modules.fo.QuoteAndTagFilter;
+import org.olat.modules.fo.Status;
+import org.olat.modules.fo.model.ForumImpl;
+import org.olat.modules.fo.model.ForumThread;
+import org.olat.modules.fo.model.ForumUserStatistics;
+import org.olat.modules.fo.model.MessageImpl;
+import org.olat.modules.fo.model.MessageLightImpl;
+import org.olat.modules.fo.model.MessageStatistics;
+import org.olat.modules.fo.model.ReadMessageImpl;
+import org.olat.modules.fo.ui.MessagePeekview;
+import org.olat.user.UserManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * @author Felix Jost
+ */
+@Service
+public class ForumManager {
+	private static final OLog log = Tracing.createLoggerFor(ForumManager.class);
+	
+	private static ForumManager INSTANCE;
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private TextService txtService;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private MarkingService markingService;
+
+	/**
+	 * [spring]
+	 */
+	private ForumManager() {
+		INSTANCE = this;
+	}
+
+	/**
+	 * @return the singleton
+	 */
+	public static ForumManager getInstance() {
+		return INSTANCE;
+	}
+	
+	public int countThread(Long messageKey) {
+		String query = "select count(msg) from fomessage as msg where msg.key=:messageKey or msg.threadtop.key=:messageKey";
+		List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(query, Number.class)
+				.setParameter("messageKey", messageKey)
+				.getResultList();
+		return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
+	}
+
+	/**
+	 * @param msgid msg id of the topthread
+	 * @return List messages
+	 */
+	public List<Message> getThread(Long msgid) {
+		return getThread(msgid, 0, -1, Message.OrderBy.creationDate, true); 
+	}
+	
+	public List<Message> getThread(Long msgid, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" where msg.key=:messageKey or msg.threadtop.key=:messageKey");
+		if(orderBy != null) {
+			query.append(" order by msg.").append(orderBy.name()).append(asc ? " ASC " : " DESC ");
+		}
+		
+		TypedQuery<Message> dbQuery = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), Message.class)
+				.setParameter("messageKey", msgid)
+				.setFirstResult(firstResult);
+		if(maxResults > 0) {
+			dbQuery.setMaxResults(maxResults);
+		}
+		return  dbQuery.getResultList();
+	}
+
+	public List<Long> getAllForumKeys(){
+		return dbInstance.getCurrentEntityManager()
+				.createNamedQuery("getAllForumKeys", Long.class)
+				.getResultList();
+	}
+
+	/**
+	 * 
+	 * @param forum_id
+	 * @return
+	 */
+	public int countThreadsByForumID(Long forum_id) {
+		return countMessagesByForumID(forum_id, true);
+	}
+	
+	/**
+	 * 
+	 * @param forum_id
+	 * @param start
+	 * @param limit
+	 * @param orderBy
+	 * @param asc
+	 * @return
+	 */
+	public List<Message> getThreadsByForumID(Long forum_id, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
+		return getMessagesByForumID(forum_id, firstResult, maxResults, true, orderBy, asc);
+	}
+	
+	/**
+	 * 
+	 * @param forum
+	 * @return
+	 */
+	public List<Message> getMessagesByForum(Forum forum){
+		if (forum == null) return new ArrayList<Message>(0); // fxdiff: while indexing it can somehow occur, that forum is null!
+		return getMessagesByForumID(forum.getKey(),  0, -1, null, true);
+	}
+	
+	/**
+	 * 
+	 * @param forum_id
+	 * @param start
+	 * @param limit
+	 * @param orderBy
+	 * @param asc
+	 * @return
+	 */
+	public List<Message> getMessagesByForumID(Long forum_id, int firstResult, int maxResults, Message.OrderBy orderBy, boolean asc) {
+		return getMessagesByForumID(forum_id, firstResult, maxResults, false, orderBy, asc);
+	}
+	
+	/**
+	 * 
+	 * @param forumKey
+	 * @param start
+	 * @param limit
+	 * @param onlyThreads
+	 * @param orderBy
+	 * @param asc
+	 * @return
+	 */
+	private List<Message> getMessagesByForumID(Long forumKey, int firstResult, int maxResults, boolean onlyThreads, Message.OrderBy orderBy, boolean asc) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessage as msg")
+		     .append(" inner join fetch msg.creator as creator")
+		     .append(" where msg.forum.key=:forumKey ");
+		if(onlyThreads) {
+			query.append(" and msg.parent is null");
+		}
+		if(orderBy != null) {
+			query.append(" order by msg.").append(orderBy.name()).append(asc ? " ASC" : " DESC");
+		}
+		
+		TypedQuery<Message> dbQuery = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), Message.class)
+				.setParameter("forumKey", forumKey)
+				.setFirstResult(firstResult);
+		if(maxResults > 0) {
+			dbQuery.setMaxResults(maxResults);
+		}
+		return dbQuery.getResultList();
+	}
+	
+	private int countMessagesByForumID(Long forumKey, boolean onlyThreads) {
+		StringBuilder query = new StringBuilder();
+		query.append("select count(msg) from fomessage as msg")
+		     .append(" where msg.forum.key=:forumKey");
+		if(onlyThreads) {
+			query.append(" and msg.parent is null");
+		}
+		
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), Number.class)
+				.setParameter("forumKey", forumKey)
+				.getSingleResult()
+				.intValue();
+	}
+	
+	/**
+	 * Return the title of a message of the forum.
+	 */
+	public Integer countMessagesByForumID(Long forum_id) {
+		return countMessagesByForumID(forum_id, false);
+	}
+	
+	public List<MessagePeekview> getPeekviewMessages(Forum forum, int maxResults) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fopeekviewmessage as msg where msg.forumKey=:forumKey order by msg.creationDate desc");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessagePeekview.class)
+				.setParameter("forumKey", forum.getKey())
+				.setFirstResult(0)
+				.setMaxResults(maxResults)
+				.getResultList();
+	}
+	
+	public String getForumNameForLogging(Forum forum) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg.title from fomessage as msg where msg.forum.key=:forumKey");
+
+		List<String> titles = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), String.class)
+				.setParameter("forumKey", forum.getKey())
+				.setFirstResult(0)
+				.setMaxResults(1)
+				.getResultList();
+		return titles == null || titles.isEmpty() || titles.get(0) == null ? null : titles.get(0);
+	}
+	
+	
+	public List<ForumThread> getForumThreads(Forum forum, Identity identity) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select msg ")
+		  .append(" , (select count(replies.key) from fomessage as replies")
+		  .append("  where replies.threadtop.key=msg.key and replies.forum.key=:forumKey")
+		  .append(" ) as numOfMessages")
+		  .append(" , (select max(replies.lastModified) from fomessage as replies")
+		  .append("  where replies.threadtop.key=msg.key and replies.forum.key=:forumKey")
+		  .append(" ) as lastModified");
+		if(identity != null) {
+			sb.append(" ,(select count(mark.key) from ").append(MarkImpl.class.getName()).append(" as mark ")
+			  .append("   where mark.creator.key=:identityKey and mark.resId=:forumKey and cast(msg.key as string) = mark.resSubPath and mark.resName='Forum'")
+			  .append(" ) as marks");
+			
+		}
+		
+		sb.append(" from fomessage as msg ")
+		  .append(" left join fetch msg.creator as creator")
+		  .append(" where msg.forum.key=:forumKey and msg.threadtop is null");
+
+		TypedQuery<Object[]> objectsQuery = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Object[].class)
+				.setParameter("forumKey", forum.getKey());
+		if(identity != null) {
+			objectsQuery.setParameter("identityKey", identity.getKey());
+		}
+		
+		List<Object[]> objects = objectsQuery.getResultList();
+		List<ForumThread> threadList = new ArrayList<>(objects.size());
+		for(Object[] object:objects) {
+			Message msg = (Message)object[0];
+			Number numOfMessagesLong = (Number)object[1];
+			Date lastModifed = (Date)object[2];
+			int numOfMessages = numOfMessagesLong == null ? 1 : numOfMessagesLong.intValue() + 1;
+			String creator = userManager.getUserDisplayName(msg.getCreator());
+			ForumThread thread = new ForumThread(msg, creator, lastModifed, numOfMessages);
+			
+			if(identity != null) {
+				Number numOfMarkedMessagesLong = (Number)object[3];
+				int numOfMarkedMessages = numOfMarkedMessagesLong == null ? 0 : numOfMarkedMessagesLong.intValue();
+				thread.setMarkedMessages(numOfMarkedMessages);
+			}
+			
+			threadList.add(thread);
+		}
+		return threadList;
+	}
+	
+	public Message getMessageById(Long messageKey) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as creator")
+		     .append(" where msg.key=:messageKey");
+		
+		List<Message> messages = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), Message.class)
+				.setParameter("messageKey", messageKey)
+				.getResultList();
+		return messages == null || messages.isEmpty() ? null : messages.get(0);
+	}
+	
+	public String getPseudonym(Forum forum, IdentityRef identity) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg.pseudonym from fomessage as msg")
+		     .append(" where msg.creator.key=:identityKey and msg.forum.key=:forumKey and msg.pseudonym is not null");
+		
+		List<String> pseudonyms = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), String.class)
+				.setParameter("identityKey", identity.getKey())
+				.setParameter("forumKey", forum.getKey())
+				.getResultList();
+		return pseudonyms == null || pseudonyms.isEmpty() ? null : pseudonyms.get(0);
+	}
+	
+	public MessageLight getLightMessageById(Long messageKey) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" where msg.key=:messageKey ");
+		
+		List<MessageLight> messages = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("messageKey", messageKey)
+				.getResultList();
+		return messages == null || messages.isEmpty() ? null : messages.get(0);
+	}
+	
+	public List<MessageLight> getLightMessagesByForum(Forum forum) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from folightmessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" left join fetch msg.threadtop as threadtop")
+		     .append(" where msg.forumKey=:forumKey");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("forumKey", forum.getKey())
+				.getResultList();
+	}
+	
+	public List<MessageLight> getLightMessagesByThread(Forum forum, MessageRef thread) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from folightmessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" inner join fetch msg.threadtop as threadtop")
+		     .append(" where msg.forumKey=:forumKey and threadtop.key=:threadKey");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("forumKey", forum.getKey())
+				.setParameter("threadKey", thread.getKey())
+				.getResultList();
+	}
+	
+	public List<MessageLight> getLightMessagesOfGuests(Forum forum) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from folightmessage as msg")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" left join fetch msg.threadtop as threadtop")
+		     .append(" where msg.forumKey=:forumKey and msg.guest=true");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("forumKey", forum.getKey())
+				.getResultList();
+	}
+	
+	public List<MessageLight> getLightMessagesByUser(Forum forum, IdentityRef user) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from folightmessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" left join fetch msg.threadtop as threadtop")
+		     .append(" where msg.forumKey=:forumKey and msg.creator.key=:userKey and msg.pseudonym is null");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("forumKey", forum.getKey())
+				.setParameter("userKey", user.getKey())
+				.getResultList();
+	}
+	
+	public List<MessageLight> getLightMessagesByUserUnderPseudo(Forum forum, IdentityRef user, String pseudonym) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from folightmessage as msg")
+		     .append(" left join fetch msg.creator as creator")
+		     .append(" left join fetch msg.modifier as modifier")
+		     .append(" left join fetch msg.threadtop as threadtop")
+		     .append(" where msg.forumKey=:forumKey and msg.creator.key=:userKey and msg.pseudonym=:pseudonym");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageLight.class)
+				.setParameter("forumKey", forum.getKey())
+				.setParameter("userKey", user.getKey())
+				.setParameter("pseudonym", pseudonym)
+				.getResultList();
+	}
+	
+	public List<ForumUserStatistics> getForumUserStatistics(Forum forum) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessageforstatistics as msg")
+		     .append(" left join msg.creator as creator")
+		     .append(" where msg.forumKey=:forumKey");
+
+		List<MessageStatistics> statistics = dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), MessageStatistics.class)
+				.setParameter("forumKey", forum.getKey())
+				.getResultList();
+
+
+		Map<StatisticsKey, ForumUserStatistics> identityKeyToStats = new HashMap<>();
+		for(MessageStatistics statistic:statistics) {
+			StatisticsKey key = new StatisticsKey(statistic);
+
+			ForumUserStatistics userStats;
+			if(identityKeyToStats.containsKey(key)) {
+				userStats = identityKeyToStats.get(key);
+			} else {
+				userStats = new ForumUserStatistics(statistic.getCreator(), statistic.getPseudonym(), statistic.isGuest());
+				identityKeyToStats.put(key, userStats);
+			}
+
+			userStats.addNumOfCharacters(statistic.getNumOfCharacters());
+			userStats.addNumOfWords(statistic.getNumOfWords());
+			if(statistic.getThreadtopKey() == null) {
+				userStats.addNumOfThreads(1);
+			} else {
+				userStats.addNumOfReplies(1);
+			}
+			if(userStats.getLastModified() == null ||
+					(statistic.getLastModified() != null
+						&& statistic.getLastModified().after(userStats.getLastModified()))) {
+				userStats.setLastModified(statistic.getLastModified());
+			}
+		}
+		return new ArrayList<>(identityKeyToStats.values());
+	}
+	
+	private static class StatisticsKey {
+		
+		private boolean guest;
+		private String pseudonym;
+		private Long identityKey;
+		
+		public StatisticsKey(MessageStatistics statistic) {
+			guest = statistic.isGuest();
+			pseudonym = statistic.getPseudonym();
+			if(statistic.getCreator() != null) {
+				identityKey = statistic.getCreator().getKey();
+			}
+		}
+
+		@Override
+		public int hashCode() {
+			return guest ? 27534 :
+				((identityKey == null ? 3467 : identityKey.hashCode()) + (pseudonym == null ? 567 : pseudonym.hashCode()));
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if(obj == this) {
+				return true;
+			}
+			if(obj instanceof StatisticsKey) {
+				StatisticsKey key = (StatisticsKey)obj;
+				if(guest && key.guest) {
+					return (pseudonym == null && key.pseudonym == null) || (pseudonym != null && pseudonym.equals(key.pseudonym));
+				}
+				return identityKey != null && identityKey.equals(key.identityKey)
+						&& ((pseudonym == null && key.pseudonym == null) || (pseudonym != null && pseudonym.equals(key.pseudonym)));
+			}
+			return false;
+		}
+	}
+	
+	/**
+	 * Implementation with one entry per message.
+	 * @param identity
+	 * @param forumkey
+	 * @return number of read messages
+	 */
+	public int countReadMessagesByUserAndForum(IdentityRef identity, Long forumkey) {
+		String query = "select count(msg) from foreadmessage as msg where msg.identity.key=:identityKey and msg.forum.key=:forumKey";
+		List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(query, Number.class)
+				.setParameter("identityKey", identity.getKey())
+				.setParameter("forumKey", forumkey)
+				.getResultList();
+		return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
+	}
+
+	/**
+	 * @param forumKey
+	 * @param latestRead
+	 * @return a List of Object[] with a key(Long), title(String), a creator(Identity), and
+	 *         the lastmodified(Date) of the messages of the forum with the given
+	 *         key and with last modification after the "latestRead" Date
+	 */
+	public List<Message> getNewMessageInfo(Long forumKey, Date latestRead) {
+		StringBuilder query = new StringBuilder();
+		query.append("select msg from fomessage as msg ")
+		     .append(" inner join fetch msg.creator as creator")
+		     .append(" where msg.forum.key=:forumKey and msg.lastModified>:latestRead order by msg.lastModified desc");
+
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(query.toString(), Message.class)
+				.setParameter("forumKey", forumKey.longValue())
+				.setParameter("latestRead", latestRead, TemporalType.TIMESTAMP)
+				.getResultList();
+	}
+
+	/**
+	 * @return the newly created and persisted forum
+	 */
+	public Forum addAForum() {
+		ForumImpl fo = new ForumImpl();
+		fo.setCreationDate(new Date());
+		dbInstance.getCurrentEntityManager().persist(fo);
+		return fo;
+	}
+
+	/**
+	 * @param forumKey
+	 * @return the forum with the given key
+	 */
+	public Forum loadForum(Long forumKey) {
+		String q = "select fo from forum as fo where fo.key=:forumKey";
+		List<Forum> forumList = dbInstance.getCurrentEntityManager()
+				.createQuery(q, Forum.class)
+				.setParameter("forumKey", forumKey)
+				.getResultList();
+		return forumList == null || forumList.isEmpty() ? null : forumList.get(0);
+	}
+
+	/**
+	 * @param forumKey
+	 */
+	public void deleteForum(Long forumKey) {
+		Forum foToDel = loadForum(forumKey);
+		if (foToDel == null) throw new AssertException("forum to delete was not found: key=" + forumKey);
+		// delete properties, messages and the forum itself
+		doDeleteForum(foToDel);
+		// delete directory for messages with attachments
+		deleteForumContainer(forumKey);
+	}
+
+	/**
+	 * deletes all messages belonging to this forum and the forum entry itself
+	 * 
+	 * @param forum
+	 */
+	private void doDeleteForum(final Forum forum) {
+		final Long forumKey = forum.getKey();
+		//delete read messsages
+		String deleteReadMessages = "delete from foreadmessage as rmsg where rmsg.forum.key=:forumKey";
+		dbInstance.getCurrentEntityManager().createQuery(deleteReadMessages)
+			.setParameter("forumKey", forumKey)
+			.executeUpdate();
+		// delete messages
+		String deleteMessages = "delete from fomessage as msg where msg.forum.key=:forumKey";
+		dbInstance.getCurrentEntityManager().createQuery(deleteMessages)
+			.setParameter("forumKey", forumKey)
+			.executeUpdate();
+		// delete forum
+		String deleteForum = "delete from forum as fo where fo.key=:forumKey";
+		dbInstance.getCurrentEntityManager().createQuery(deleteForum)
+			.setParameter("forumKey", forumKey)
+			.executeUpdate();
+		//delete all flags
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forum.getKey());
+		markingService.getMarkManager().deleteMarks(ores);
+	}
+
+	/**
+	 * sets the parent and threadtop of the message automatically
+	 * 
+	 * @param newMessage the new message which has title and body set
+	 * @param creator
+	 * @param replyToMessage
+	 */
+	public void replyToMessage(Message newMessage, Message replyToMessage) {
+		Message top = replyToMessage.getThreadtop();
+		newMessage.setThreadtop((top != null ? top : replyToMessage));
+		newMessage.setParent(replyToMessage);
+		
+		saveMessage(newMessage);
+	}
+
+	/**
+	 * @param creator
+	 * @param forum
+	 * @param topMessage
+	 */
+	public void addTopMessage(Message topMessage) {
+		topMessage.setParent(null);
+		topMessage.setThreadtop(null);
+		saveMessage(topMessage);
+	}
+
+	/**
+	 * @param messageKey
+	 * @return the message with the given messageKey
+	 */
+	public Message loadMessage(Long messageKey) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select msg from fomessage msg where msg.key=:messageKey");
+		List<Message> messages = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Message.class)
+				.setParameter("messageKey", messageKey)
+				.getResultList();
+		return messages == null || messages.isEmpty() ? null : messages.get(0);
+	}
+
+	private Message saveMessage(Message m) {
+		updateCounters(m);
+		m.setLastModified(new Date());
+		if(m.getKey() == null) {
+			dbInstance.getCurrentEntityManager().persist(m);
+		} else {
+			m = dbInstance.getCurrentEntityManager().merge(m);
+		}
+		return m;
+	}
+
+	/**
+	 * creates (in RAM only) a new Message<br>
+	 * fill the values and use saveMessage to make it persistent
+	 * 
+	 * @return the message
+	 * @see ForumManager#saveMessage(Message)
+	 */
+	public Message createMessage(Forum forum, Identity creator, boolean guest) {
+		MessageImpl message = new MessageImpl();
+		message.setForum(forum);
+		if(guest) {
+			message.setGuest(guest);
+		} else {
+			message.setCreator(creator);
+		}
+		return message;
+	}
+
+	/**
+	 * Update message and fire MultiUserEvent, if any provided. If a not null
+	 * ForumChangedEvent object is provided, then fire event to listeners.
+	 * 
+	 * @param m
+	 * @param updateLastModifiedDate
+	 *            true: the last modified date is updated to trigger a
+	 *            notification; false: last modified date is not modified and no
+	 *            notification is sent
+	 * @param event
+	 */
+	public Message updateMessage(Message message, boolean updateLastModifiedDate) {
+		updateCounters(message);
+		// OLAT-6295 Only update last modified for the operations edit(update), show, and open. 
+		// Don't update the last modified date for the operations close, hide, move and split.
+		if (updateLastModifiedDate) {
+			message.setLastModified(new Date());
+		}
+		return dbInstance.getCurrentEntityManager().merge(message);
+	}
+
+	/**
+	 * @param forumKey
+	 * @param m
+	 */
+	public void deleteMessageTree(Long forumKey, Message m) {
+		deleteMessageRecursion(forumKey, m);
+	}
+
+	private void deleteMessageRecursion(final Long forumKey, Message m) {
+		deleteMessageContainer(forumKey, m.getKey());
+		
+		String query = "select msg from fomessage as msg where msg.parent.key=:parentKey";
+		List<Message> messages = dbInstance.getCurrentEntityManager().createQuery(query, Message.class)
+				.setParameter("parentKey", m.getKey()).getResultList();
+		for (Message element:messages) {
+			deleteMessageRecursion(forumKey, element);
+		}
+
+		// make sure the message is reloaded if it is not in the hibernate session cache
+		Message reloadedMessage = dbInstance.getCurrentEntityManager().find(MessageImpl.class, m.getKey());
+		// delete all properties of one single message
+		deleteMessageProperties(forumKey, reloadedMessage);
+		dbInstance.getCurrentEntityManager().remove(reloadedMessage);
+		
+		//delete all flags
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, forumKey);
+		markingService.getMarkManager().deleteMarks(ores, m.getKey().toString());
+		
+		if(log.isDebug()){
+			log.debug("Deleting message ", m.getKey().toString());
+		}
+	}
+
+	/**
+	 * @param m
+	 * @return true if the message has children
+	 */
+	public boolean hasChildren(Message m) {
+		String q = "select count(msg) from fomessage msg where msg.parent.key=:parentKey";
+		List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(q, Number.class)
+				.setParameter("parentKey", m.getKey())
+				.getResultList();
+		return count == null || count.isEmpty() || count.get(0) == null ? false : count.get(0).longValue() > 0;
+	}
+	
+	public int countMessageChildren(Long messageKey ) {
+		String q = "select count(msg) from fomessage msg where msg.parent.key=:parentKey";
+		List<Number> count = dbInstance.getCurrentEntityManager()
+				.createQuery(q, Number.class)
+				.setParameter("parentKey", messageKey)
+				.getResultList();
+		return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
+	}
+
+	/**
+	 * deletes entry of one message
+	 */
+	private void deleteMessageProperties(Long forumKey, Message m) {
+		String query = "delete from foreadmessage as rmsg where rmsg.forum.key=:forumKey and rmsg.message.key=:messageKey";
+		dbInstance.getCurrentEntityManager().createQuery(query)
+			.setParameter("forumKey", forumKey)
+			.setParameter("messageKey", m.getKey())
+			.executeUpdate();
+	}
+
+	/**
+	 * @param forumKey
+	 * @param messageKey
+	 * @return the valid container for the attachments to place into
+	 */
+	public VFSContainer getMessageContainer(Long forumKey, Long messageKey) {
+		VFSContainer forumContainer = getForumContainer(forumKey);
+		VFSItem messageContainer = forumContainer.resolve(messageKey.toString());
+		if(messageContainer == null) {
+			return forumContainer.createChildContainer(messageKey.toString());
+		} else if(messageContainer instanceof VFSContainer) {
+			return (VFSContainer)messageContainer;
+		}
+		log.error("The following message container is not a directory: " + messageContainer);
+		return null;
+	}
+	
+	private void moveMessageContainer(Long fromForumKey, Long fromMessageKey, Long toForumKey, Long toMessageKey) {
+		// copy message container
+		VFSContainer toMessageContainer = getMessageContainer(toForumKey, toMessageKey);
+		VFSContainer fromMessageContainer = getMessageContainer(fromForumKey, fromMessageKey);
+		for (VFSItem vfsItem : fromMessageContainer.getItems()) {
+			toMessageContainer.copyFrom(vfsItem);
+		}
+	}
+
+	private void deleteMessageContainer(Long forumKey, Long messageKey) {
+		VFSContainer mContainer = getMessageContainer(forumKey, messageKey);
+		mContainer.delete();
+	}
+
+	private void deleteForumContainer(Long forumKey) {
+		VFSContainer fContainer = getForumContainer(forumKey);
+		fContainer.delete();
+	}
+
+	public VFSContainer getForumContainer(Long forumKey) {
+		OlatRootFolderImpl fContainer = new OlatRootFolderImpl("/forum", null);
+		VFSItem forumContainer = fContainer.resolve(forumKey.toString());
+		if(forumContainer == null) {
+			return fContainer.createChildContainer(forumKey.toString());
+		} else if(forumContainer instanceof VFSContainer) {
+			return (VFSContainer)forumContainer;
+		}
+		log.error("The following forum container is not a directory: " + forumContainer);
+		return null;
+	}
+	
+	/**
+	 * Splits the current thread starting from the current message.
+	 * It updates the messages of the selected subthread by setting the Parent and the Threadtop.
+	 * The method send a SPLIT event, and make a commit before sending it.
+	 * 
+	 * @param msgid
+	 * @return the top message of the newly created thread.
+	 */
+	public Message splitThread(Message msg) {
+		Message newTopMessage = null;
+		if(msg.getThreadtop() == null) {
+			newTopMessage = msg;
+		} else {	
+			//it only make sense to split a thread if the current message is not a threadtop message.	
+			List<Message> threadList = getThread(msg.getThreadtop().getKey());
+			List<Message> subthreadList = new ArrayList<Message>();
+			subthreadList.add(msg);
+			getSubthread(msg, threadList, subthreadList);
+
+			Iterator<Message> messageIterator = subthreadList.iterator();
+			Message firstMessage = null;
+			if (messageIterator.hasNext()) {
+				firstMessage = messageIterator.next();
+				firstMessage = getMessageById(firstMessage.getKey());
+				firstMessage.setParent(null);
+				firstMessage.setThreadtop(null);
+				updateMessage(firstMessage, false);
+				newTopMessage = firstMessage;
+			}
+			while (firstMessage != null && messageIterator.hasNext()) {
+				Message message = messageIterator.next();
+				message = getMessageById(firstMessage.getKey());
+				message.setThreadtop(firstMessage);
+				updateMessage(message, false);
+			}
+
+			dbInstance.commit();// before sending async event
+			ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.SPLIT, newTopMessage.getKey(), null);
+			CoordinatorManager.getInstance().getCoordinator().getEventBus()
+				.fireEventToListenersOf(event, firstMessage.getForum());
+		}		
+		return newTopMessage;
+	}
+	
+	/**
+	 * Moves the current message from the current thread in another thread.
+	 * 
+	 * @param msg
+	 * @param topMsg
+	 * @return the moved message
+	 */
+	public Message moveMessage(Message msg, Message topMsg) {
+		List<Message> oldThreadList = getThread(msg.getThreadtop().getKey());
+		List<Message> subThreadList = new ArrayList<Message>();
+		getSubthread(msg, oldThreadList, subThreadList);
+		// one has to set a new parent for all childs of the moved message
+		// first message of sublist has to get the parent from the moved message
+		for (Message childMessage : subThreadList) {
+			childMessage = getMessageById(childMessage.getKey());
+			childMessage.setParent(msg.getParent());
+			updateMessage(childMessage, false);
+		}
+		
+		// now move the message to the choosen thread
+		final Message oldMessage = getMessageById(msg.getKey());
+		Message message = createMessage(oldMessage.getForum(), oldMessage.getCreator(), oldMessage.isGuest());
+		message.setModifier(oldMessage.getModifier());
+		message.setLastModified(oldMessage.getLastModified()); // OLAT-6295
+		message.setTitle(oldMessage.getTitle());
+		message.setBody(oldMessage.getBody());
+		message.setPseudonym(oldMessage.getPseudonym());
+		message.setThreadtop(topMsg);
+		message.setParent(topMsg);
+		Status status = Status.getStatus(oldMessage.getStatusCode());
+		status.setMoved(true);
+		message.setStatusCode(Status.getStatusCode(status));
+		saveMessage(message);
+		
+		//move marks
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance(Forum.class, msg.getForum().getKey());
+		markingService.getMarkManager().moveMarks(ores, msg.getKey().toString(), message.getKey().toString());
+		
+		moveMessageContainer(oldMessage.getForum().getKey(), oldMessage.getKey(), message.getForum().getKey(), message.getKey());
+		deleteMessageRecursion(oldMessage.getForum().getKey(), oldMessage);
+		return message;
+	}
+	
+	/**
+	 * This is a recursive method. The subthreadList in an ordered list with all descendents of the input msg.
+	 * @param msg
+	 * @param threadList
+	 * @param subthreadList
+	 */
+	private void getSubthread(Message msg, List<Message> threadList, List<Message> subthreadList) {		
+		Iterator<Message> listIterator = threadList.iterator();
+		while(listIterator.hasNext()) {
+			Message currMessage = listIterator.next();
+			if(currMessage.getParent()!=null && currMessage.getParent().getKey().equals(msg.getKey())) {
+				subthreadList.add(currMessage);				
+				getSubthread(currMessage, threadList, subthreadList);
+			}
+		}		
+	}
+	
+	/**
+	 * 
+	 * @param identity
+	 * @param forum
+	 * @return a set with the read messages keys for the input identity and forum.  
+	 */
+	public Set<Long> getReadSet(IdentityRef identity, Forum forum) {	
+		StringBuilder query = new StringBuilder();
+		query.append("select rmsg.message.key from foreadmessage as rmsg")
+		     .append(" inner join rmsg.message as msg")
+		     .append(" where rmsg.forum.key=:forumKey and rmsg.identity.key=:identityKey");
+		List<Long> messageKeys = dbInstance.getCurrentEntityManager()
+			.createQuery(query.toString(), Long.class)
+			.setParameter("forumKey", forum.getKey())
+			.setParameter("identityKey", identity.getKey())
+			.getResultList();
+		return new HashSet<Long>(messageKeys);	
+	}
+	
+	/**
+	 * Implementation with one entry per forum message.
+	 * Adds a new entry into the ReadMessage for the input message and identity.
+	 * @param msg
+	 * @param identity
+	 */
+	public void markAsRead(Identity identity, Forum forum, MessageLight msg) {		
+		//Check if the message was not already deleted
+		Message retrievedMessage = loadMessage(msg.getKey());
+		if(retrievedMessage != null) {
+			ReadMessageImpl readMessage = new ReadMessageImpl();
+			readMessage.setIdentity(identity);
+			if(msg instanceof MessageLightImpl) {
+				readMessage.setMessage(msg);
+			} else {
+				msg = dbInstance.getCurrentEntityManager().getReference(MessageLightImpl.class, msg.getKey());
+				readMessage.setMessage(msg);
+			}
+			
+			readMessage.setForum(forum);
+			dbInstance.getCurrentEntityManager().persist(readMessage);
+		}		
+	}
+	
+	/**
+	 * Update the counters for words and characters
+	 * @param m the message
+	 */
+	public void updateCounters(Message m) {
+		String body = m.getBody();
+		String unQuotedBody = new QuoteAndTagFilter().filter(body);
+		Locale suggestedLocale = txtService.detectLocale(unQuotedBody);
+		m.setNumOfWords(txtService.wordCount(unQuotedBody, suggestedLocale));
+		m.setNumOfCharacters(txtService.characterCount(unQuotedBody, suggestedLocale));
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/ForumImpl.java b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
new file mode 100644
index 00000000000..35716ef06de
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
@@ -0,0 +1,126 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Version;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.core.id.CreateInfo;
+import org.olat.core.id.Persistable;
+import org.olat.core.logging.AssertException;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.modules.fo.Forum;
+
+/**
+ * Implementation of the Forum Interface 
+ *
+ * @author Felix Jost
+ */
+@Entity(name="forum")
+@Table(name="o_forum")
+@NamedQueries({
+	@NamedQuery(name="getAllForumKeys", query="select fo.key from forum as fo")
+})
+public class ForumImpl implements Forum, CreateInfo, Persistable{
+
+	private static final long serialVersionUID = 3240047228287740990L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="forum_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	@Version
+	private int version = 0;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
+	private Date creationDate;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+
+	public void setKey(Long key) {
+		this.key = key;
+	}
+
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+
+	@Override
+	public String getResourceableTypeName() {
+		return OresHelper.calculateTypeName(Forum.class);
+	}
+
+	@Override
+	public Long getResourceableId() {
+		Long id = getKey();
+		if (id == null) {
+			throw new AssertException("getId() must not be called before an id has been generated by the persister");				
+		}
+		return id;
+	}
+	
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof ForumImpl) {
+			ForumImpl other = (ForumImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/model/ForumThread.java b/src/main/java/org/olat/modules/fo/model/ForumThread.java
new file mode 100644
index 00000000000..0f9762692ec
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/ForumThread.java
@@ -0,0 +1,111 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.MessageRef;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumThread implements MessageRef {
+	
+	private int type;
+	private Long key;
+	private String title;
+	private Date lastModified;
+	
+	private boolean guest;
+	private String pseudonym;
+	private String creatorFullname;
+	
+	private int markedMessages;
+	private int newMessages;
+	private int numOfPosts;
+	
+	public ForumThread(Message message, String creatorFullname, Date lastModified, int numOfPosts) {
+		this.key = message.getKey();
+		this.type = message.getStatusCode();
+		this.title = message.getTitle();
+		if(lastModified == null || lastModified.after(message.getLastModified())) {
+			this.lastModified = message.getLastModified();
+		} else {
+			this.lastModified = lastModified;
+		}
+		this.guest = message.isGuest();
+		this.creatorFullname = creatorFullname;
+		this.numOfPosts = numOfPosts;
+	}
+	
+	@Override
+	public Long getKey() {
+		return key;
+	}
+
+	@Override
+	public int getStatusCode() {
+		return type;
+	}
+	
+	public boolean isGuest() {
+		return guest;
+	}
+	
+	public String getPseudonym() {
+		return pseudonym;
+	}
+	
+	public String getTitle() {
+		return title;
+	}
+	
+	public Date getLastModified() {
+		return lastModified;
+	}
+	
+	public String getCreatorFullname() {
+		return creatorFullname;
+	}
+	
+	public int getNumOfPosts() {
+		return numOfPosts;
+	}
+	
+	public int getMarkedMessages() {
+		return markedMessages;
+	}
+	
+	public void setMarkedMessages(int markedMessages) {
+		this.markedMessages = markedMessages;
+	}
+	
+	public int getNewMessages() {
+		return newMessages;
+	}
+	
+	public void setNewMessages(int newMessages) {
+		this.newMessages = newMessages;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/ForumUser.java b/src/main/java/org/olat/modules/fo/model/ForumUser.java
new file mode 100644
index 00000000000..9b8ef12949c
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/ForumUser.java
@@ -0,0 +1,84 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.user.UserPropertiesRow;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumUser extends UserPropertiesRow {
+	
+	private final boolean guest;
+	private final String pseudonym;
+	
+	private final int numOfThreads;
+	private final int numOfReplies;
+	private final int numOfWords;
+	private final int numOfCharacters;
+	private final Date lastModified;
+	
+	public ForumUser(ForumUserStatistics statistics, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
+		super(statistics.getIdentity(), userPropertyHandlers, locale);
+		guest = statistics.isGuest();
+		pseudonym = statistics.getPseudonym();
+		numOfCharacters = statistics.getNumOfCharacters();
+		numOfWords = statistics.getNumOfWords();
+		numOfReplies = statistics.getNumOfReplies();
+		numOfThreads = statistics.getNumOfThreads();
+		lastModified = statistics.getLastModified();
+	}
+
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+
+	public int getNumOfThreads() {
+		return numOfThreads;
+	}
+
+	public int getNumOfReplies() {
+		return numOfReplies;
+	}
+
+	public int getNumOfWords() {
+		return numOfWords;
+	}
+
+	public int getNumOfCharacters() {
+		return numOfCharacters;
+	}
+
+	public Date getLastModified() {
+		return lastModified;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/ForumUserStatistics.java b/src/main/java/org/olat/modules/fo/model/ForumUserStatistics.java
new file mode 100644
index 00000000000..59c8cc819eb
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/ForumUserStatistics.java
@@ -0,0 +1,106 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import org.olat.core.id.Identity;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumUserStatistics {
+	
+	private final boolean guest;
+	private final Identity identity;
+	private final String pseudonym;
+	
+	private int numOfThreads = 0;
+	private int numOfReplies = 0;
+	private int numOfWords = 0;
+	private int numOfCharacters = 0;
+	private Date lastModified;
+	
+	public ForumUserStatistics(Identity identity, String pseudonym, boolean guest) {
+		this.identity = identity;
+		this.guest = guest;
+		this.pseudonym = pseudonym;
+	}
+	
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+
+	public Identity getIdentity() {
+		return identity;
+	}
+
+	public int getNumOfThreads() {
+		return numOfThreads;
+	}
+
+	public void addNumOfThreads(int threads) {
+		this.numOfThreads += threads;
+	}
+
+	public int getNumOfReplies() {
+		return numOfReplies;
+	}
+
+	public void addNumOfReplies(int replies) {
+		this.numOfReplies += replies;
+	}
+
+	public int getNumOfWords() {
+		return numOfWords;
+	}
+
+	public void addNumOfWords(int words) {
+		this.numOfWords += words;
+	}
+
+	public int getNumOfCharacters() {
+		return numOfCharacters;
+	}
+
+	public void addNumOfCharacters(int characters) {
+		this.numOfCharacters += characters;
+	}
+
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	public void setLastModified(Date lastModified) {
+		this.lastModified = lastModified;
+	}
+
+
+	
+	
+
+}
diff --git a/src/main/java/org/olat/modules/fo/model/MessageImpl.java b/src/main/java/org/olat/modules/fo/model/MessageImpl.java
new file mode 100644
index 00000000000..6a1509c75ab
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/MessageImpl.java
@@ -0,0 +1,311 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Version;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.basesecurity.IdentityImpl;
+import org.olat.core.id.CreateInfo;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Persistable;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.Message;
+
+/**
+ * @author Felix Jost
+ */
+@Entity(name="fomessage")
+@Table(name="o_message")
+public class MessageImpl implements CreateInfo, Persistable, Message {
+
+	private static final long serialVersionUID = -7701717903560643010L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="message_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	@Version
+	private int version = 0;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
+	private Date creationDate;
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="lastmodified", nullable=false, insertable=true, updatable=true)
+	private Date lastModified;
+
+	@Column(name="statuscode", nullable=false, insertable=true, updatable=true)
+	private int statusCode;
+	
+	@Column(name="title", nullable=false, insertable=true, updatable=true)
+	private String title;
+	@Column(name="body", nullable=false, insertable=true, updatable=true)
+	private String body;
+	@Column(name="numofcharacters", nullable=true, insertable=true, updatable=true)
+	private Integer numOfCharacters;
+	@Column(name="numofwords", nullable=true, insertable=true, updatable=true)
+	private Integer numOfWords;
+	
+	@ManyToOne(targetEntity=MessageImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="parent_id", nullable=true, insertable=true, updatable=true)
+	private Message parent;
+	@ManyToOne(targetEntity=MessageImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="topthread_id", nullable=true, insertable=true, updatable=true)
+	private Message threadtop;
+	@ManyToOne(targetEntity=ForumImpl.class,fetch=FetchType.LAZY,optional=false)
+	@JoinColumn(name="forum_fk", nullable=false, insertable=true, updatable=false)
+	private Forum forum;
+
+	@Column(name="pseudonym", nullable=true, insertable=true, updatable=false)
+	private String pseudonym;
+	@Column(name="guest", nullable=true, insertable=true, updatable=false)
+	private boolean guest;
+	
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="creator_id", nullable=true, insertable=true, updatable=false)
+	private Identity creator;
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="modifier_id", nullable=true, insertable=true, updatable=true)
+	private Identity modifier;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+
+	public void setKey(Long key) {
+		this.key = key;
+	}
+
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+
+
+	/**
+	 * @return
+	 */
+	public String getBody() {
+		return body;
+	}
+
+
+	/**
+	 * @return
+	 */
+	public Identity getCreator() {
+		return creator;
+	}
+	
+	/**
+	 * @param identity
+	 */
+	public void setCreator(Identity identity) {
+		creator = identity;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+
+	public void setPseudonym(String pseudonym) {
+		this.pseudonym = pseudonym;
+	}
+
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public void setGuest(boolean guest) {
+		this.guest = guest;
+	}
+
+	/**
+	 * @return
+	 */
+	public Forum getForum() {
+		return forum;
+	}
+	
+	public void setForum(Forum forum) {
+		this.forum = forum;
+	}
+
+	/**
+	 * @return
+	 */
+	public Identity getModifier() {
+		return modifier;
+	}
+
+	/**
+	 * @return
+	 */
+	public Message getParent() {
+		return parent;
+	}
+
+	@Override
+	public Long getParentKey() {
+		return parent == null ? null : parent.getKey();
+	}
+
+	/**
+	 * @return
+	 */
+	public Message getThreadtop() {
+		return threadtop;
+	}
+
+	/**
+	 * @return
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * @param string
+	 */
+	public void setBody(String string) {
+		body = string;
+	}
+
+	/**
+	 * @param identity
+	 */
+	public void setModifier(Identity identity) {
+		modifier = identity;
+	}
+
+	/**
+	 * @param message
+	 */
+	public void setParent(Message message) {
+		parent = message;
+	}
+
+	/**
+	 * @param message
+	 */
+	public void setThreadtop(Message message) {
+		threadtop = message;
+	}
+
+	/**
+	 * @param string
+	 */
+	public void setTitle(String string) {
+		title = string;
+	}
+	
+	public int getStatusCode() {
+		return statusCode;
+	}
+	public void setStatusCode(int statusCode) {
+		this.statusCode = statusCode;
+	}
+
+	/**
+	 * 
+	 * @see org.olat.core.id.ModifiedInfo#getLastModified()
+	 */
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	/**
+	 * 
+	 * @see org.olat.core.id.ModifiedInfo#setLastModified(java.util.Date)
+	 */
+	public void setLastModified(Date date) {
+		this.lastModified = date;
+	}
+
+	public Integer getNumOfCharacters() {
+		return numOfCharacters;
+	}
+
+	public void setNumOfCharacters(Integer numOfCharacters) {
+		this.numOfCharacters = numOfCharacters;
+	}
+
+	public Integer getNumOfWords() {
+		return numOfWords;
+	}
+
+	public void setNumOfWords(Integer numOfWords) {
+		this.numOfWords = numOfWords;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof MessageImpl) {
+			MessageImpl other = (MessageImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+
+	@Override
+	public int compareTo(Message arg0) {
+		//threadtop always is on top!
+		if (arg0.getParent()==null) return 1;
+		if (getCreationDate().after(arg0.getCreationDate())) return 1;
+		return 0;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/MessageLightImpl.java b/src/main/java/org/olat/modules/fo/model/MessageLightImpl.java
new file mode 100644
index 00000000000..5e1f3dd7c8f
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/MessageLightImpl.java
@@ -0,0 +1,184 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.basesecurity.IdentityImpl;
+import org.olat.core.id.CreateInfo;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Persistable;
+import org.olat.modules.fo.MessageLight;
+import org.olat.modules.fo.MessageRef;
+
+/**
+ * 
+ * A mapping which reduce the number of join and associated sub-queries.
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Entity(name="folightmessage")
+@Table(name="o_message")
+public class MessageLightImpl implements MessageLight, CreateInfo, Persistable, Comparable<MessageLight> {
+
+	private static final long serialVersionUID = -7701717903560643010L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="message_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=false, updatable=false)
+	private Date creationDate;
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="lastmodified", nullable=false, insertable=false, updatable=false)
+	private Date lastModified;
+
+	@Column(name="statuscode", nullable=false, insertable=false, updatable=false)
+	private int statusCode;
+	
+	@Column(name="title", nullable=false, insertable=false, updatable=false)
+	private String title;
+	@Column(name="body", nullable=false, insertable=false, updatable=false)
+	private String body;
+
+	@Column(name="parent_id", nullable=true, insertable=false, updatable=false)
+	private Long parentKey;
+	@ManyToOne(targetEntity=MessageRefImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="topthread_id", nullable=true, insertable=false, updatable=false)
+	private MessageRef threadtop;
+	@Column(name="forum_fk", nullable=false, insertable=false, updatable=false)
+	private Long forumKey;
+
+	@Column(name="pseudonym", nullable=true, insertable=false, updatable=false)
+	private String pseudonym;
+	@Column(name="guest", nullable=true, insertable=false, updatable=false)
+	private boolean guest;
+	
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="creator_id", nullable=true, insertable=true, updatable=false)
+	private Identity creator;
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="modifier_id", nullable=true, insertable=true, updatable=true)
+	private Identity modifier;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+	
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	public int getStatusCode() {
+		return statusCode;
+	}
+	
+	public String getTitle() {
+		return title;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public Identity getCreator() {
+		return creator;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public Long getForumKey() {
+		return forumKey;
+	}
+
+	public Identity getModifier() {
+		return modifier;
+	}
+
+	public Long getParentKey() {
+		return parentKey;
+	}
+
+	public MessageRef getThreadtop() {
+		return threadtop;
+	}
+
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof MessageImpl) {
+			MessageImpl other = (MessageImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+
+	@Override
+	public int compareTo(MessageLight arg0) {
+		if (arg0.getParentKey() == null) {
+			return 1;
+		}
+		if (getCreationDate().after(arg0.getCreationDate())) {
+			return 1;
+		}
+		return 0;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/MessagePeekviewImpl.java b/src/main/java/org/olat/modules/fo/model/MessagePeekviewImpl.java
new file mode 100644
index 00000000000..45f8416cace
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/MessagePeekviewImpl.java
@@ -0,0 +1,121 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.core.id.Persistable;
+import org.olat.modules.fo.MessageRef;
+import org.olat.modules.fo.ui.MessagePeekview;
+
+/**
+ * 
+ * A mapping which reduce the number of join and associated sub-queries.
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Entity(name="fopeekviewmessage")
+@Table(name="o_message")
+public class MessagePeekviewImpl implements MessagePeekview, Persistable {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="message_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=false, updatable=false)
+	private Date creationDate;
+
+	@Column(name="statuscode", nullable=false, insertable=false, updatable=false)
+	private int statusCode;
+	
+	@Column(name="title", nullable=false, insertable=false, updatable=false)
+	private String title;
+	@Column(name="body", nullable=false, insertable=false, updatable=false)
+	private String body;
+
+	@ManyToOne(targetEntity=MessageRefImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="topthread_id", nullable=true, insertable=false, updatable=false)
+	private MessageRef threadtop;
+	@Column(name="forum_fk", nullable=false, insertable=false, updatable=false)
+	private Long forumKey;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+	
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	public int getStatusCode() {
+		return statusCode;
+	}
+	
+	public String getTitle() {
+		return title;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof MessageImpl) {
+			MessageImpl other = (MessageImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+	
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/MessageRefImpl.java b/src/main/java/org/olat/modules/fo/model/MessageRefImpl.java
new file mode 100644
index 00000000000..a47daf318fe
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/MessageRefImpl.java
@@ -0,0 +1,77 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.modules.fo.MessageRef;
+
+/**
+ * Companion for the thread top of the message light.
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Entity(name="forefmessage")
+@Table(name="o_message")
+public class MessageRefImpl implements MessageRef {
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="message_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+
+	@Column(name="statuscode", nullable=false, insertable=false, updatable=false)
+	private int statusCode;
+	
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+	
+	public int getStatusCode() {
+		return statusCode;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof MessageImpl) {
+			MessageImpl other = (MessageImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/MessageStatistics.java b/src/main/java/org/olat/modules/fo/model/MessageStatistics.java
new file mode 100644
index 00000000000..cffbc626a62
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/MessageStatistics.java
@@ -0,0 +1,152 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.basesecurity.IdentityImpl;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Persistable;
+
+/**
+ * 
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Entity(name="fomessageforstatistics")
+@Table(name="o_message")
+public class MessageStatistics implements Persistable {
+
+	private static final long serialVersionUID = -7701717903560643010L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="message_id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="lastmodified", nullable=false, insertable=false, updatable=false)
+	private Date lastModified;
+
+	@Column(name="statuscode", nullable=false, insertable=false, updatable=false)
+	private int statusCode;
+	
+	@Column(name="numofcharacters", nullable=true, insertable=false, updatable=false)
+	private Integer numOfCharacters;
+	@Column(name="numofwords", nullable=true, insertable=false, updatable=false)
+	private Integer numOfWords;
+
+	@Column(name="topthread_id", nullable=true, insertable=false, updatable=false)
+	private Long threadtopKey;
+	
+	@Column(name="forum_fk", nullable=true, insertable=false, updatable=false)
+	private Long forumKey;
+
+	@Column(name="pseudonym", nullable=true, insertable=false, updatable=false)
+	private String pseudonym;
+	@Column(name="guest", nullable=true, insertable=false, updatable=false)
+	private boolean guest;
+	
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="creator_id", nullable=true, insertable=false, updatable=false)
+	private Identity creator;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+
+	/**
+	 * @return
+	 */
+	public Identity getCreator() {
+		return creator;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+	
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public Long getThreadtopKey() {
+		return threadtopKey;
+	}
+
+	public int getStatusCode() {
+		return statusCode;
+	}
+
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	public Integer getNumOfCharacters() {
+		return numOfCharacters;
+	}
+
+	public Integer getNumOfWords() {
+		return numOfWords;
+	}
+
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof MessageStatistics) {
+			MessageStatistics other = (MessageStatistics) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/model/ReadMessageImpl.java b/src/main/java/org/olat/modules/fo/model/ReadMessageImpl.java
new file mode 100644
index 00000000000..2f7447e0cdd
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/model/ReadMessageImpl.java
@@ -0,0 +1,143 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+package org.olat.modules.fo.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Version;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.olat.basesecurity.IdentityImpl;
+import org.olat.core.id.CreateInfo;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Persistable;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.MessageLight;
+
+
+@Entity(name="foreadmessage")
+@Table(name="o_readmessage")
+public class ReadMessageImpl implements CreateInfo, Persistable {
+
+	private static final long serialVersionUID = 1411870563218649869L;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	@GenericGenerator(name = "system-uuid", strategy = "hilo")
+	@Column(name="id", nullable=false, unique=true, insertable=true, updatable=false)
+	private Long key;
+	@Version
+	private int version = 0;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="creationdate", nullable=false, insertable=true, updatable=false)
+	private Date creationDate;
+
+	@ManyToOne(targetEntity=IdentityImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="identity_id", nullable=true, insertable=true, updatable=false)
+	private Identity identity;
+	
+	@ManyToOne(targetEntity=MessageLightImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="message_id", nullable=true, insertable=true, updatable=false)
+	private MessageLight message;
+	
+	@ManyToOne(targetEntity=ForumImpl.class,fetch=FetchType.LAZY,optional=true)
+	@JoinColumn(name="forum_id", nullable=true, insertable=true, updatable=false)
+	private Forum forum;
+
+	@Override
+	public Long getKey() {
+		return key;
+	}
+
+	public void setKey(Long key) {
+		this.key = key;
+	}
+
+	@Override
+	public Date getCreationDate() {
+		return creationDate;
+	}
+
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+
+	public Forum getForum() {
+		return forum;
+	}
+
+	public void setForum(Forum forum) {
+		this.forum = forum;
+	}
+
+	public Identity getIdentity() {
+		return identity;
+	}
+
+	public void setIdentity(Identity identity) {
+		this.identity = identity;
+	}
+
+	public MessageLight getMessage() {
+		return message;
+	}
+
+	public void setMessage(MessageLight message) {
+		this.message = message;
+	}
+	
+	@Override
+	public int hashCode() {
+		return key == null ? 835245 : key.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof ReadMessageImpl) {
+			ReadMessageImpl other = (ReadMessageImpl) obj;
+			return getKey().equals(other.getKey());
+		}
+		return false;
+	}
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return equals(persistable);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java
index 18d50153996..6850fbf8ce2 100755
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java
+++ b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefactHandler.java
@@ -27,8 +27,8 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.portfolio.EPAbstractHandler;
 import org.olat.portfolio.model.artefacts.AbstractArtefact;
 
diff --git a/src/main/java/org/olat/modules/fo/restapi/ForumCourseNodeWebService.java b/src/main/java/org/olat/modules/fo/restapi/ForumCourseNodeWebService.java
index 595fe79fa51..34d5202c0b1 100644
--- a/src/main/java/org/olat/modules/fo/restapi/ForumCourseNodeWebService.java
+++ b/src/main/java/org/olat/modules/fo/restapi/ForumCourseNodeWebService.java
@@ -68,8 +68,8 @@ import org.olat.course.run.userview.CourseTreeVisitor;
 import org.olat.course.run.userview.VisibleTreeFilter;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.properties.Property;
 import org.olat.restapi.repository.course.AbstractCourseNodeWebService;
 import org.olat.restapi.repository.course.CourseWebService;
@@ -403,7 +403,7 @@ public class ForumCourseNodeWebService extends AbstractCourseNodeWebService {
 		
 		if(parentMessageId == null || parentMessageId == 0L) {
 			// creating the thread (a message without a parent message)
-			Message newThread = fom.createMessage();
+			Message newThread = fom.createMessage(forum, identity, false);
 			if (isSticky != null && isSticky.booleanValue()) {
 				// set sticky
 				org.olat.modules.fo.Status status = new org.olat.modules.fo.Status();
@@ -413,7 +413,7 @@ public class ForumCourseNodeWebService extends AbstractCourseNodeWebService {
 			newThread.setTitle(title);
 			newThread.setBody(body);
 			// open a new thread
-			fom.addTopMessage(identity, forum, newThread);
+			fom.addTopMessage(newThread);
 			
 			vo = new MessageVO(newThread);
 		} else {
@@ -424,11 +424,10 @@ public class ForumCourseNodeWebService extends AbstractCourseNodeWebService {
 				return Response.serverError().status(Status.NOT_FOUND).build();
 			}
 			// create new message
-			Message message = fom.createMessage();
+			Message message = fom.createMessage(forum, identity, false);
 			message.setTitle(title);
 			message.setBody(body);
-			
-			fom.replyToMessage(message, identity, threadMessage);
+			fom.replyToMessage(message, threadMessage);
 			
 			vo = new MessageVO(message);
 		}
diff --git a/src/main/java/org/olat/modules/fo/restapi/ForumImportWebService.java b/src/main/java/org/olat/modules/fo/restapi/ForumImportWebService.java
index 82e51c903f0..d15989eed7a 100644
--- a/src/main/java/org/olat/modules/fo/restapi/ForumImportWebService.java
+++ b/src/main/java/org/olat/modules/fo/restapi/ForumImportWebService.java
@@ -28,7 +28,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
+import org.olat.modules.fo.manager.ForumManager;
 
 /**
  * 
diff --git a/src/main/java/org/olat/modules/fo/restapi/ForumWebService.java b/src/main/java/org/olat/modules/fo/restapi/ForumWebService.java
index 4517f5b0ca5..123c49c4ff3 100644
--- a/src/main/java/org/olat/modules/fo/restapi/ForumWebService.java
+++ b/src/main/java/org/olat/modules/fo/restapi/ForumWebService.java
@@ -74,8 +74,8 @@ import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.vfs.restapi.SystemItemFilter;
 import org.olat.core.util.vfs.restapi.VFSStreamingOutput;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.restapi.support.MediaTypeVariants;
 import org.olat.restapi.support.MultipartReader;
 import org.olat.restapi.support.vo.File64VO;
@@ -220,11 +220,11 @@ public class ForumWebService {
 
 		Identity author = getMessageAuthor(authorKey, httpRequest);
 		// creating the thread (a message without a parent message)
-		Message newThread = fom.createMessage();
+		Message newThread = fom.createMessage(forum, author, false);
 		newThread.setTitle(title);
 		newThread.setBody(body);
 		// open a new thread
-		fom.addTopMessage(author, forum, newThread);
+		fom.addTopMessage(newThread);
 		
 		MessageVO vo = new MessageVO(newThread);
 		return Response.ok(vo).build();
@@ -259,7 +259,6 @@ public class ForumWebService {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
 
-		ForumManager fom = ForumManager.getInstance();
 		if(MediaTypeVariants.isPaged(httpRequest, request)) {
 			int totalCount = fom.countThread(threadKey);
 			Message.OrderBy order = toEnum(orderBy);
@@ -383,10 +382,10 @@ public class ForumWebService {
 		}
 
 		// creating the thread (a message without a parent message)
-		Message newMessage = fom.createMessage();
+		Message newMessage = fom.createMessage(forum, author, false);
 		newMessage.setTitle(reply.getTitle());
 		newMessage.setBody(reply.getBody());
-		fom.replyToMessage(newMessage, author, mess);
+		fom.replyToMessage(newMessage, mess);
 		if(reply.getAttachments() != null) {
 			for(File64VO attachment:reply.getAttachments()) {
 				byte[] fileAsBytes = Base64.decodeBase64(attachment.getFile());
diff --git a/src/main/java/org/olat/modules/fo/restapi/MyForumsWebService.java b/src/main/java/org/olat/modules/fo/restapi/MyForumsWebService.java
index 2faeab563b7..2bb964a688c 100644
--- a/src/main/java/org/olat/modules/fo/restapi/MyForumsWebService.java
+++ b/src/main/java/org/olat/modules/fo/restapi/MyForumsWebService.java
@@ -42,7 +42,6 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Request;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
@@ -130,13 +129,12 @@ public class MyForumsWebService {
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
 	 * @param identityKey The key of the user (IdentityImpl)
 	 * @param httpRequest The HTTP request
-	 * @param request The REST request
 	 * @return The forums
 	 */
 	@GET
 	@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
 	public Response getForums(@PathParam("identityKey") Long identityKey,
-			@Context HttpServletRequest httpRequest, @Context Request request) {
+			@Context HttpServletRequest httpRequest) {
 		
 		Roles roles;
 		Identity retrievedUser = getIdentity(httpRequest);
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumAdminController.java b/src/main/java/org/olat/modules/fo/ui/ForumAdminController.java
new file mode 100644
index 00000000000..57b45124ffb
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumAdminController.java
@@ -0,0 +1,126 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.Util;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumModule;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumAdminController extends FormBasicController {
+	
+	private static final String[] anonymousPostingKeys = new String[]{ "on" };
+	private static final String[] defaultKeys = new String[]{ "enabled", "disabled" };
+	
+	private MultipleSelectionElement anonymousPostingEl;
+	private SingleSelection defaultCourseEl, defaultGroupEl;
+	
+	@Autowired
+	private ForumModule forumModule;
+	
+	public ForumAdminController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+		
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		setFormTitle("admin.title");
+		
+		String[] anonymousPostingValues = new String[]{ "" };
+		anonymousPostingEl = uifactory.addCheckboxesHorizontal("anonymous.posting", "anonymous.posting", formLayout,
+				anonymousPostingKeys, anonymousPostingValues);
+		if(forumModule.isAnonymousPostingWithPseudonymEnabled()) {
+			anonymousPostingEl.select(anonymousPostingKeys[0], true);
+		}
+		anonymousPostingEl.addActionListener(FormEvent.ONCHANGE);
+		
+		String[] defaultValues = new String[]{
+				translate("anonymous.default.enabled"), translate("anonymous.default.disabled")
+		};
+		defaultCourseEl = uifactory.addRadiosHorizontal("anonymous.course.default", "anonymous.course.default", formLayout,
+				defaultKeys, defaultValues);
+		if(forumModule.isPseudonymForCourseEnabledByDefault()) {
+			defaultCourseEl.select(defaultKeys[0], true);
+		} else {
+			defaultCourseEl.select(defaultKeys[1], true);
+		}
+		defaultCourseEl.addActionListener(FormEvent.ONCHANGE);
+		/*
+		defaultGroupEl = uifactory.addRadiosHorizontal("anonymous.group.default", "anonymous.group.default", formLayout,
+				defaultKeys, defaultValues);
+		if(forumModule.isPseudonymForGroupEnabledByDefault()) {
+			defaultGroupEl.select(defaultKeys[0], true);
+		} else {
+			defaultGroupEl.select(defaultKeys[1], true);
+		}
+		defaultGroupEl.addActionListener(FormEvent.ONCHANGE);
+		*/
+
+		updateUI();
+	}
+	
+	private void updateUI() {
+		defaultCourseEl.setVisible(anonymousPostingEl.isAtLeastSelected(1));
+		//defaultGroupEl.setVisible(anonymousPostingEl.isAtLeastSelected(1));
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(anonymousPostingEl == source) {
+			forumModule.setAnonymousPostingWithPseudonymEnabled(anonymousPostingEl.isAtLeastSelected(1));
+			updateUI();
+		} else if(defaultGroupEl == source) {
+			boolean enabled = defaultGroupEl.isOneSelected() && defaultGroupEl.isSelected(0);
+			forumModule.setPseudonymForGroupEnabledByDefault(enabled);
+		} else if(defaultCourseEl == source) {
+			boolean enabled = defaultCourseEl.isOneSelected() && defaultCourseEl.isSelected(0);
+			forumModule.setPseudonymForCourseEnabledByDefault(enabled);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumController.java b/src/main/java/org/olat/modules/fo/ui/ForumController.java
new file mode 100644
index 00000000000..9f5a9e575a9
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumController.java
@@ -0,0 +1,369 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.orgrmform
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <p>
+*/ 
+
+package org.olat.modules.fo.ui;
+
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurity;
+import org.olat.core.commons.services.notifications.PublisherData;
+import org.olat.core.commons.services.notifications.SubscriptionContext;
+import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionController;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.Util;
+import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.event.GenericEventListener;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.ForumChangedEvent;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.ui.events.SelectMessageEvent;
+import org.olat.modules.fo.ui.events.SelectUserEvent;
+import org.olat.modules.fo.ui.events.SelectUserListEvent;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Description: <br>
+ * CREATE: - new thread (topmessage) -> ask ForumCallback 'mayOpenNewThread' -
+ * new message -> ask ForumCallback 'mayReplyMessage' <br>
+ * READ: - everybody may read every message <br>
+ * UPDATE: - who wrote a message may edit and save his message as long as it has
+ * no children. - if somebody want to edit a message of somebodyelse -> ask
+ * ForumCallback 'mayEditMessageAsModerator' <br>
+ * DELETE: - who wrote a message may delete his message as long as it has no
+ * children. - if somebody want to delete a message of somebodyelse -> ask
+ * ForumCallback 'mayDeleteMessageAsModerator' <br>
+ * <br>
+ * Notifications: notified when: <br>
+ * a new thread is opened <br>
+ * a new reply is given <br>
+ * a message has been edited <br>
+ * but not when a message has been deleted <br>
+ * 
+ * @author Felix Jost
+ * @author Refactorings: Roman Haag, roman.haag@frentix.com, frentix GmbH
+ */
+public class ForumController extends BasicController implements GenericEventListener, Activateable2 {
+
+	protected static final String GUI_PREFS_THREADVIEW_KEY = "forum.threadview.enabled";
+
+	private VelocityContainer forumPanel;
+
+	private ThreadListController threadListCtrl;
+	private ForumUserListController userListCtrl;
+	private MessageListController viewCtrl, userViewCtrl;
+	
+	private Forum forum;
+	private ForumCallback focallback;
+	private boolean reloadThreadList = false;
+
+	private SubscriptionContext subsContext;
+	private ContextualSubscriptionController csc;
+
+	@Autowired
+	private ForumManager fm;
+	@Autowired
+	private BaseSecurity securityManager;
+
+	/**
+	 * @param forum
+	 * @param focallback
+	 * @param ureq
+	 * @param wControl
+	 */
+	public ForumController(UserRequest ureq, WindowControl wControl,
+			Forum forum, ForumCallback focallback, boolean showSubscriptionButton) {
+		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+
+		this.forum = forum;
+		this.focallback = focallback;
+		addLoggingResourceable(LoggingResourceable.wrap(forum));
+
+		forumPanel = createVelocityContainer("forum");
+
+		// --- subscription ---
+		subsContext = focallback.getSubscriptionContext();
+		// if sc is null, then no subscription is desired
+		if (subsContext != null && showSubscriptionButton) {
+			String businessPath = wControl.getBusinessControl().getAsString();
+			String data = String.valueOf(forum.getKey());
+			PublisherData pdata = new PublisherData(OresHelper.calculateTypeName(Forum.class), data, businessPath);
+			
+			csc = new ContextualSubscriptionController(ureq, getWindowControl(), subsContext, pdata);
+			listenTo(csc);
+			forumPanel.put("subscription", csc.getInitialComponent());
+		}
+
+		threadListCtrl = new ThreadListController(ureq, getWindowControl(), forum, focallback);
+		listenTo(threadListCtrl);
+		threadListCtrl.loadModel();
+
+		// Default view
+		putInitialPanel(forumPanel);
+		putContent(threadListCtrl);
+					
+		// Register for forum events
+		CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, getIdentity(), forum);
+	}
+
+	@Override
+	protected void doDispose() {
+		CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, forum);
+	}
+
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) {
+			doThreadList(ureq);
+		} else {
+			String type = entries.get(0).getOLATResourceable().getResourceableTypeName();
+			if("Message".equalsIgnoreCase(type)) {
+				Long resId = entries.get(0).getOLATResourceable().getResourceableId();
+				if (resId.longValue() != 0) {
+					Message message = fm.getMessageById(resId);
+					if (message != null) {
+						doThreadList(ureq);
+						Message thread = message.getThreadtop() == null ? message : message.getThreadtop();
+
+						String subType = null;
+						if(entries.size() > 1) {
+							subType = entries.get(1).getOLATResourceable().getResourceableTypeName();
+						}
+						
+						if("Marked".equalsIgnoreCase(subType)) {
+							doMarkedView(ureq, thread, message);
+						} else if("New".equalsIgnoreCase(subType)) {
+							doMarkedView(ureq, thread, message);
+						} else {
+							doThreadView(ureq, thread, message);
+						}
+					}
+				}
+			} else if("Identity".equalsIgnoreCase(type)) {
+				Long resId = entries.get(0).getOLATResourceable().getResourceableId();
+				doUserList(ureq);
+				if (resId.longValue() > 0) {
+					doUserMessageList(ureq, resId);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void event(Event event) {
+		if(event instanceof ForumChangedEvent) {
+			ForumChangedEvent fce = (ForumChangedEvent)event;
+			if(fce.getMessageKey() == null) {
+				reloadThreadList = true;
+			}
+		}		
+	}
+
+	@Override
+	public void event(UserRequest ureq, Component source, Event event) {
+		//
+	}
+
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		if (threadListCtrl ==  source) {
+			if(event instanceof SelectMessageEvent) {
+				doProcessSelectEvent(ureq, (SelectMessageEvent)event);
+			} else if(event instanceof SelectUserListEvent) {
+				doUserList(ureq);
+			}
+		} else if(viewCtrl == source) {
+			if(event == Event.BACK_EVENT) {
+				doThreadList(ureq);
+			} else if(event instanceof SelectMessageEvent) {
+				doProcessSelectEvent(ureq, (SelectMessageEvent)event);
+			}
+		} else if(userViewCtrl == source) {
+			if(event == Event.BACK_EVENT) {
+				cleanUpMessageViews();
+				doUserList(ureq);
+			} else if(event instanceof SelectMessageEvent) {
+				doProcessSelectEvent(ureq, (SelectMessageEvent)event);
+			}
+		} else if(userListCtrl == source) {
+			if(event == Event.BACK_EVENT) {
+				removeAsListenerAndDispose(userListCtrl);
+				userListCtrl = null;
+				
+				doThreadList(ureq);
+			} else if(event instanceof SelectUserEvent) {
+				SelectUserEvent sue = (SelectUserEvent)event;
+				if(sue.isGuest()) {
+					doGuestMessageList(ureq);
+				} else if(StringHelper.containsNonWhitespace(sue.getPseudonym())) {
+					doPseudonymMessageList(ureq, sue.getIdentityKey(), sue.getPseudonym());
+				} else if(sue.getIdentityKey() != null) {
+					doUserMessageList(ureq, sue.getIdentityKey());
+				}
+			}
+		}
+	}
+	
+	private void doProcessSelectEvent(UserRequest ureq, SelectMessageEvent sme) {
+		Message thread = fm.getMessageById(sme.getMessageKey());
+		Message scrollTo = null;
+		if(sme.getScrollToMessageKey() != null) {
+			scrollTo = fm.getMessageById(sme.getScrollToMessageKey());
+		}
+		if(SelectMessageEvent.SELECT_THREAD.equals(sme.getCommand())) {
+			doThreadView(ureq, thread, scrollTo);
+		} else if(SelectMessageEvent.SELECT_MARKED.equals(sme.getCommand())) {
+			doMarkedView(ureq, thread, scrollTo);
+		} else if(SelectMessageEvent.SELECT_NEW.equals(sme.getCommand())) {
+			doNewView(ureq, thread, scrollTo);
+		}
+	}
+	
+	private void doThreadView(UserRequest ureq, Message thread, Message scrollTo) {
+		cleanUpMessageViews();
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Message", thread.getKey());
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		viewCtrl = new MessageListController(ureq, bwControl, forum, focallback);
+		viewCtrl.loadThread(ureq, thread);
+		viewCtrl.scrollTo(scrollTo);
+		listenTo(viewCtrl);
+		putContent(viewCtrl);
+		addToHistory(ureq, viewCtrl);
+	}
+	
+	private void doMarkedView(UserRequest ureq, Message thread, Message scrollTo) {
+		cleanUpMessageViews();
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Message", thread.getKey());
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		OLATResourceable markedOres = OresHelper.createOLATResourceableInstance("Marked", 0l);
+		WindowControl bbwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(markedOres, null, bwControl);
+		
+		viewCtrl = new MessageListController(ureq, bbwControl, forum, focallback);
+		viewCtrl.loadThread(ureq, thread);
+		viewCtrl.scrollTo(scrollTo);
+		viewCtrl.doShowMarked();
+		listenTo(viewCtrl);
+		putContent(viewCtrl);
+		addToHistory(ureq, viewCtrl);
+	}
+	
+	private void doNewView(UserRequest ureq, Message thread, Message scrollTo) {
+		cleanUpMessageViews();
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Message", thread.getKey());
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		OLATResourceable markedOres = OresHelper.createOLATResourceableInstance("New", 0l);
+		WindowControl bbwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(markedOres, null, bwControl);
+		
+		viewCtrl = new MessageListController(ureq, bbwControl, forum, focallback);
+		viewCtrl.loadThread(ureq, thread);
+		viewCtrl.scrollTo(scrollTo);
+		viewCtrl.doShowMarked();
+		listenTo(viewCtrl);
+		putContent(viewCtrl);
+		addToHistory(ureq, viewCtrl);
+	}
+	
+	private void doUserMessageList(UserRequest ureq, Long identityKey) {
+		cleanUpMessageViews();
+
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Identity", identityKey);
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		userViewCtrl = new MessageListController(ureq, bwControl, forum, focallback);
+		Identity user = securityManager.loadIdentityByKey(identityKey);
+		userViewCtrl.loadUserMessages(ureq, user);
+		listenTo(userViewCtrl);
+		putContent(userViewCtrl);
+		addToHistory(ureq, userViewCtrl);
+	}
+	
+	private void doGuestMessageList(UserRequest ureq) {
+		cleanUpMessageViews();
+		
+		userViewCtrl = new MessageListController(ureq, getWindowControl(), forum, focallback);
+		userViewCtrl.loadGuestMessages(ureq);
+		listenTo(userViewCtrl);
+		putContent(userViewCtrl);
+	}
+	
+	private void doPseudonymMessageList(UserRequest ureq, Long identityKey, String pseudonym) {
+		cleanUpMessageViews();
+		
+		userViewCtrl = new MessageListController(ureq, getWindowControl(), forum, focallback);
+		Identity user = securityManager.loadIdentityByKey(identityKey);
+		userViewCtrl.loadUserMessagesUnderPseudo(ureq, user, pseudonym);
+		listenTo(userViewCtrl);
+		putContent(userViewCtrl);
+	}
+	
+	private void doThreadList(UserRequest ureq) {
+		cleanUpMessageViews();
+		
+		if(reloadThreadList) {
+			threadListCtrl.loadModel();
+			reloadThreadList = false;
+		}
+		
+		putContent(threadListCtrl);
+		addToHistory(ureq, threadListCtrl);
+	}
+
+	private void doUserList(UserRequest ureq) {
+		cleanUpMessageViews();
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Identity", 0l);
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		userListCtrl = new ForumUserListController(ureq, bwControl, forum);
+		listenTo(userListCtrl);
+		putContent(userListCtrl);
+		addToHistory(ureq, userListCtrl);
+	}
+	
+	private void putContent(Controller controller) {
+		forumPanel.put("forum", controller.getInitialComponent());
+	}
+	
+	private void cleanUpMessageViews() {
+		removeAsListenerAndDispose(userViewCtrl);
+		removeAsListenerAndDispose(viewCtrl);
+		userViewCtrl = null;
+		viewCtrl = null;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumMessageDataModel.java b/src/main/java/org/olat/modules/fo/ui/ForumMessageDataModel.java
new file mode 100644
index 00000000000..b0d34b3d8e7
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumMessageDataModel.java
@@ -0,0 +1,112 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.StringHelper;
+import org.olat.group.ui.main.AbstractMemberListController;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumMessageDataModel extends DefaultFlexiTableDataModel<MessageLightView>
+	implements SortableFlexiTableDataModel<MessageLightView> {
+	
+	private Translator translator;
+	
+	public ForumMessageDataModel(FlexiTableColumnModel columnModel, Translator translator) {
+		super(columnModel);
+		this.translator = translator;
+	}
+
+	@Override
+	public void sort(SortKey orderBy) {
+		if(orderBy != null) {
+			List<MessageLightView> views = new ForumMessageDataModelSort(orderBy, this, null).sort();
+			super.setObjects(views);
+		}
+	}
+	
+	@Override
+	public Object getValueAt(int row, int col) {
+		MessageLightView view = getObject(row);
+		return getValueAt(view, col);
+	}
+
+	@Override
+	public Object getValueAt(MessageLightView row, int col) {
+		if(col >= 0 && col < ForumMessageCols.values().length) {
+			switch(ForumMessageCols.values()[col]) {
+				case type: return row.getStatusCode();
+				case thread: return row.getTitle();
+				case lastModified: return row.getLastModified();
+				default: return "ERROR";
+			}
+		}
+		
+		int propPos = col - AbstractMemberListController.USER_PROPS_OFFSET;
+		if(StringHelper.containsNonWhitespace(row.getPseudonym())) {
+			return propPos == 0 ? row.getPseudonym() : null;
+		}
+		if(row.isGuest()) {
+			return propPos == 0 ? translator.translate("guest") : null;
+		}
+		return row.getIdentityProp(propPos);
+	}
+
+	@Override
+	public DefaultFlexiTableDataModel<MessageLightView> createCopyWithEmptyList() {
+		return new ForumMessageDataModel(getTableColumnModel(), translator);
+	}
+	
+	public enum ForumMessageCols {
+		type("table.header.typeimg"),
+		thread("table.thread"),
+		lastModified("table.lastModified");
+		
+		private final String i18nKey;
+		
+		private ForumMessageCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		public String i18nKey() {
+			return i18nKey;
+		}
+	}
+	
+	public class ForumMessageDataModelSort extends SortableFlexiTableModelDelegate<MessageLightView> {
+		
+		public ForumMessageDataModelSort(SortKey orderBy, SortableFlexiTableDataModel<MessageLightView> tableModel, Locale locale) {
+			super(orderBy, tableModel, locale);
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
new file mode 100644
index 00000000000..f56811de6e9
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java
@@ -0,0 +1,232 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRowCssDelegate;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.id.UserConstants;
+import org.olat.core.util.Util;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.MessageLight;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.ui.ForumMessageDataModel.ForumMessageCols;
+import org.olat.modules.fo.ui.events.SelectMessageEvent;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumMessageListController extends FormBasicController implements FlexiTableRowCssDelegate {
+	
+	protected static final String USER_PROPS_ID = ForumUserListController.class.getCanonicalName();
+	
+	public static final int USER_PROPS_OFFSET = 500;
+	
+	private FlexiTableElement tableEl;
+	private ForumMessageDataModel dataModel;
+	
+	private final Forum forum;
+	private final boolean withType;
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+	private MessageView userObject, selectView;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	
+	public ForumMessageListController(UserRequest ureq, WindowControl wControl,
+			Forum forum, boolean withType) {
+		super(ureq, wControl, LAYOUT_BAREBONE);
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+		setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
+		
+		this.forum = forum;
+		this.withType = withType;
+		
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(USER_PROPS_ID, isAdministrativeUser);
+		
+		initForm(ureq);
+	}
+	
+	public MessageView getUserObject() {
+		return userObject;
+	}
+
+	public void setUserObject(MessageView userObject) {
+		this.userObject = userObject;
+	}
+
+	public MessageView getSelectView() {
+		return selectView;
+	}
+
+	public void setSelectView(MessageView selectView) {
+		this.selectView = selectView;
+	}
+
+	@Override
+	public String getRowCssClass(int pos) {
+		MessageLightView row = dataModel.getObject(pos);
+		return row != null && selectView != null && row.getKey().equals(selectView.getKey()) ? "o_row_selected" : null;
+	}
+
+	public void loadAllMessages() {
+		List<MessageLight> allMessages = forumManager.getLightMessagesByForum(forum);
+		List<MessageLightView> views = new ArrayList<>(allMessages.size());
+		Map<Long,MessageLightView> keyToViews = new HashMap<>();
+		for(MessageLight message:allMessages) {
+			MessageLightView view = new MessageLightView(message, userPropertyHandlers, getLocale());
+			views.add(view);
+			keyToViews.put(view.getKey(), view);
+		}
+
+		//TODO forum: implement a reorder method which works on threads and parent line
+		/*calculate depth
+		
+		for(MessageLightView view:views) {
+			if(view.getParentKey() == null) {
+				view.setDepth(0);
+			} else {
+				view.setDepth(1);
+				for(MessageLightView parent = keyToViews.get(view.getParentKey()); parent != null; parent = keyToViews.get(parent.getParentKey())) {
+					view.setDepth(view.getDepth() + 1);
+				}
+			}
+		}
+		
+		//order
+		 */
+
+		dataModel.setObjects(views);
+	}
+	/*
+	private class MessageComparator implements Comparator<MessageLightView> {
+
+		@Override
+		public int compare(MessageLightView v1, MessageLightView v2) {
+			Long tt1 = v1.getThreadtopKey() == null ? v1.getKey() : v1.getThreadtopKey();
+			Long tt2 = v2.getThreadtopKey() == null ? v2.getKey() : v2.getThreadtopKey();
+			int c = Long.compare(tt1.longValue(), tt2.longValue());
+			if(c == 0) {
+				
+			}
+			return c;
+		}
+	}
+	*/
+	
+	public void loadMessages(List<MessageLightView> views) {
+		dataModel.setObjects(views);
+		tableEl.reloadData();
+		tableEl.reset();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		if(withType) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ForumMessageCols.type.i18nKey(), ForumMessageCols.type.ordinal(),
+				true, ForumMessageCols.type.name(), new StatusTypeCellRenderer()));
+		}
+		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(ForumMessageCols.thread.i18nKey(), ForumMessageCols.thread.ordinal(),
+				"select", true, ForumMessageCols.thread.name(), new StaticFlexiCellRenderer("select", new IndentCellRenderer())));
+		
+		int colPos = USER_PROPS_OFFSET;
+		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+			if (userPropertyHandler == null) continue;
+
+			String propName = userPropertyHandler.getName();
+			boolean visible = userManager.isMandatoryUserProperty(USER_PROPS_ID , userPropertyHandler);
+
+			FlexiColumnModel col;
+			if(UserConstants.FIRSTNAME.equals(propName) || UserConstants.LASTNAME.equals(propName)) {
+				col = new StaticFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, "select", true, propName,
+						new StaticFlexiCellRenderer("select", new TextFlexiCellRenderer()));
+			} else {
+				col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, true, propName);
+			}
+			columnsModel.addFlexiColumnModel(col);
+			colPos++;
+		}
+
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ForumMessageCols.lastModified.i18nKey(), ForumMessageCols.lastModified.ordinal(),
+				true, ForumMessageCols.lastModified.name()));
+
+		dataModel = new ForumMessageDataModel(columnsModel, getTranslator());
+		tableEl = uifactory.addTableElement(getWindowControl(), "messages", dataModel, getTranslator(), formLayout);
+		tableEl.setRowCssDelegate(this);
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(tableEl == source) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				String cmd = se.getCommand();
+				if("select".equals(cmd)) {
+					MessageLightView message = dataModel.getObject(se.getIndex());
+					fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_MESSAGE, message.getKey()));
+				}
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumUserDataModel.java b/src/main/java/org/olat/modules/fo/ui/ForumUserDataModel.java
new file mode 100644
index 00000000000..4eca55c8002
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumUserDataModel.java
@@ -0,0 +1,116 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.StringHelper;
+import org.olat.group.ui.main.AbstractMemberListController;
+import org.olat.modules.fo.model.ForumUser;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumUserDataModel extends DefaultFlexiTableDataModel<ForumUser>
+	implements SortableFlexiTableDataModel<ForumUser> {
+	
+	private Translator translator;
+	
+	public ForumUserDataModel(FlexiTableColumnModel columnsModel, Translator translator) {
+		super(columnsModel);
+		this.translator = translator;
+	}
+
+	@Override
+	public void sort(SortKey orderBy) {
+		if(orderBy != null) {
+			List<ForumUser> views = new ForumUserDataModelSort(orderBy, this, null).sort();
+			super.setObjects(views);
+		}
+	}
+	
+	@Override
+	public Object getValueAt(int row, int col) {
+		ForumUser forumUser = getObject(row);
+		return getValueAt(forumUser, col);
+	}
+
+	@Override
+	public Object getValueAt(ForumUser row, int col) {
+		if(col >= 0 && col < UserCols.values().length) {
+			switch(UserCols.values()[col]) {
+				case replies: return row.getNumOfReplies();
+				case threads: return row.getNumOfThreads();
+				case lastModified: return row.getLastModified();
+				case numOfWords: return row.getNumOfWords();
+				case numOfCharacters: return row.getNumOfCharacters();
+			}
+		}
+		
+		int propPos = col - AbstractMemberListController.USER_PROPS_OFFSET;
+		if(StringHelper.containsNonWhitespace(row.getPseudonym())) {
+			return propPos == 0 ? row.getPseudonym() : null;
+		}
+		if(row.isGuest()) {
+			return propPos == 0 ? translator.translate("guest") : null;
+		}
+		return row.getIdentityProp(propPos);
+	}
+
+	@Override
+	public DefaultFlexiTableDataModel<ForumUser> createCopyWithEmptyList() {
+		return new ForumUserDataModel(getTableColumnModel(), translator);
+	}
+	
+	public enum UserCols {
+		replies("table.user.replies"),
+		threads("table.user.threads"),
+		lastModified("table.lastModified"),
+		numOfWords("table.numOfCharacters"),
+		numOfCharacters("table.numOfWords");
+		
+		private final String i18nKey;
+		
+		private UserCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		public String i18nKey() {
+			return i18nKey;
+		}
+	}
+	
+	public class ForumUserDataModelSort extends SortableFlexiTableModelDelegate<ForumUser> {
+		
+		public ForumUserDataModelSort(SortKey orderBy, SortableFlexiTableDataModel<ForumUser> tableModel, Locale locale) {
+			super(orderBy, tableModel, locale);
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumUserListController.java b/src/main/java/org/olat/modules/fo/ui/ForumUserListController.java
new file mode 100644
index 00000000000..3c28ecb92a8
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ForumUserListController.java
@@ -0,0 +1,177 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.id.UserConstants;
+import org.olat.core.util.Util;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.model.ForumUser;
+import org.olat.modules.fo.model.ForumUserStatistics;
+import org.olat.modules.fo.ui.ForumUserDataModel.UserCols;
+import org.olat.modules.fo.ui.events.SelectUserEvent;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ForumUserListController extends FormBasicController {
+
+	protected static final String USER_PROPS_ID = ForumUserListController.class.getCanonicalName();
+	
+	public static final int USER_PROPS_OFFSET = 500;
+	
+	private FormLink backLink;
+	private FlexiTableElement tableEl;
+	private ForumUserDataModel dataModel;
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+	
+	private final Forum forum;
+
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	
+	public ForumUserListController(UserRequest ureq, WindowControl wControl, Forum forum) {
+		super(ureq, wControl, "user_list");
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+		setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
+		
+		this.forum = forum;
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(USER_PROPS_ID, isAdministrativeUser);
+		
+		initForm(ureq);
+		loadModel();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		backLink = uifactory.addFormLink("back", formLayout, Link.LINK_BACK);
+		
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		
+		int colPos = USER_PROPS_OFFSET;
+		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+			if (userPropertyHandler == null) continue;
+
+			String propName = userPropertyHandler.getName();
+			boolean visible = userManager.isMandatoryUserProperty(USER_PROPS_ID , userPropertyHandler);
+
+			FlexiColumnModel col;
+			if(UserConstants.FIRSTNAME.equals(propName) || UserConstants.LASTNAME.equals(propName)) {
+				col = new StaticFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, "select", true, propName,
+						new StaticFlexiCellRenderer("select", new TextFlexiCellRenderer()));
+			} else {
+				col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, true, propName);
+			}
+			columnsModel.addFlexiColumnModel(col);
+			colPos++;
+		}
+		
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(UserCols.threads.i18nKey(), UserCols.threads.ordinal(),
+				true, UserCols.threads.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(UserCols.replies.i18nKey(), UserCols.replies.ordinal(),
+				true, UserCols.replies.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(UserCols.lastModified.i18nKey(), UserCols.lastModified.ordinal(),
+				true, UserCols.lastModified.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(UserCols.numOfWords.i18nKey(), UserCols.numOfWords.ordinal(),
+				true, UserCols.numOfWords.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(UserCols.numOfCharacters.i18nKey(), UserCols.numOfCharacters.ordinal(),
+				true, UserCols.numOfCharacters.name()));
+		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("viewswitch.title", translate("viewswitch.title"), "select"));
+
+		dataModel = new ForumUserDataModel(columnsModel, getTranslator());
+		tableEl = uifactory.addTableElement(getWindowControl(), "users", dataModel, getTranslator(), formLayout);
+		tableEl.setPageSize(50);
+	}
+	
+	private void loadModel() {
+		List<ForumUserStatistics> statisticsList = forumManager.getForumUserStatistics(forum);
+		List<ForumUser> users = new ArrayList<>(statisticsList.size());
+		for(ForumUserStatistics statistics:statisticsList) {
+			users.add(new ForumUser(statistics, userPropertyHandlers, getLocale()));
+		}
+		dataModel.setObjects(users);
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(backLink == source) {
+			fireEvent(ureq, Event.BACK_EVENT);
+		} else if(tableEl == source) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				String cmd = se.getCommand();
+				if("select".equals(cmd)) {
+					ForumUser user = dataModel.getObject(se.getIndex());
+					doSelect(ureq, user.getIdentityKey(), user.getPseudonym(), user.isGuest());
+				}
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	private void doSelect(UserRequest ureq, Long identityKey, String pseudonym, boolean guest) {
+		fireEvent(ureq, new SelectUserEvent(identityKey, pseudonym, guest));
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/IndentCellRenderer.java b/src/main/java/org/olat/modules/fo/ui/IndentCellRenderer.java
new file mode 100644
index 00000000000..d4bdcf7de56
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/IndentCellRenderer.java
@@ -0,0 +1,59 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.gui.render.URLBuilder;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.Formatter;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class IndentCellRenderer implements FlexiCellRenderer {
+
+	private static final int MAXINDENTS = 20;
+	
+	@Override
+	public void render(Renderer renderer, StringOutput target, Object cellValue, int row,
+			FlexiTableComponent source, URLBuilder ubu, Translator translator) {
+		
+		Object m = source.getFlexiTableElement().getTableDataModel().getObject(row);
+		if(m instanceof MessageLightView && cellValue instanceof String) {
+			MessageLightView message = (MessageLightView)m;
+			int indent = message.getDepth();
+			if (indent > MAXINDENTS) {
+				indent = MAXINDENTS;
+			}
+			target.append("<div style=\"white-space: nowrap;")
+			      .append("padding-left: ").append(indent).append("em;\">")
+			      .append(Formatter.truncate((String)cellValue, 50 - indent))
+			      .append("</div>");
+		} else if(cellValue instanceof String) {
+			target.append((String)cellValue);
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/MessageEditController.java b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java
similarity index 57%
rename from src/main/java/org/olat/modules/fo/MessageEditController.java
rename to src/main/java/org/olat/modules/fo/ui/MessageEditController.java
index aed86d9b60c..e9522f34a55 100644
--- a/src/main/java/org/olat/modules/fo/MessageEditController.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java
@@ -17,7 +17,7 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.modules.fo;
+package org.olat.modules.fo.ui;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,15 +25,16 @@ import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Iterator;
 import java.util.List;
 
+import org.olat.basesecurity.BaseSecurity;
+import org.olat.basesecurity.IdentityShort;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
+import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.FormUIFactory;
 import org.olat.core.gui.components.form.flexible.elements.FileElement;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
@@ -50,17 +51,27 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.AssertException;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.WebappHelper;
+import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.ForumChangedEvent;
+import org.olat.modules.fo.ForumLoggingAction;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.user.DisplayPortraitController;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * Description:<br>
@@ -74,10 +85,6 @@ import org.olat.user.DisplayPortraitController;
  */
 public class MessageEditController extends FormBasicController {
 
-	protected static final String EDITMODE_NEWTHREAD = "newthread";
-	protected static final String EDITMODE_EDITMSG = "editmsg";
-	protected static final String EDITMODE_REPLYMSG = "replymsg";
-	private static final String STICKY_SET_IDENTIFIER = "stickyset";
 	private static final String CMD_DELETE_ATTACHMENT = "delete.attachment.";
 	protected static final Integer MAX_BODY_LENGTH = 32000;
 
@@ -86,25 +93,42 @@ public class MessageEditController extends FormBasicController {
 	// attached files anywhere at the time of deleting it
 	// likely to be resolved after user logs out, caches get cleared - and if not the server
 	// restart overnight definitely removes those .nfs files.
-	protected static final String[] ATTACHMENT_EXCLUDE_PREFIXES = new String[]{".nfs", ".CVS", ".DS_Store"};
-
-	private ForumCallback forumCallback;
-	private TextElement msgTitle;
-	private RichTextElement msgBody;
-	private MultipleSelectionElement stickyCheckBox;
-	private String editMode;
+	public static final String[] ATTACHMENT_EXCLUDE_PREFIXES = new String[]{".nfs", ".CVS", ".DS_Store"};
+	private static final String[] enableKeys = new String[]{ "on" };
+	
+	private RichTextElement bodyEl;
+	private TextElement titleEl, pseudonymEl;
+	private MultipleSelectionElement usePseudonymEl;
 	private FileElement fileUpload;
 
-	private Message message, replyMessage = null;
+	
 	private DisplayPortraitController portraitCtr;
-	private ForumManager fm;
-	private DialogBoxController delAttCtr;
+	private DialogBoxController confirmDeleteAttachmentCtrl;
+	
 	private VFSContainer tempUploadFolder;
 	private boolean userIsMsgCreator;
 	private boolean msgHasChildren;
 	private VFSItemExcludePrefixFilter exclFilter;
-	
 
+	private final Forum forum;
+	private final EditMode editMode;
+	private final boolean guestOnly;
+	private String proposedPseudonym;
+	private final ForumCallback foCallback;
+	private Message message, parentMessage;
+
+	@Autowired
+	private ForumManager fm;
+	@Autowired
+	private BaseSecurity securityManager;
+	@Autowired
+	private NotificationsManager notificationsManager;
+	
+	public enum EditMode {
+		newThread,
+		edit,
+		reply
+	}
 
 	/**
 	 * 
@@ -114,29 +138,21 @@ public class MessageEditController extends FormBasicController {
 	 * @param message may be a new message created by ForumManager.createMessage() which is not yet saved in db
 	 * @param quoteMessage may be null if Editor isn't used to reply to a message
 	 */
-	public MessageEditController(UserRequest ureq, WindowControl control, ForumCallback forumCallback, Message message, Message quoteMessage) {
+	public MessageEditController(UserRequest ureq, WindowControl control, Forum forum, ForumCallback foCallback,
+			Message message, Message parentMessage, EditMode mode) {
 		super(ureq, control, FormBasicController.LAYOUT_VERTICAL);
-		this.forumCallback = forumCallback;
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+		
+		this.forum = forum;
+		this.editMode = mode;
 		this.message = message;
-		this.fm = ForumManager.getInstance();
+		this.foCallback = foCallback;
+		this.parentMessage = parentMessage;
+		this.guestOnly = ureq.getUserSession().getRoles().isGuestOnly();
 
 		tempUploadFolder = new LocalFolderImpl(new File(WebappHelper.getTmpDir(), CodeHelper.getUniqueID()));
-		// nfs creates .nfs12345 - files during deletion, those shouldn't be displayed / copied after save
-		// See OLAT-4182 and OLAT-4219
 		exclFilter = new VFSItemExcludePrefixFilter(ATTACHMENT_EXCLUDE_PREFIXES);
 		
-		// decide which mode is used
-		this.editMode = "";
-		if (message.getKey() == null) {
-			editMode = EDITMODE_NEWTHREAD;
-		} else if (quoteMessage == null && message.getKey() != null) {
-			editMode = EDITMODE_EDITMSG;
-		} else if (quoteMessage != null) {
-			editMode = EDITMODE_REPLYMSG;
-			this.replyMessage = message;
-			this.message = quoteMessage;
-		} else throw new AssertException(
-				"EditModus for Forum could not be determined. Error in logic or wrong parameters for this constructor", null);
 		initForm(ureq);
 	}
 
@@ -148,40 +164,61 @@ public class MessageEditController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		formLayout.setElementCssClass("o_sel_forum_message_form");
 		
-		msgTitle = uifactory.addTextElement("msgTitle", "msg.title", 100, message.getTitle(), formLayout);
-		msgTitle.setElementCssClass("o_sel_forum_message_title");
-		msgTitle.setMandatory(true);
-		msgTitle.setNotEmptyCheck("error.field.not.empty");
-		msgBody = uifactory.addRichTextElementForStringData("msgBody", "msg.body", message.getBody(), 15, -1, true, null, null,
+		titleEl = uifactory.addTextElement("msgTitle", "msg.title", 100, message.getTitle(), formLayout);
+		titleEl.setElementCssClass("o_sel_forum_message_title");
+		titleEl.setMandatory(true);
+		titleEl.setNotEmptyCheck("error.field.not.empty");
+		bodyEl = uifactory.addRichTextElementForStringData("msgBody", "msg.body", message.getBody(), 15, -1, true, null, null,
 				formLayout, ureq.getUserSession(), getWindowControl());
-		msgBody.setMandatory(true);
-		msgBody.setNotEmptyCheck("error.field.not.empty");
-		msgBody.setMaxLength(MAX_BODY_LENGTH);
-		msgBody.setNotLongerThanCheck(MAX_BODY_LENGTH, "input.toolong");
-
-		// attachment upload
-		uifactory.addStaticTextElement("attachmentTitle", null, translate("attachments"), formLayout);//null -> no label
+		bodyEl.setMandatory(true);
+		bodyEl.setNotEmptyCheck("error.field.not.empty");
+		bodyEl.setMaxLength(MAX_BODY_LENGTH);
+		bodyEl.setNotLongerThanCheck(MAX_BODY_LENGTH, "input.toolong");
 		
-		setEditPermissions(ureq, message);
+		setEditPermissions(message);
 		// list existing attachments. init attachment layout now, to place it in
 		// right position
 		createOrUpdateAttachmentListLayout(formLayout);
 
 		// provide upload field
-		if (forumCallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (msgHasChildren == false))) {
+		if (foCallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (msgHasChildren == false))) {
 			fileUpload = uifactory.addFileElement(getWindowControl(), "msg.upload", formLayout);
 			fileUpload.addActionListener(FormEvent.ONCHANGE);
 			fileUpload.setMaxUploadSizeKB((int) FolderConfig.getLimitULKB(), "attachments.too.big", new String[] { ((Long) (FolderConfig
 					.getLimitULKB() / 1024)).toString() });
 		}
-
-		// show stickyCheckBox only if moderator and message is threadtop
-		stickyCheckBox = uifactory.addCheckboxesHorizontal("stickyCheckBox", null, formLayout, new String[] { STICKY_SET_IDENTIFIER },
-				new String[] { translate("msg.sticky") });
-		Status msgStatus = Status.getStatus(message.getStatusCode());
-		if (msgStatus.isSticky()) stickyCheckBox.select(STICKY_SET_IDENTIFIER, true);
-		if (!(forumCallback.mayEditMessageAsModerator() && message.getParent() == null)) {
-			stickyCheckBox.setVisible(false);
+		
+		if(foCallback.mayUsePseudonym() || guestOnly) {
+			String[] enablePseudonymValues = new String[]{ translate("use.pseudonym.label") };
+			usePseudonymEl = uifactory.addCheckboxesHorizontal("use.pseudonym", formLayout, enableKeys, enablePseudonymValues);
+			if(StringHelper.containsNonWhitespace(message.getPseudonym()) || guestOnly) {
+				usePseudonymEl.select(enableKeys[0], true);
+			}
+			pseudonymEl = uifactory.addTextElement("pseudonym", "pseudonym", 128, message.getPseudonym(), formLayout);
+
+			if(guestOnly) {
+				usePseudonymEl.setVisible(false);
+				pseudonymEl.setLabel("use.pseudonym", null);
+				pseudonymEl.setMandatory(true);
+				proposedPseudonym = (String)ureq.getUserSession().getEntry("FOPseudo" + forum.getKey());
+				if(StringHelper.containsNonWhitespace(proposedPseudonym)) {
+					pseudonymEl.setValue(proposedPseudonym);
+				}
+			} else if(userIsMsgCreator) {
+				pseudonymEl.setLabel(null, null);
+				usePseudonymEl.addActionListener(FormEvent.ONCHANGE);
+				proposedPseudonym = fm.getPseudonym(forum, getIdentity());
+				if(StringHelper.containsNonWhitespace(proposedPseudonym)) {
+					pseudonymEl.setValue(proposedPseudonym);
+					usePseudonymEl.select(enableKeys[0], true);
+				}
+				usePseudonymEl.setMandatory(usePseudonymEl.isAtLeastSelected(1));
+				pseudonymEl.setVisible(usePseudonymEl.isAtLeastSelected(1));
+			} else {
+				usePseudonymEl.setVisible(false);
+				pseudonymEl.setLabel("use.pseudonym", null);
+				pseudonymEl.setEnabled(false);
+			}
 		}
 
 		// save and cancel buttons
@@ -191,38 +228,44 @@ public class MessageEditController extends FormBasicController {
 		uifactory.addFormCancelButton("msg.cancel", buttonLayout, ureq, getWindowControl());
 
 		// show message replying to, if in reply modus
-		if (editMode.equals(EDITMODE_REPLYMSG)) {
-			FormLayoutContainer replyMsgLayout = FormLayoutContainer.createCustomFormLayout("replyMsg", getTranslator(), Util
-					.getPackageVelocityRoot(this.getClass())
-					+ "/msg-preview.html");
+		if (editMode == EditMode.reply) {
+			String previewPage = Util.getPackageVelocityRoot(this.getClass()) + "/msg-preview.html";
+			FormLayoutContainer replyMsgLayout = FormLayoutContainer.createCustomFormLayout("replyMsg", getTranslator(), previewPage);
 			uifactory.addSpacerElement("spacer1", formLayout, false);
 			formLayout.add(replyMsgLayout);
-			replyMsgLayout.setLabel("label.replytomsg", new String[] { StringHelper.escapeHtml(replyMessage.getTitle()) });
-			Identity identity = replyMessage.getCreator();
-			replyMsgLayout.contextPut("identity", identity);
-			replyMsgLayout.contextPut("messageBody", replyMessage.getBody());
-			replyMsgLayout.contextPut("message", replyMessage);
-			portraitCtr = new DisplayPortraitController(ureq, getWindowControl(), identity, true, true);
-			replyMsgLayout.put("portrait", portraitCtr.getInitialComponent());
+			
+			replyMsgLayout.setLabel("label.replytomsg", new String[] { StringHelper.escapeHtml(parentMessage.getTitle()) });
+			replyMsgLayout.contextPut("messageBody", parentMessage.getBody());
+			replyMsgLayout.contextPut("message", parentMessage);
+			replyMsgLayout.contextPut("guestOnly", new Boolean(guestOnly));
+
+			Identity creator = parentMessage.getCreator();
+			if(creator != null) {
+				replyMsgLayout.contextPut("identity", creator);
+				portraitCtr = new DisplayPortraitController(ureq, getWindowControl(), creator, true, true);
+				replyMsgLayout.put("portrait", portraitCtr.getInitialComponent());
+			}
 		}
-
 	}
 
-	private void setEditPermissions(UserRequest ureq, Message msg){
+	private void setEditPermissions(Message msg){
 		// defaults for a new message
 		userIsMsgCreator = true;
 		msgHasChildren = false;
 		// set according to message
 		if (msg.getKey() != null) {
-			userIsMsgCreator = ureq.getIdentity().getKey().equals(msg.getCreator().getKey());
-			msgHasChildren = fm.hasChildren(msg);
+			if(msg.getCreator() != null) {
+				
+			} else {
+				userIsMsgCreator = getIdentity().equals(msg.getCreator());
+				msgHasChildren = fm.hasChildren(msg);
+			}
 		}
 	}
 	
 	// adds or updates the list of already existing attachments with a delete
 	// button for each
 	private void createOrUpdateAttachmentListLayout(FormItemContainer formLayout) {
-		FormUIFactory formUIf = FormUIFactory.getInstance();
 		FormItem attachLayout = formLayout.getFormComponent("attachLayout");
 
 		List<VFSItem> attachments = new ArrayList<VFSItem>();
@@ -252,10 +295,9 @@ public class MessageEditController extends FormBasicController {
 
 		// add delete links for each attachment if user is allowed to see them
 		int attNr = 1;
-		for (Iterator<VFSItem> iterator = attachments.iterator(); iterator.hasNext();) {
-			VFSItem tmpFile = iterator.next();
-			FormLink tmpLink = formUIf.addFormLink(CMD_DELETE_ATTACHMENT + attNr, tmpLayout, Link.BUTTON_XSMALL);
-			if (!(forumCallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (msgHasChildren == false)))) {
+		for (VFSItem tmpFile : attachments) {
+			FormLink tmpLink = uifactory.addFormLink(CMD_DELETE_ATTACHMENT + attNr, tmpLayout, Link.BUTTON_XSMALL);
+			if (!(foCallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (msgHasChildren == false)))) {
 				tmpLink.setEnabled(false);  
 				tmpLink.setVisible(false);
 			}
@@ -275,10 +317,43 @@ public class MessageEditController extends FormBasicController {
 			portraitCtr.dispose();
 			portraitCtr = null;
 		}
-		if (delAttCtr != null) {
-			delAttCtr.dispose();
-			delAttCtr = null;
+		if (confirmDeleteAttachmentCtrl != null) {
+			confirmDeleteAttachmentCtrl.dispose();
+			confirmDeleteAttachmentCtrl = null;
+		}
+	}
+
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = true;
+		if(usePseudonymEl != null) {
+			pseudonymEl.clearError();
+			if(guestOnly || usePseudonymEl.isAtLeastSelected(1)) {
+				if(!StringHelper.containsNonWhitespace(pseudonymEl.getValue())) {
+					pseudonymEl.setErrorKey("form.legende.mandatory", null);
+					allOk &= false;
+				} else if(!validatePseudonym(pseudonymEl.getValue())) {
+					pseudonymEl.setErrorKey("error.pseudonym", null);
+					allOk &= false;
+				}
+			}
+		}
+		return allOk & super.validateFormLogic(ureq);
+	}
+	
+	private boolean validatePseudonym(String value) {
+		boolean allOk = true;
+		
+		if(proposedPseudonym == null || !proposedPseudonym.equalsIgnoreCase(value)) {
+			List<IdentityShort> sameValues = securityManager.searchIdentityShort(value, 250);
+			if(sameValues.size() == 1) {
+				allOk &= !sameValues.get(0).getKey().equals(getIdentity().getKey());
+			} else if(sameValues.size() > 1) {
+				allOk &= false;
+			}
 		}
+		
+		return allOk;
 	}
 
 	/**
@@ -288,21 +363,76 @@ public class MessageEditController extends FormBasicController {
 	protected void formOK(UserRequest ureq) {
 		// if msg exist -> persist uploads directly to final dest
 		if (message.getKey() != null) {
-			persistTempUploadedFiles(message);
-		}
-		// prevent modifying an old object!
-		if (getLastEditModus().equals(EDITMODE_EDITMSG)) {
 			message = fm.loadMessage(message.getKey());
 		}
+
 		// set values from form to message
-		saveValuesToMessage(message);
+		message.setTitle(titleEl.getValue());
+		String body = bodyEl.getValue();
+		
+		String tinyBlanc = "<p>&nbsp;";
+		if(body.startsWith(tinyBlanc)) {
+			body = "<p>" + body.substring(tinyBlanc.length(), body.length());
+		}
+
+		message.setBody(body.trim());
+		if(usePseudonymEl != null && usePseudonymEl.isAtLeastSelected(1)) {
+			message.setPseudonym(pseudonymEl.getValue());
+			if(guestOnly) {
+				ureq.getUserSession().putEntry("FOPseudo" + forum.getKey(), message.getPseudonym());
+			}
+		} else if(message.getCreator() != null && message.getCreator().equals(getIdentity())) {
+			message.setPseudonym(null);
+		}
+		
+		if(editMode == EditMode.newThread) {
+			if(foCallback.mayOpenNewThread()) {
+				// save a new thread
+				fm.addTopMessage(message);
+				fm.markAsRead(getIdentity(), forum, message);
+				// if notification is enabled -> notify the publisher about news
+				
+				notifiySubscription();
+				addLoggingResourceable(LoggingResourceable.wrap(message));
+				ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.NEW, message.getKey(), null);
+				CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forum);	
+				ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_CREATE, getClass());
+			} else {
+				showWarning("may.not.save.msg.as.author");
+			}
+
+		} else if(editMode == EditMode.edit) { 
+			boolean children = fm.countMessageChildren(message.getKey()) > 0;
+			if (foCallback.mayEditMessageAsModerator() || (userIsMsgCreator && !children)) {
+				message.setModifier(getIdentity());	
+				message = fm.updateMessage(message, true);
+				persistTempUploadedFiles(message);
+				
+				notifiySubscription();
+				ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_EDIT, getClass(),
+						LoggingResourceable.wrap(message));
+			} else {
+				showWarning("may.not.save.msg.as.author");
+			}
+		} else if(editMode == EditMode.reply) { 
+			fm.replyToMessage(message, parentMessage);
+			fm.markAsRead(getIdentity(), forum, message);
+			persistTempUploadedFiles(message);
+			
+			notifiySubscription();
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_REPLY_MESSAGE_CREATE, getClass(),
+					LoggingResourceable.wrap(message));
+		}
+		
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
+	
+	private void notifiySubscription() {
+		if (foCallback.getSubscriptionContext() != null) {
+			notificationsManager.markPublisherNews(foCallback.getSubscriptionContext(), getIdentity(), true);
+		}
+	}
 
-	/**
-	 * 
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formCancelled(org.olat.core.gui.UserRequest)
-	 */
 	@Override
 	protected void formCancelled(UserRequest ureq) {
 		// remove uploaded files if editing is canceled
@@ -310,14 +440,12 @@ public class MessageEditController extends FormBasicController {
 		fireEvent(ureq, Event.CANCELLED_EVENT);
 	}
 	
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.form.flexible.FormItem,
-	 *      org.olat.core.gui.components.form.flexible.impl.FormEvent)
-	 */
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if (source == fileUpload) {
+		if(usePseudonymEl == source) {
+			usePseudonymEl.setMandatory(usePseudonymEl.isAtLeastSelected(1));
+			pseudonymEl.setVisible(usePseudonymEl.isAtLeastSelected(1));
+		} else if (source == fileUpload) {
 			if (fileUpload.isUploadSuccess()) {
 				String fileName = fileUpload.getUploadFileName();
 				if (fileUpload.getUploadSize() / 1024 < fileUpload.getMaxUploadSizeKB()) {
@@ -359,12 +487,12 @@ public class MessageEditController extends FormBasicController {
 			// attachment delete button may have been pressed
 			Object userObj = activeLink.getUserObject();
 			if (userObj != null) {
-				setEditPermissions(ureq, message);
+				setEditPermissions(message);
 				if (userObj instanceof VFSLeaf) {
 					VFSLeaf file = (VFSLeaf) userObj;
-					if (forumCallback.mayEditMessageAsModerator() || ((userIsMsgCreator) && (msgHasChildren == false))) {
-						delAttCtr = activateYesNoDialog(ureq, null, translate("reallydeleteAtt"), delAttCtr);
-						delAttCtr.setUserObject(file);
+					if (foCallback.mayEditMessageAsModerator() || (userIsMsgCreator && !msgHasChildren)) {
+						confirmDeleteAttachmentCtrl = activateYesNoDialog(ureq, null, translate("reallydeleteAtt"), confirmDeleteAttachmentCtrl);
+						confirmDeleteAttachmentCtrl.setUserObject(file);
 					} else {
 						if ((userIsMsgCreator) && (msgHasChildren == true)) {
 							// user is author of the current message but it has already at
@@ -394,50 +522,30 @@ public class MessageEditController extends FormBasicController {
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		super.event(ureq, source, event);
-		if (source == delAttCtr) {
-			if (DialogBoxUIFactory.isYesEvent(event)) { // ok to really delete this
-																									// attachment
-				DialogBoxController dbCtr = (DialogBoxController) source;
-				Object userObj = dbCtr.getUserObject();
+		if (source == confirmDeleteAttachmentCtrl) {
+			if (DialogBoxUIFactory.isYesEvent(event)) { // ok to really delete this																					// attachment
+				Object userObj = confirmDeleteAttachmentCtrl.getUserObject();
 				if (userObj instanceof VFSLeaf) {
-					VFSLeaf file = (VFSLeaf) userObj;
-					file.delete();
+					((VFSLeaf)userObj).delete();
 					showInfo("delete.att.ok");
-					createOrUpdateAttachmentListLayout(this.flc);
+					createOrUpdateAttachmentListLayout(flc);
 				}
 			}
 		}
 	}
 
-	private void saveValuesToMessage(Message tmpMessage) {
-		tmpMessage.setTitle(msgTitle.getValue());
-		String newBody = msgBody.getValue();
-		// strip 1 empty line from beginning and end.
-		if (newBody.startsWith(ForumController.TINYMCE_EMPTYLINE_CODE)) {
-			newBody = newBody
-					.substring(newBody.indexOf(ForumController.TINYMCE_EMPTYLINE_CODE) + ForumController.TINYMCE_EMPTYLINE_CODE.length());
-		}
-		if (newBody.endsWith(ForumController.TINYMCE_EMPTYLINE_CODE)) {
-			newBody = newBody.substring(0, newBody.lastIndexOf(ForumController.TINYMCE_EMPTYLINE_CODE));
-		}
-		newBody = newBody.trim();
-		tmpMessage.setBody(newBody);
-		Status msgStatus = Status.getStatus(tmpMessage.getStatusCode());
-		boolean isSticky = stickyCheckBox.getSelectedKeys().contains(STICKY_SET_IDENTIFIER);
-		msgStatus.setSticky(isSticky);
-		tmpMessage.setStatusCode(Status.getStatusCode(msgStatus));
-	}
-
 	/**
 	 * Used to get the message edited right before. the new values got saved to it
 	 * locally by formOK()
 	 * 
 	 * @return the edited message
 	 */
-	public Message getMessageBackAfterEdit() {
+	public Message getMessage() {
 		if (!StringHelper.containsNonWhitespace(message.getTitle()) && message == null) {
 			throw new AssertException("Getting back the edited message failed! You first have to edit one and intialize properly!");
-		} else return message;
+		} else {
+			return message;
+		}
 	}
 
 	/**
@@ -446,7 +554,7 @@ public class MessageEditController extends FormBasicController {
 	 * @return editMode which can be matched against static Strings from this
 	 *         class
 	 */
-	public String getLastEditModus() {
+	public EditMode getLastEditModus() {
 		return editMode;
 	}
 
@@ -459,7 +567,7 @@ public class MessageEditController extends FormBasicController {
 	 */
 	public void persistTempUploadedFiles(Message tmpMessage) {
 		if (tmpMessage == null) throw new AssertException("Message may not be null to persist temp files");
-		VFSContainer msgContainer = fm.getMessageContainer(message.getForum().getKey(), message.getKey());
+		VFSContainer msgContainer = fm.getMessageContainer(forum.getKey(), message.getKey());
 		if (msgContainer != null) {
 			List<VFSItem> tmpFList = getTempFolderFileList();
 			for (VFSItem file : tmpFList) {
@@ -485,5 +593,4 @@ public class MessageEditController extends FormBasicController {
 			tempUploadFolder = null;
 		}
 	}
-
 }
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageLightView.java b/src/main/java/org/olat/modules/fo/ui/MessageLightView.java
new file mode 100644
index 00000000000..3f7cbd13fc6
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/MessageLightView.java
@@ -0,0 +1,123 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.modules.fo.MessageLight;
+import org.olat.modules.fo.MessageRef;
+import org.olat.user.UserPropertiesRow;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+
+/**
+ * 
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class MessageLightView extends UserPropertiesRow implements MessageRef {
+	
+	private final int type;
+	private final Long key;
+	private final String title;
+
+	private final Long parentKey;
+	private final Date lastModified;
+
+	private final boolean guest;
+	private final String pseudonym;
+
+	private Long threadtopKey;
+
+	private int depth;
+	private int numOfChildren = 0;
+
+	public MessageLightView(MessageLight message, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
+		super(message.getCreator(), userPropertyHandlers, locale);
+		key = message.getKey();
+		type = message.getStatusCode();
+		title = message.getTitle();
+		guest = message.isGuest();
+		pseudonym = message.getPseudonym();
+		lastModified = message.getLastModified();
+		parentKey = message.getParentKey();
+		threadtopKey = message.getThreadtop().getKey();
+	}
+	
+	@Override
+	public Long getKey() {
+		return key;
+	}
+	
+	public Long getParentKey() {
+		return parentKey;
+	}
+	
+	public Long getThreadtopKey() {
+		return threadtopKey;
+	}
+
+	@Override
+	public int getStatusCode() {
+		return type;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+	
+	public int getDepth() {
+		return depth;
+	}
+
+	public void setDepth(int depth) {
+		this.depth = depth;
+	}
+
+	public boolean isHasChildren() {
+		return numOfChildren > 0;
+	}
+
+	public int getNumOfChildren() {
+		return numOfChildren;
+	}
+
+	public void setNumOfChildren(int numOfChildren) {
+		this.numOfChildren = numOfChildren;
+	}
+
+	public boolean isThreadTop() {
+		return threadtopKey != null;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageListController.java b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
new file mode 100644
index 00000000000..81d76f0e1af
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
@@ -0,0 +1,1173 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.commons.modules.bc.meta.MetaInfo;
+import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
+import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.services.mark.Mark;
+import org.olat.core.commons.services.mark.MarkResourceStat;
+import org.olat.core.commons.services.mark.MarkingService;
+import org.olat.core.dispatcher.mapper.Mapper;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.link.LinkPopupSettings;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.modal.DialogBoxController;
+import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
+import org.olat.core.gui.media.MediaResource;
+import org.olat.core.gui.media.NotFoundMediaResource;
+import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.User;
+import org.olat.core.id.UserConstants;
+import org.olat.core.id.context.BusinessControlFactory;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.ConsumableBoolean;
+import org.olat.core.util.Formatter;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.Util;
+import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.resource.OresHelper;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.core.util.vfs.VFSMediaResource;
+import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.ForumChangedEvent;
+import org.olat.modules.fo.ForumLoggingAction;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.MessageLight;
+import org.olat.modules.fo.MessageRef;
+import org.olat.modules.fo.Status;
+import org.olat.modules.fo.archiver.formatters.ForumDownloadResource;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.ui.MessageEditController.EditMode;
+import org.olat.modules.fo.ui.events.SelectMessageEvent;
+import org.olat.portfolio.EPUIFactory;
+import org.olat.portfolio.manager.EPFrontendManager;
+import org.olat.user.DisplayPortraitController;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * The list of messages in a thread.
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class MessageListController extends BasicController {
+
+	protected static final String USER_PROPS_ID = ForumUserListController.class.getCanonicalName();
+	
+	private final VelocityContainer mainVC;
+
+	private Link backLink, archiveThreadButton,
+			stickyButton, removeStickyButton,
+			closeThreadButton, openThreadButton,
+			hideThreadButton, showThreadButton,
+			allButton, allFlatButton, oneButton, markedButton, newButton;
+	
+	private CloseableModalController cmc;
+	private MessageEditController editMessageCtrl, replyMessageCtrl;
+	private DialogBoxController confirmDeleteCtrl, confirmSplitCtrl;
+	private ForumMessageListController moveCtrl, messageTableCtrl;
+	
+	private Message thread;
+	
+	private final Forum forum;
+	private final boolean guestOnly;
+	private final Formatter formatter;
+	private final String thumbnailMapper;
+	private final ForumCallback foCallback;
+	private final OLATResourceable forumOres;
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+	
+	private LoadMode loadMode;
+	private List<MessageView> backupViews;
+
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private MarkingService markingService;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	@Autowired
+	private EPFrontendManager epMgr;
+	
+	public MessageListController(UserRequest ureq, WindowControl wControl,
+			Forum forum, ForumCallback foCallback) {
+		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+
+		this.forum = forum;
+		this.foCallback = foCallback;
+		formatter = Formatter.getInstance(getLocale());
+		forumOres = OresHelper.createOLATResourceableInstance("Forum", forum.getKey());
+		guestOnly = ureq.getUserSession().getRoles().isGuestOnly();
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(USER_PROPS_ID, isAdministrativeUser);
+		
+		thumbnailMapper = registerCacheableMapper(ureq, "fo_att_" + forum.getKey(), new AttachmentsMapper());
+
+		mainVC = createVelocityContainer("threadview");
+		mainVC.contextPut("threadMode", Boolean.TRUE);
+		mainVC.contextPut("thumbMapper", thumbnailMapper);
+		mainVC.contextPut("guestOnly", new Boolean(guestOnly));
+		
+		messageTableCtrl = new ForumMessageListController(ureq, getWindowControl(), forum, false);
+		listenTo(messageTableCtrl);
+		mainVC.put("singleThreadTable", messageTableCtrl.getInitialComponent());
+		
+		putInitialPanel(mainVC);
+		initButtons();
+	}
+	
+	private void initButtons() {
+		backLink = LinkFactory.createCustomLink("backLinkLT", "back", "listalltitles", Link.LINK_BACK, mainVC, this);
+
+		archiveThreadButton = LinkFactory.createButtonSmall("archive.thread", mainVC, this);
+		archiveThreadButton.setIconLeftCSS("o_icon o_icon-fw o_icon_archive_tool");
+		
+		stickyButton = LinkFactory.createLink("msg.sticky", mainVC, this);
+		stickyButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_sticky_icon");
+		removeStickyButton = LinkFactory.createLink("remove.sticky", mainVC, this);
+		removeStickyButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_thread_icon");
+
+		closeThreadButton = LinkFactory.createLink("close.thread", mainVC, this);
+		closeThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_closed_icon");
+		openThreadButton = LinkFactory.createLink("open.thread", mainVC, this);
+		openThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_opened_icon");	
+
+		hideThreadButton = LinkFactory.createLink("hide.thread", mainVC, this);
+		hideThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_hidden_icon");
+		showThreadButton = LinkFactory.createLink("show.thread", mainVC, this);
+		showThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_visible_icon");
+
+		allButton = LinkFactory.createButtonSmall("viewswitch.threadview", mainVC, this);
+		allButton.setIconLeftCSS("o_icon o_icon-fw o_icon-flip-vertical o_forum_all_icon");
+		allFlatButton = LinkFactory.createButtonSmall("viewswitch.flatview", mainVC, this);
+		allFlatButton.setIconLeftCSS("o_icon o_icon-fw o_forum_all_flat_icon");
+		oneButton = LinkFactory.createButtonSmall("viewswitch.messageview", mainVC, this);
+		oneButton.setIconLeftCSS("o_icon o_icon-fw o_forum_one_icon");
+		markedButton = LinkFactory.createButtonSmall("viewswitch.marked", mainVC, this);
+		markedButton.setIconLeftCSS("o_icon o_icon-fw o_forum_marked_icon");
+		newButton = LinkFactory.createButtonSmall("viewswitch.new", mainVC, this);
+		newButton.setIconLeftCSS("o_icon o_icon-fw o_forum_new_icon");
+	}
+	
+	private void updateButtons(Link activeLink) {
+		allButton.setCustomEnabledLinkCSS(activeButton(allButton, activeLink));
+		allFlatButton.setCustomEnabledLinkCSS(activeButton(allFlatButton, activeLink));
+		oneButton.setCustomEnabledLinkCSS(activeButton(oneButton, activeLink));
+		markedButton.setCustomEnabledLinkCSS(activeButton(markedButton, activeLink));
+		newButton.setCustomEnabledLinkCSS(activeButton(newButton, activeLink));
+		
+		archiveThreadButton.setVisible(thread != null && foCallback.mayArchiveForum());
+		if(thread == null || guestOnly || !foCallback.mayEditMessageAsModerator()) {
+			closeThreadButton.setVisible(false);
+			openThreadButton.setVisible(false);
+			hideThreadButton.setVisible(false);
+			showThreadButton.setVisible(false);
+			stickyButton.setVisible(false);
+			removeStickyButton.setVisible(false);
+		} else {
+			Status status = Status.getStatus(thread.getStatusCode());
+			boolean isClosed = status.isClosed();
+			boolean isHidden = status.isHidden();
+			boolean isSticky = status.isSticky();
+			closeThreadButton.setVisible(!isClosed);
+			openThreadButton.setVisible(isClosed);
+			hideThreadButton.setVisible(!isHidden);
+			showThreadButton.setVisible(isHidden);
+			stickyButton.setVisible(foCallback.mayEditMessageAsModerator() && thread != null && !isSticky);
+			removeStickyButton.setVisible(foCallback.mayEditMessageAsModerator() && thread != null && isSticky);
+		}
+	}
+	
+	private String activeButton(Link link, Link activeLink) {
+		return "btn btn-sm btn-default o_forum_tool " + (link == activeLink ? "active" : "");
+	}
+	
+	private void reloadModel(UserRequest ureq, Message message) {
+		if(loadMode == LoadMode.thread) {
+			loadThread(ureq, thread);
+			scrollTo(message);
+		} else if(message != null) {
+			MessageView view = loadView(ureq, message);
+			backupViews.add(view);
+			
+			mainVC.contextPut("messages", backupViews);
+			messageTableCtrl.loadMessages(new ArrayList<>(0));
+
+			updateButtons(allFlatButton);
+			mainVC.contextPut("threadMode", Boolean.FALSE);
+			scrollTo(message);
+		}
+	}
+	
+	/**
+	 * The method doesn't scroll has the delete poped a blue box
+	 * @param ureq
+	 * @param message
+	 */
+	private void reloadModelAfterDelete(UserRequest ureq, MessageView message) {
+		if(loadMode == LoadMode.thread) {
+			loadThread(ureq, thread);
+		} else if(message != null) {
+			for(MessageView msg:backupViews) {
+				if(msg.getKey().equals(message.getKey())) {
+					backupViews.remove(msg);
+					break;
+				}
+			}
+			
+			mainVC.contextPut("messages", backupViews);
+			messageTableCtrl.loadMessages(new ArrayList<>(0));
+
+			updateButtons(allFlatButton);
+			mainVC.contextPut("threadMode", Boolean.FALSE);
+		}
+	}
+	
+	public void scrollTo(MessageRef ref) {
+		if(ref != null && (thread == null || !thread.getKey().equals(ref.getKey()))) {
+			mainVC.contextPut("goToMessage", new ConsumableBoolean(true));
+			mainVC.contextPut("goToMessageId", ref.getKey());
+		}
+	}
+	
+	public void loadUserMessages(UserRequest ureq, Identity user) {
+		loadMode = LoadMode.userMessages;
+		List<MessageLight> messages = forumManager.getLightMessagesByUser(forum, user);
+		backupViews = loadThread(ureq, messages, false);
+		messageTableCtrl.loadMessages(new ArrayList<>(0));
+		
+		allButton.setVisible(false);
+		updateButtons(allFlatButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextPut("filteredForFirstName", user.getUser().getProperty(UserConstants.FIRSTNAME, getLocale()));
+		mainVC.contextPut("filteredForLastName", user.getUser().getProperty(UserConstants.LASTNAME, getLocale()));
+	}
+	
+	public void loadUserMessagesUnderPseudo(UserRequest ureq, Identity user, String pseudonym) {
+		loadMode = LoadMode.userMessagesUnderPseudo;
+		List<MessageLight> messages = forumManager.getLightMessagesByUserUnderPseudo(forum, user, pseudonym);
+		backupViews = loadThread(ureq, messages, false);
+		messageTableCtrl.loadMessages(new ArrayList<>(0));
+		
+		allButton.setVisible(false);
+		updateButtons(allFlatButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextRemove("filteredForFirstName");
+		mainVC.contextPut("filteredForLastName", pseudonym);
+	}
+	
+	public void loadGuestMessages(UserRequest ureq) {
+		loadMode = LoadMode.guestMessages;
+		List<MessageLight> messages = forumManager.getLightMessagesOfGuests(forum);
+		backupViews = loadThread(ureq, messages, false);
+		messageTableCtrl.loadMessages(new ArrayList<>(0));
+		
+		allButton.setVisible(false);
+		updateButtons(allFlatButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextRemove("filteredForFirstName");
+		mainVC.contextPut("filteredForLastName", translate("guest"));
+	}
+	
+	public void loadThread(UserRequest ureq, Message threadMessage) {
+		loadMode = LoadMode.thread;
+		thread = threadMessage;
+
+		List<MessageLight> messages = forumManager.getLightMessagesByThread(forum, thread);
+		messages.add(0, thread);
+		backupViews = loadThread(ureq, messages, true);
+		messageTableCtrl.loadMessages(new ArrayList<>(0));
+		
+		allButton.setVisible(true);
+		updateButtons(allButton);
+		mainVC.contextPut("threadMode", Boolean.TRUE);
+		mainVC.contextRemove("filteredForFirstName");
+		mainVC.contextRemove("filteredForLastName");
+	}
+	
+	private MessageView loadView(UserRequest ureq, MessageLight message) {
+		Set<Long> rms =  null;
+		Map<String,Mark> marks = Collections.emptyMap();
+		Map<String,Long> artefactStats = Collections.emptyMap();
+		List<String> subPaths = Collections.singletonList(message.getKey().toString());
+		if(!guestOnly) {
+			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()) + "[Message:" + message.getKey() + "]";
+			artefactStats = epMgr.getNumOfArtefactsByStartingBusinessPath(businessPath, getIdentity());
+
+			marks = new HashMap<>();
+			List<Mark> markList = markingService.getMarkManager().getMarks(forumOres, getIdentity(), subPaths);
+			for(Mark mark:markList) {
+				marks.put(mark.getResSubPath(), mark);
+			}
+		}
+		
+		List<MarkResourceStat> statList = markingService.getMarkManager().getStats(forumOres, subPaths, getIdentity());
+		Map<String,MarkResourceStat> stats = new HashMap<String,MarkResourceStat>(statList.size() * 2 + 1);
+		for(MarkResourceStat stat:statList) {
+			stats.put(stat.getSubPath(), stat);
+		}
+
+		MessageView view = new MessageView(message, userPropertyHandlers, getLocale());
+		view.setNumOfChildren(0);
+		addMessageToCurrentMessagesAndVC(ureq, message, view, backupViews.size(), marks, stats, artefactStats, rms);
+		return view;
+	}
+	
+	private List<MessageView> loadThread(UserRequest ureq, List<MessageLight> messages, boolean reorder) {
+		Set<Long> rms =  null;
+		Map<String,Mark> marks = Collections.emptyMap();
+		Map<String,Long> artefactStats = Collections.emptyMap();
+		if(!guestOnly) {
+			rms = forumManager.getReadSet(getIdentity(), forum);
+
+			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()) + "[Message:";
+			artefactStats = epMgr.getNumOfArtefactsByStartingBusinessPath(businessPath, getIdentity());
+
+			marks = new HashMap<>(marks.size() * 2 + 1);
+			List<Mark> markList = markingService.getMarkManager().getMarks(forumOres, getIdentity(), null);
+			for(Mark mark:markList) {
+				marks.put(mark.getResSubPath(), mark);
+			}
+		}
+		
+		List<MarkResourceStat> statList = markingService.getMarkManager().getStats(forumOres, null, getIdentity());
+		Map<String,MarkResourceStat> stats = new HashMap<String,MarkResourceStat>(statList.size() * 2 + 1);
+		for(MarkResourceStat stat:statList) {
+			stats.put(stat.getSubPath(), stat);
+		}
+
+		if(reorder) {
+			List<MessageLight> orderedMessages = new ArrayList<MessageLight>();
+			orderMessagesThreaded(messages, orderedMessages, thread);
+			messages = orderedMessages;
+		}
+
+		List<MessageView> views = new ArrayList<>(messages.size());
+		Map<Long,MessageView> keyToViews = new HashMap<>();
+		for(MessageLight msg:messages) {
+			MessageView view = new MessageView(msg, userPropertyHandlers, getLocale());
+			view.setNumOfChildren(0);
+			views.add(view);
+			keyToViews.put(msg.getKey(), view);
+		}
+
+		//calculate depth and number of children
+		for(MessageView view:views) {
+			if(view.getParentKey() == null) {
+				view.setDepth(0);
+			} else {
+				view.setDepth(1);
+				for(MessageView parent = keyToViews.get(view.getParentKey()); parent != null; parent = keyToViews.get(parent.getParentKey())) {
+					parent.setNumOfChildren(parent.getNumOfChildren() + 1);
+					view.setDepth(view.getDepth() + 1);
+				}
+			}
+		}
+		
+		int msgNum = 0;
+		//append ui things
+		for (MessageLight msg: messages) {
+			addMessageToCurrentMessagesAndVC(ureq, msg, keyToViews.get(msg.getKey()), msgNum++, marks, stats, artefactStats, rms);
+		}
+		
+		mainVC.contextPut("messages", views);
+		return views;
+	}
+	
+	/**
+	 * Orders the messages in the logical instead of chronological order.
+	 * @param messages
+	 * @param orderedList
+	 * @param startMessage
+	 */	
+	private void orderMessagesThreaded(List<MessageLight> messages, List<MessageLight> orderedList, MessageRef startMessage) {
+		if (messages == null || orderedList == null || startMessage == null) return;
+		Iterator<MessageLight> iterMsg = messages.iterator();
+		while (iterMsg.hasNext()) {
+			MessageLight msg = iterMsg.next();
+			if (msg.getParentKey() == null) {
+				orderedList.add(msg);
+				List<MessageLight> copiedMessages = new ArrayList<>(messages);
+				copiedMessages.remove(msg);
+				messages = copiedMessages;
+				continue;
+			}
+			if ((msg.getParentKey() != null) && (msg.getParentKey().equals(startMessage.getKey()))) {
+				orderedList.add(msg);
+				orderMessagesThreaded(messages, orderedList, msg);
+			}
+		}
+	}
+	
+	private void markRead(MessageLight message) {
+		if(!guestOnly) {
+			forumManager.markAsRead(getIdentity(), forum, message);
+		}
+	}
+	
+	private void addMessageToCurrentMessagesAndVC(UserRequest ureq, MessageLight m, MessageView messageView, int msgCount,
+			Map<String,Mark> marks, Map<String,MarkResourceStat> stats, Map<String,Long> artefactStats,
+			Set<Long> readSet) {
+		
+		// all values belonging to a message are stored in this map
+		// these values can be accessed in velocity. make sure you clean up
+		// everything
+		// you create here in disposeCurrentMessages()!
+		String keyString = m.getKey().toString();
+		if (readSet == null || readSet.contains(m.getKey())) {
+			messageView.setNewMessage(false);
+		} else {// mark now as read
+			markRead(m);
+			messageView.setNewMessage(true);
+		}
+		// add some data now
+		messageView.setFormattedCreationDate(formatter.formatDateAndTime(m.getCreationDate()));
+		messageView.setFormattedLastModified(formatter.formatDateAndTime(m.getLastModified()));
+		
+		Identity modifier = m.getModifier();
+		if (modifier != null) {
+			messageView.setModified(true);
+			messageView.setModifierFirstName(modifier.getUser().getProperty(UserConstants.FIRSTNAME, getLocale()));
+			messageView.setModifierLastName(modifier.getUser().getProperty(UserConstants.LASTNAME, getLocale()));
+		} else {
+			messageView.setModified(false);
+		}
+		
+		Identity creator = m.getCreator();
+		boolean userIsMsgCreator = false;
+		//keeps the first 15 chars
+		if(creator != null) {
+			userIsMsgCreator = getIdentity().equals(creator);
+			if(!StringHelper.containsNonWhitespace(m.getPseudonym())) {
+				messageView.setCreatorFirstname(Formatter.truncate(creator.getUser().getProperty(UserConstants.FIRSTNAME, getLocale()), 18));
+				messageView.setCreatorLastname(Formatter.truncate(creator.getUser().getProperty(UserConstants.LASTNAME, getLocale()), 18));
+			}
+		}
+		
+		// message attachments
+		VFSContainer msgContainer = forumManager.getMessageContainer(forum.getKey(), m.getKey());
+		messageView.setMessageContainer(msgContainer);
+		List<VFSItem> attachments = new ArrayList<VFSItem>(msgContainer.getItems(new VFSItemExcludePrefixFilter(MessageEditController.ATTACHMENT_EXCLUDE_PREFIXES)));				
+		messageView.setAttachments(attachments);
+
+		// number of children and modify/delete permissions
+		int numOfChildren = messageView.getNumOfChildren();
+		
+		messageView.setAuthor(userIsMsgCreator);
+		boolean threadTop = m.getThreadtop() == null;
+		messageView.setThreadTop(threadTop);
+		boolean isThreadClosed;
+		if(threadTop) {
+			isThreadClosed = Status.getStatus(m.getStatusCode()).isClosed();
+		} else {
+			if(thread == null) {
+				isThreadClosed = Status.getStatus(m.getThreadtop().getStatusCode()).isClosed();
+			} else {
+				isThreadClosed = Status.getStatus(thread.getStatusCode()).isClosed();
+			}
+		}
+		messageView.setClosed(isThreadClosed);
+		
+		if(!guestOnly && !m.isGuest() && !StringHelper.containsNonWhitespace(m.getPseudonym())) {
+			// add portrait to map for later disposal and key for rendering in velocity
+			DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(), m.getCreator(), true, true, false, true);
+			messageView.setPortrait(portrait);
+			mainVC.put("portrait_".concat(keyString), portrait.getInitialComponent());
+		  
+			// Add link with username that is clickable
+			String creatorFullName = StringHelper.escapeHtml(UserManager.getInstance().getUserDisplayName(creator));
+			Link visitingCardLink = LinkFactory.createCustomLink("vc_"+msgCount, "vc_"+msgCount, creatorFullName, Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED, mainVC, this);
+			visitingCardLink.setUserObject(messageView);
+			
+			LinkPopupSettings settings = new LinkPopupSettings(800, 600, "_blank");
+			visitingCardLink.setPopup(settings);
+		}
+
+		if(!isThreadClosed) {
+			if((numOfChildren == 0 && userIsMsgCreator) || foCallback.mayDeleteMessageAsModerator()) {
+				Link deleteLink = LinkFactory.createCustomLink("dl_"+msgCount, "dl_"+msgCount, "msg.delete", Link.BUTTON_SMALL, mainVC, this);
+				deleteLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
+				deleteLink.setUserObject(messageView);
+			}
+			
+			if((numOfChildren == 0 && userIsMsgCreator) || foCallback.mayEditMessageAsModerator()) {
+				Link editLink = LinkFactory.createCustomLink("ed_"+msgCount, "ed_"+msgCount, "msg.update", Link.BUTTON_SMALL, mainVC, this);
+				editLink.setIconLeftCSS("o_icon o_icon-fw o_icon_edit");
+				editLink.setUserObject(messageView);
+			}
+			
+			if(foCallback.mayReplyMessage()) {
+				Link quoteLink = LinkFactory.createCustomLink("qt_"+msgCount, "qt_"+msgCount, "msg.quote", Link.BUTTON_SMALL, mainVC, this);
+				quoteLink.setElementCssClass("o_sel_forum_reply_quoted");
+				quoteLink.setIconLeftCSS("o_icon o_icon-fw o_icon_reply_with_quote");
+				quoteLink.setUserObject(messageView);
+				
+				Link replyLink = LinkFactory.createCustomLink("rp_"+msgCount, "rp_"+msgCount, "msg.reply", Link.BUTTON_SMALL, mainVC, this);
+				replyLink.setElementCssClass("o_sel_forum_reply");
+				replyLink.setIconLeftCSS("o_icon o_icon-fw o_icon_reply");
+				replyLink.setUserObject(messageView);
+			}
+			
+			if(foCallback.mayEditMessageAsModerator() && !threadTop) {
+				Link splitLink = LinkFactory.createCustomLink("split_"+msgCount, "split_"+msgCount, "msg.split", Link.LINK, mainVC, this);
+				splitLink.setIconLeftCSS("o_icon o_icon-fw o_icon_split");
+				splitLink.setUserObject(messageView);
+				
+				Link moveLink = LinkFactory.createCustomLink("move_"+msgCount, "move_"+msgCount, "msg.move", Link.LINK, mainVC, this);
+				moveLink.setIconLeftCSS("o_icon o_icon-fw o_icon_move");
+				moveLink.setUserObject(messageView);
+			}
+		}
+		
+		Mark currentMark = marks.get(keyString);
+		MarkResourceStat stat = stats.get(keyString);
+		if(!guestOnly) {
+			String businessPath = currentMark == null ?
+					getWindowControl().getBusinessControl().getAsString() + "[Message:" + m.getKey() + "]"
+					: currentMark.getBusinessPath();
+			Controller markCtrl = markingService.getMarkController(ureq, getWindowControl(), currentMark, stat, forumOres, keyString, businessPath);
+			mainVC.put("mark_" + msgCount, markCtrl.getInitialComponent());
+		}
+		
+		if(userIsMsgCreator) {
+			OLATResourceable messageOres = OresHelper.createOLATResourceableInstance("Forum", m.getKey());
+			String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl())
+					+ "[Message:" + m.getKey() + "]";
+			Long artefact = artefactStats.get(businessPath);
+			int numOfArtefact = artefact == null ? 0 : artefact.intValue();
+			Controller ePFCollCtrl = EPUIFactory
+					.createArtefactCollectWizzardController(ureq, getWindowControl(), numOfArtefact, messageOres, businessPath);
+			if (ePFCollCtrl != null) {
+				messageView.setArtefact(ePFCollCtrl);
+				mainVC.put("eportfolio_" + keyString, ePFCollCtrl.getInitialComponent());
+			}
+		}
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		if(backLink == source) {
+			fireEvent(ureq, Event.BACK_EVENT);
+		} else if(archiveThreadButton == source) {
+			doArchiveThread(ureq, thread);
+		} else if (closeThreadButton == source) {
+			doCloseThread();
+		} else if (openThreadButton == source) {
+			doOpenThread();
+		} else if (hideThreadButton == source) {
+			doHideThread();
+		} else if (showThreadButton == source) {
+			doShowThread();
+		} else if (allButton == source) {
+			doShowAll();
+		} else if (allFlatButton == source) {
+			doShowAllFlat();
+		}  else if (oneButton == source) {
+			doShowOne();
+		}  else if (markedButton == source) {
+			doShowMarked();		
+		}  else if (newButton == source) {
+			doShowNew();		
+		} else if(stickyButton == source || removeStickyButton == source) {
+			doToogleSticky();
+		} else if (source instanceof Link) {
+			Link link = (Link)source;
+			String command = link.getCommand();
+			Object uobject = link.getUserObject();
+
+			if (command.startsWith("qt_")) {
+				doReply(ureq, (MessageView)uobject, true);
+			} else if (command.startsWith("rp_")) {
+				doReply(ureq, (MessageView)uobject, false);
+			} else if (command.startsWith("dl_")) {
+				doConfirmDeleteMessage(ureq, (MessageView)uobject);
+			} else if (command.startsWith("ed_")) {
+				doEditMessage(ureq, (MessageView)uobject);
+			}	else if (command.startsWith("split_")) {
+				doConfirmSplit(ureq, (MessageView)uobject);
+			} else if (command.startsWith("move_")) {
+				doMoveMessage(ureq, (MessageView)uobject);
+			}
+		} else if(mainVC == source) {
+			String cmd = event.getCommand();
+			if (cmd.startsWith("attachment_")) {
+				doDeliverAttachment(ureq, cmd);
+			}
+		}
+	}
+
+	private void doDeliverAttachment(UserRequest ureq, String cmd) {
+		MediaResource res = null;
+		try {
+			int index = cmd.lastIndexOf("_");
+			String attachmentPosition = cmd.substring(cmd.indexOf("_") + 1, index);
+			String messageKey = cmd.substring(index + 1);
+			
+			int position = Integer.parseInt(attachmentPosition);
+			Long key = new Long(messageKey);
+			for(MessageView view:backupViews) {
+				if(view.getKey().equals(key)) {
+					List<VFSItem> attachments = view.getAttachments();
+					VFSLeaf attachment = (VFSLeaf)attachments.get(position - 1);//velocity counter start with 1
+					VFSMediaResource fileResource = new VFSMediaResource(attachment);
+					fileResource.setDownloadable(true); // prevent XSS attack
+					res = fileResource;
+				}
+			}
+		} catch (Exception e) {
+			logError("Cannot deliver message attachment", e);
+		}
+		if(res == null) {
+			res = new NotFoundMediaResource(cmd);
+		}
+		ureq.getDispatchResult().setResultingMediaResource(res);
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if (source == confirmDeleteCtrl) {
+			if (DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event)) {
+				MessageView deletedMessage = (MessageView)confirmDeleteCtrl.getUserObject();
+				doDeleteMessage(deletedMessage);
+				reloadModelAfterDelete(ureq, deletedMessage);
+			}
+		} else if(editMessageCtrl == source) {
+			// edit done -> save 
+			Message message = editMessageCtrl.getMessage();
+			if(message != null) {
+				reloadModel(ureq, message);
+			} else {
+				showInfo("header.cannoteditmessage");
+			}
+			cmc.deactivate();
+		} else if(replyMessageCtrl == source) {
+			Message reply = replyMessageCtrl.getMessage();
+			if(reply != null) {	
+				reloadModel(ureq, reply);
+			} else {
+			  	showInfo("header.cannotsavemessage");
+			}
+			cmc.deactivate();
+		} else if(messageTableCtrl == source) {
+			if(event instanceof SelectMessageEvent) {
+				SelectMessageEvent sme = (SelectMessageEvent)event;
+				doSelectTheOne(sme.getMessageKey());
+			}
+		} else if(moveCtrl == source) {
+			if(event instanceof SelectMessageEvent) {
+				SelectMessageEvent sme = (SelectMessageEvent)event;
+				doFinalizeMove(ureq, moveCtrl.getSelectView(), sme.getMessageKey());
+				cmc.deactivate();
+			}
+		} else if(confirmSplitCtrl == source) {
+			if (DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event)) {
+				MessageView splitedMessage = (MessageView)confirmSplitCtrl.getUserObject();
+				doSplitThread(ureq, splitedMessage);
+			}
+		} else if(source == cmc) {
+			cleanUp();
+		}
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(replyMessageCtrl);
+		removeAsListenerAndDispose(editMessageCtrl);
+		removeAsListenerAndDispose(cmc);
+		replyMessageCtrl = null;
+		editMessageCtrl = null;
+		cmc = null;
+	}
+
+	private void doReply(UserRequest ureq, MessageView parent, boolean quote) {
+		// user has clicked on button 'reply'
+		if (foCallback.mayReplyMessage()) {
+			Message newMessage = forumManager.createMessage(forum, getIdentity(), guestOnly);
+			Message parentMessage = forumManager.getMessageById(parent.getKey());
+			
+			String reString = "";
+			if(parent != null && parent.isThreadTop()) {
+				//add reString only for the first answer
+				reString = translate("msg.title.re");
+			}			
+			newMessage.setTitle(reString + parentMessage.getTitle());
+			if (quote) {
+				// load message to form as quotation				
+				StringBuilder quoteSb = new StringBuilder();
+				quoteSb.append("<p></p><div class=\"o_quote_wrapper\"><div class=\"o_quote_author mceNonEditable\">");
+				String date = formatter.formatDateAndTime(parentMessage.getCreationDate());
+				String creatorName;
+				if(StringHelper.containsNonWhitespace(parentMessage.getPseudonym())) {
+					creatorName = parentMessage.getPseudonym();
+				} else if(parentMessage.isGuest()) {
+					creatorName = translate("guest");
+				} else {
+					User creator = parentMessage.getCreator().getUser();
+					creatorName = creator.getProperty(UserConstants.FIRSTNAME, getLocale()) + " " + creator.getProperty(UserConstants.LASTNAME, getLocale());
+				}
+				
+				quoteSb.append(translate("msg.quote.intro", new String[]{ date, creatorName}))
+				     .append("</div><blockquote class=\"o_quote\">")
+				     .append(parentMessage.getBody())
+				     .append("</blockquote></div>")
+				     .append("<p></p>");
+				newMessage.setBody(quoteSb.toString());
+			}
+
+			replyMessageCtrl = new MessageEditController(ureq, getWindowControl(), forum, foCallback, newMessage, parentMessage, EditMode.reply);
+			listenTo(replyMessageCtrl);
+			
+			String title = quote ? translate("msg.quote") : translate("msg.reply");
+			cmc = new CloseableModalController(getWindowControl(), "close", replyMessageCtrl.getInitialComponent(), true, title);
+			listenTo(cmc);
+			cmc.activate();
+		} else {
+			showInfo("may.not.reply.msg");
+		}
+	}
+	
+	private void doConfirmDeleteMessage(UserRequest ureq, MessageView message) {
+		// user has clicked on button 'delete'
+		// -> display modal dialog 'Do you really want to delete this message?'
+		// 'yes': back to allThreadTable, 'no' back to messageDetails
+		
+		int numOfChildren = forumManager.countMessageChildren(message.getKey());
+		boolean children = numOfChildren > 0;
+		boolean userIsMsgCreator = message.isAuthor() ;
+		String currentMsgTitle = StringHelper.escapeHtml(message.getTitle());
+		
+		if (foCallback.mayDeleteMessageAsModerator()) {
+			// user is forum-moderator -> may delete every message on every level
+			if (numOfChildren == 0) {
+				confirmDeleteCtrl = activateYesNoDialog(ureq, null, translate("reallydeleteleaf", currentMsgTitle), confirmDeleteCtrl);
+				confirmDeleteCtrl.setUserObject(message);
+			} else if (numOfChildren == 1) {
+				confirmDeleteCtrl = activateYesNoDialog(ureq, null, translate("reallydeletenode1", currentMsgTitle), confirmDeleteCtrl);
+				confirmDeleteCtrl.setUserObject(message);
+			} else {
+				confirmDeleteCtrl = activateYesNoDialog(ureq, null, getTranslator().translate("reallydeletenodeN", new String[] { currentMsgTitle, Integer.toString(numOfChildren) }), confirmDeleteCtrl);
+				confirmDeleteCtrl.setUserObject(message);
+			}
+		} else if (userIsMsgCreator && !children ) {
+			// user may delete his own message if it has no children
+			confirmDeleteCtrl = activateYesNoDialog(ureq, null, translate("reallydeleteleaf", currentMsgTitle), confirmDeleteCtrl);
+			confirmDeleteCtrl.setUserObject(message);
+		} else if (userIsMsgCreator && children) {
+			// user may not delete his own message because it has at least one child
+			showWarning("may.not.delete.msg.as.author");
+		} else {
+			// user isn't author of the current message
+			showInfo("may.not.delete.msg");
+		}
+	}
+	
+	private void doDeleteMessage(MessageView message) { 
+		boolean userIsMsgCreator = message.isAuthor();
+		if (foCallback.mayDeleteMessageAsModerator()
+				|| (userIsMsgCreator && forumManager.countMessageChildren(message.getKey()) == 0)) {
+			Message reloadedMessage = forumManager.getMessageById(message.getKey());
+			if(reloadedMessage != null) {
+				boolean hasParent = reloadedMessage.getParent() != null;
+				forumManager.deleteMessageTree(forum.getKey(), reloadedMessage);
+				showInfo("deleteok");
+				// do logging
+				if(hasParent) {
+					ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_DELETE, getClass(),
+							LoggingResourceable.wrap(reloadedMessage));
+				} else {
+					ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_DELETE, getClass(),
+							LoggingResourceable.wrap(reloadedMessage));
+				}
+			}
+		} else {
+			showWarning("may.not.delete.msg.as.author");
+		}
+	}
+	
+	private void doEditMessage(UserRequest ureq, MessageView message) {
+		// user has clicked on button 'edit'
+		boolean userIsMsgCreator = message.isAuthor();
+		boolean children = forumManager.countMessageChildren(message.getKey()) > 0;
+		if (foCallback.mayEditMessageAsModerator() || (userIsMsgCreator && !children)) {
+			Message reloadedMessage = forumManager.loadMessage(message.getKey());
+			editMessageCtrl = new MessageEditController(ureq, getWindowControl(), forum, foCallback, reloadedMessage, null, EditMode.edit);
+			listenTo(editMessageCtrl);
+			
+			String title = translate("msg.update");
+			cmc = new CloseableModalController(getWindowControl(), "close", editMessageCtrl.getInitialComponent(), true, title);
+			listenTo(editMessageCtrl);
+			cmc.activate();
+		} else if ((userIsMsgCreator) && (children == true)) {
+			// user is author of the current message but it has already at least
+			// one child
+			showWarning("may.not.save.msg.as.author");
+		} else {
+			// user isn't author of the current message
+			showInfo("may.not.edit.msg");
+		}
+	}
+	
+	private void doConfirmSplit(UserRequest ureq, MessageView message) {		
+		if (foCallback.mayEditMessageAsModerator()) {
+			// user is forum-moderator -> may delete every message on every level
+			int numOfChildren = forumManager.countMessageChildren(message.getKey());
+			// provide yesNoSplit as argument, this ensures that dc is disposed before newly created
+			String text =  translate("reallysplitthread", new String[] { message.getTitle(), Integer.toString(numOfChildren) });
+			confirmSplitCtrl = activateYesNoDialog(ureq, null, text, confirmSplitCtrl);
+			confirmSplitCtrl.setUserObject(message);
+		}
+	}
+	
+	private void doSplitThread(UserRequest ureq, MessageView message) {
+		if (foCallback.mayEditMessageAsModerator()) {
+			Message reloadedMessage = forumManager.getMessageById(message.getKey());
+			Message newTopMessage = forumManager.splitThread(reloadedMessage);
+			//do logging
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_SPLIT, getClass(), LoggingResourceable.wrap(newTopMessage));
+			//open the new thread
+			fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_THREAD, newTopMessage.getKey()));
+		} else {
+			showWarning("may.not.split.thread");
+		}
+	}
+	
+	private void doArchiveThread(UserRequest ureq, Message currMsg) {
+		Message m = currMsg.getThreadtop();
+		Long topMessageId = (m == null) ? currMsg.getKey() : m.getKey();
+		
+		VFSContainer forumContainer = forumManager.getForumContainer(forum.getKey());
+		ForumDownloadResource download = new ForumDownloadResource("Forum", forum, foCallback, topMessageId, forumContainer, getLocale());
+		ureq.getDispatchResult().setResultingMediaResource(download);
+	}
+	
+	private void doToogleSticky() {
+		Status status = Status.getStatus(thread.getStatusCode());
+		status.setSticky(!status.isSticky());
+		thread.setStatusCode(Status.getStatusCode(status));
+		thread = forumManager.updateMessage(thread, false);
+		DBFactory.getInstance().commit();
+		
+		stickyButton.setVisible(!status.isSticky() && foCallback.mayEditMessageAsModerator());
+		removeStickyButton.setVisible(status.isSticky() && foCallback.mayEditMessageAsModerator());
+		mainVC.setDirty(true);
+		
+		ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.STICKY, thread.getKey(), null);
+		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forumOres);	
+		ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_EDIT, getClass(), LoggingResourceable.wrap(thread));
+	}
+	
+	/**
+	 * Sets the closed status to the thread message.
+	 * @param ureq
+	 * @param msg
+	 * @param closed
+	 */
+	private void doCloseThread() {	
+		if (thread != null) {
+			thread = forumManager.getMessageById(thread.getKey());
+			Status status = Status.getStatus(thread.getStatusCode());
+			status.setClosed(true);
+			thread.setStatusCode(Status.getStatusCode(status));
+			thread = forumManager.updateMessage(thread, false);
+			DBFactory.getInstance().commit();// before sending async event
+			
+			closeThreadButton.setVisible(false);
+			openThreadButton.setVisible(true && !guestOnly);
+			mainVC.setDirty(true);
+			
+			ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.CLOSE, thread.getKey(), null);
+			CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forumOres);	
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_CLOSE, getClass(), LoggingResourceable.wrap(thread));
+		}
+	}
+	
+	private void doOpenThread() {	
+		if (thread != null) {
+			thread = forumManager.getMessageById(thread.getKey());
+			Status status = Status.getStatus(thread.getStatusCode());
+			status.setClosed(false);
+			thread.setStatusCode(Status.getStatusCode(status));
+			thread = forumManager.updateMessage(thread, true);
+			DBFactory.getInstance().commit();// before sending async event
+			
+			closeThreadButton.setVisible(true && !guestOnly);
+			openThreadButton.setVisible(false);
+			mainVC.setDirty(true);
+
+			ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.OPEN, thread.getKey(), null);
+			CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forumOres);	
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_REOPEN, getClass(), LoggingResourceable.wrap(thread));
+		}
+	}
+	
+	/**
+	 * Sets the hidden status to the thread message.
+	 * @param ureq
+	 * @param msg
+	 * @param hidden
+	 */
+	private void doHideThread() {
+		if (thread != null) {
+			thread = forumManager.getMessageById(thread.getKey());
+			Status status = Status.getStatus(thread.getStatusCode());
+			status.setHidden(true);
+			thread.setStatusCode(Status.getStatusCode(status));
+			thread = forumManager.updateMessage(thread, false);
+			DBFactory.getInstance().commit();// before sending async event
+			
+			hideThreadButton.setVisible(false);
+			showThreadButton.setVisible(true && !guestOnly);
+			mainVC.setDirty(true);
+
+			ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.HIDE, thread.getKey(), null);
+			CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forumOres);	
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_HIDE, getClass(), LoggingResourceable.wrap(thread));
+		}
+	}
+	
+	/**
+	 * Sets the hidden status to the threadtop message.
+	 * @param ureq
+	 * @param msg
+	 * @param hidden
+	 */
+	private void doShowThread() {
+		if (thread != null) {
+			thread = forumManager.getMessageById(thread.getKey());
+			Status status = Status.getStatus(thread.getStatusCode());
+			status.setHidden(false);
+			thread.setStatusCode(Status.getStatusCode(status));
+			thread = forumManager.updateMessage(thread, true);
+			DBFactory.getInstance().commit();// before sending async event
+			
+			hideThreadButton.setVisible(true && !guestOnly);
+			showThreadButton.setVisible(false);
+			mainVC.setDirty(true);
+
+			ForumChangedEvent event = new ForumChangedEvent(ForumChangedEvent.SHOW, thread.getKey(), null);
+			CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event, forumOres);	
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_THREAD_SHOW, getClass(), LoggingResourceable.wrap(thread));
+		}
+	}
+	
+	private void doShowAll() {
+		updateButtons(allButton);
+		mainVC.contextPut("threadMode", Boolean.TRUE);
+		mainVC.contextPut("messages", backupViews);
+		mainVC.contextRemove("mode");
+	}
+	
+	private void doShowAllFlat() {
+		updateButtons(allFlatButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextPut("messages", backupViews);
+		mainVC.contextRemove("mode");
+	}
+	
+	private void doShowOne() {
+		updateButtons(oneButton);
+		mainVC.contextPut("mode", "one");
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		
+		if(backupViews != null && backupViews.size() > 0) {
+			List<MessageView> oneView = new ArrayList<>(1);
+			oneView.add(backupViews.get(0));
+			mainVC.contextPut("messages", oneView);
+			messageTableCtrl.setSelectView(oneView.get(0));
+			messageTableCtrl.loadMessages(new ArrayList<>(backupViews));
+		}
+	}
+	
+	private void doSelectTheOne(Long messageKey) {
+		updateButtons(oneButton);
+		mainVC.contextPut("mode", "one");
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		
+		if(backupViews != null && backupViews.size() > 0) {
+			List<MessageView> oneView = new ArrayList<>(1);
+			for(MessageView message:backupViews) {
+				if(message.getKey().equals(messageKey)) {
+					oneView.add(message);
+				}
+			}
+			mainVC.contextPut("messages", oneView);
+			messageTableCtrl.setSelectView(oneView.get(0));
+			messageTableCtrl.loadMessages(new ArrayList<>(backupViews));
+		}
+	}
+	
+	protected void doShowMarked() {
+		updateButtons(markedButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextPut("mode", "marked");
+		
+		List<Mark> markList = markingService.getMarkManager().getMarks(forumOres, getIdentity(), null);
+		Set<String> marks = new HashSet<>(markList.size() * 2 + 1);
+		for(Mark mark:markList) {
+			marks.add(mark.getResSubPath());
+		}
+
+		List<MessageView> views = new ArrayList<>();
+		for(MessageView view:backupViews) {
+			if(marks.contains(view.getKey().toString())) {
+				views.add(view);
+			}
+		}
+		
+		mainVC.contextPut("messages", views);
+	}
+	
+	protected void doShowNew() {
+		updateButtons(newButton);
+		mainVC.contextPut("threadMode", Boolean.FALSE);
+		mainVC.contextPut("mode", "new");
+		
+		Set<Long> rms = forumManager.getReadSet(getIdentity(), forum);
+		List<MessageView> views = new ArrayList<>();
+		for(MessageView view:backupViews) {
+			if(!rms.contains(view.getKey())) {
+				views.add(view);
+			}
+		}
+		mainVC.contextPut("messages", views);
+	}
+	
+	private void doMoveMessage(UserRequest ureq, MessageView message) {
+		removeAsListenerAndDispose(moveCtrl);
+		removeAsListenerAndDispose(cmc);
+		
+		if (foCallback.mayEditMessageAsModerator()) {
+			moveCtrl = new ForumMessageListController(ureq, getWindowControl(), forum, true);
+			moveCtrl.loadAllMessages();
+			moveCtrl.setSelectView(message);
+			listenTo(moveCtrl);
+
+			//push the modal dialog with the table as content
+			String title = "";
+			cmc = new CloseableModalController(getWindowControl(), "close", moveCtrl.getInitialComponent(), true, title);
+			listenTo(cmc);
+			
+			cmc.activate();
+		}
+	}
+	
+	private void doFinalizeMove(UserRequest ureq, MessageView messageToMove, Long parentMessageKey) {
+		if (foCallback.mayEditMessageAsModerator()) {
+			Message message = forumManager.getMessageById(messageToMove.getKey());
+			Message parentMessage = forumManager.getMessageById(parentMessageKey);
+			message = forumManager.moveMessage(message, parentMessage);
+			markRead(message);
+			
+			ThreadLocalUserActivityLogger.log(ForumLoggingAction.FORUM_MESSAGE_MOVE, getClass(), LoggingResourceable.wrap(message));
+			Long threadKey = parentMessage.getThreadtop() == null ? parentMessage.getKey() : parentMessage.getThreadtop().getKey();
+			fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_THREAD, threadKey, message.getKey()));
+		} else {
+			showWarning("may.not.move.message");
+		}
+	}
+	
+	public enum LoadMode {
+		thread,
+		userMessages,
+		userMessagesUnderPseudo,
+		guestMessages,
+	}
+	
+	private class AttachmentsMapper implements Mapper {
+		
+		@Override
+		public MediaResource handle(String relPath, HttpServletRequest request) {
+			String[] query = relPath.split("/"); // expected path looks like this /messageId/attachmentUUID/filename
+			if (query.length == 4) {
+				try {
+					Long mId = Long.valueOf(Long.parseLong(query[1]));
+					MessageView view = null;
+					for (MessageView m : backupViews) {
+						// search for message in current message map
+						if (m.getKey().equals(mId)) {
+							view = m;
+							break;
+						}
+					}
+					if (view != null) {
+						List<VFSItem> attachments = view.getAttachments();
+						for (VFSItem vfsItem : attachments) {
+							MetaInfo meta = ((MetaTagged)vfsItem).getMetaInfo();
+							if (meta.getUUID().equals(query[2])) {
+								if (meta.isThumbnailAvailable()) {
+									VFSLeaf thumb = meta.getThumbnail(200, 200, false);
+									if(thumb != null) {
+										// Positive lookup, send as response
+										return new VFSMediaResource(thumb);
+									}
+								}
+								break;
+							}
+						}
+					}
+				} catch (NumberFormatException e) {
+					//
+				}
+			}
+			// In any error case, send not found
+			return new NotFoundMediaResource(request.getRequestURI());
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/MessagePeekview.java b/src/main/java/org/olat/modules/fo/ui/MessagePeekview.java
new file mode 100644
index 00000000000..52c2159feb2
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/MessagePeekview.java
@@ -0,0 +1,40 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.Date;
+
+import org.olat.modules.fo.MessageRef;
+
+/**
+ * 
+ * Initial date: 13.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface MessagePeekview extends MessageRef {
+	
+	public Date getCreationDate();
+	
+	public String getTitle();
+	
+	public String getBody();
+
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageView.java b/src/main/java/org/olat/modules/fo/ui/MessageView.java
new file mode 100644
index 00000000000..39ccffb7a6b
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/MessageView.java
@@ -0,0 +1,221 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.gui.control.Controller;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.modules.fo.MessageLight;
+import org.olat.user.DisplayPortraitController;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+
+/**
+ * 
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class MessageView extends MessageLightView {
+	
+	private final String body;
+	
+	private String formattedCreationDate;
+	private String formattedLastModified;
+	
+	private boolean modified;
+	private String modifierFirstName;
+	private String modifierLastName;
+	
+	private String creatorFirstname;
+	private String creatorLastname;
+	
+	private boolean author;
+	private boolean threadTop;
+	private boolean closed;
+	private boolean moved;
+
+	private int depth = -1;
+	
+	private boolean newMessage;
+	private List<VFSItem> attachments;
+	private VFSContainer messageContainer;
+	
+	private Controller artefact;
+	private DisplayPortraitController portrait;
+	
+	public MessageView(MessageLight message, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
+		super(message, userPropertyHandlers, locale);
+		body = message.getBody();
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public String getFormattedCreationDate() {
+		return formattedCreationDate;
+	}
+
+	public void setFormattedCreationDate(String formattedCreationDate) {
+		this.formattedCreationDate = formattedCreationDate;
+	}
+
+	public String getFormattedLastModified() {
+		return formattedLastModified;
+	}
+
+	public void setFormattedLastModified(String formattedLastModified) {
+		this.formattedLastModified = formattedLastModified;
+	}
+
+	public boolean getNewMessage() {
+		return newMessage;
+	}
+
+	public void setNewMessage(boolean newMessage) {
+		this.newMessage = newMessage;
+	}
+
+	public String getCreatorFirstname() {
+		return creatorFirstname;
+	}
+
+	public void setCreatorFirstname(String creatorFirstname) {
+		this.creatorFirstname = creatorFirstname;
+	}
+
+	public String getCreatorLastname() {
+		return creatorLastname;
+	}
+
+	public void setCreatorLastname(String creatorLastname) {
+		this.creatorLastname = creatorLastname;
+	}
+	
+	public int getDepth() {
+		return depth;
+	}
+
+	public void setDepth(int depth) {
+		this.depth = depth;
+	}
+
+	public boolean isMoved() {
+		return moved;
+	}
+
+	public void setMoved(boolean moved) {
+		this.moved = moved;
+	}
+
+	public boolean isModified() {
+		return modified;
+	}
+
+	public void setModified(boolean modified) {
+		this.modified = modified;
+	}
+
+	public String getModifierFirstName() {
+		return modifierFirstName;
+	}
+
+	public void setModifierFirstName(String modifierFirstName) {
+		this.modifierFirstName = modifierFirstName;
+	}
+
+	public String getModifierLastName() {
+		return modifierLastName;
+	}
+
+	public void setModifierLastName(String modifierLastName) {
+		this.modifierLastName = modifierLastName;
+	}
+
+	public boolean isAuthor() {
+		return author;
+	}
+
+	public void setAuthor(boolean author) {
+		this.author = author;
+	}
+
+	public boolean isThreadTop() {
+		return threadTop;
+	}
+
+	public void setThreadTop(boolean threadTop) {
+		this.threadTop = threadTop;
+	}
+
+	public boolean isClosed() {
+		return closed;
+	}
+
+	public void setClosed(boolean closed) {
+		this.closed = closed;
+	}
+
+	public List<VFSItem> getAttachments() {
+		return attachments;
+	}
+
+	public void setAttachments(List<VFSItem> attachments) {
+		this.attachments = attachments;
+	}
+	
+	public boolean hasAttachments() {
+		return attachments != null && attachments.size() > 0;
+	}
+
+	public VFSContainer getMessageContainer() {
+		return messageContainer;
+	}
+
+	public void setMessageContainer(VFSContainer msgContainer) {
+		this.messageContainer = msgContainer;
+	}
+
+	public DisplayPortraitController getPortrait() {
+		return portrait;
+	}
+
+	public void setPortrait(DisplayPortraitController portrait) {
+		this.portrait = portrait;
+	}
+
+	public Controller getArtefact() {
+		return artefact;
+	}
+
+	public void setArtefact(Controller artefact) {
+		this.artefact = artefact;
+	}
+	
+	
+
+
+	
+	
+
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/StatusTypeCellRenderer.java b/src/main/java/org/olat/modules/fo/ui/StatusTypeCellRenderer.java
new file mode 100644
index 00000000000..a64d6e8f1c0
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/StatusTypeCellRenderer.java
@@ -0,0 +1,63 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.gui.render.URLBuilder;
+import org.olat.core.gui.translator.Translator;
+import org.olat.modules.fo.Status;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class StatusTypeCellRenderer implements FlexiCellRenderer {
+
+	@Override
+	public void render(Renderer renderer, StringOutput target, Object cellValue, int row,
+			FlexiTableComponent source, URLBuilder ubu, Translator translator) {
+		
+		if(cellValue instanceof Number) {
+			int status = ((Number)cellValue).intValue();
+			
+			Status messageStatus = Status.getStatus(status);
+			boolean isSticky = messageStatus.isSticky(); 
+			boolean isClosed = messageStatus.isClosed(); 
+
+			target.append("<i class='o_icon o_forum_");
+
+			if(isSticky && isClosed) {
+				target.append("status_sticky_closed");
+			} else if (isSticky) {
+				target.append("status_sticky");
+			} else if (isClosed) {
+				target.append("status_closed");
+			} else {
+				target.append("status_thread");
+			}
+			target.append("_icon'> </i>");
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/StickyCellRenderer.java b/src/main/java/org/olat/modules/fo/ui/StickyCellRenderer.java
new file mode 100644
index 00000000000..2dd46ce762f
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/StickyCellRenderer.java
@@ -0,0 +1,61 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.gui.render.URLBuilder;
+import org.olat.core.gui.translator.Translator;
+import org.olat.modules.fo.Status;
+import org.olat.modules.fo.ui.ThreadListDataModel.ThreadListCols;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class StickyCellRenderer implements FlexiCellRenderer {
+
+	@Override
+	public void render(Renderer renderer, StringOutput target, Object cellValue, int row,
+			FlexiTableComponent source, URLBuilder ubu, Translator translator) {
+		if(cellValue instanceof String) {
+			String title = (String)cellValue;
+			if (renderer == null) {
+				target.append(title);
+			} else {
+				Object type = source.getFlexiTableElement().getTableDataModel().getValueAt(row, ThreadListCols.type.ordinal());
+				if(type instanceof Integer) {
+					boolean sticky = Status.getStatus((Integer)type).isSticky();
+					if(sticky) {
+						target.append("<span class='o_forum_thread_sticky'>").append(title).append("</span>");			
+					} else {
+						target.append(title);	
+					}
+				} else {
+					target.append(title);
+				}
+			}
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/ThreadListController.java b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
new file mode 100644
index 00000000000..119493afa58
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
@@ -0,0 +1,260 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.id.Identity;
+import org.olat.core.util.Util;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.modules.fo.Forum;
+import org.olat.modules.fo.ForumCallback;
+import org.olat.modules.fo.Message;
+import org.olat.modules.fo.MessageRef;
+import org.olat.modules.fo.archiver.formatters.ForumDownloadResource;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.model.ForumThread;
+import org.olat.modules.fo.ui.MessageEditController.EditMode;
+import org.olat.modules.fo.ui.ThreadListDataModel.ThreadListCols;
+import org.olat.modules.fo.ui.events.SelectMessageEvent;
+import org.olat.modules.fo.ui.events.SelectUserListEvent;
+import org.olat.search.SearchServiceUIFactory;
+import org.olat.search.SearchServiceUIFactory.DisplayOption;
+import org.olat.search.ui.SearchInputController;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ThreadListController extends FormBasicController {
+	
+	private FlexiTableElement threadTable;
+	private ThreadListDataModel threadTableModel;
+	private FormLink archiveForumButton, newThreadButton, userListButton;
+	
+	private CloseableModalController cmc;
+	private MessageEditController newThreadCtrl;
+	private SearchInputController searchController;
+	
+	private final Forum forum;
+	private final boolean guestOnly;
+	private final ForumCallback foCallback;
+
+	@Autowired
+	private ForumManager forumManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	
+	public ThreadListController(UserRequest ureq, WindowControl wControl, Forum forum, ForumCallback foCallback) {
+		super(ureq, wControl, "threads");
+		setTranslator(Util.createPackageTranslator(Forum.class, getLocale(), getTranslator()));
+
+		this.forum = forum;
+		this.foCallback = foCallback;
+		guestOnly = ureq.getUserSession().getRoles().isGuestOnly();
+		
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		if(foCallback.mayOpenNewThread()) {
+			newThreadButton = uifactory.addFormLink("msg.create", formLayout, Link.BUTTON_SMALL);
+			newThreadButton.setIconLeftCSS("o_icon o_icon-fw o_forum_status_thread_icon");
+			newThreadButton.setElementCssClass("o_sel_forum_thread_new");
+		}
+		if(foCallback.mayArchiveForum()) {
+			archiveForumButton = uifactory.addFormLink("archive.forum", formLayout, Link.BUTTON_SMALL);
+			archiveForumButton.setIconLeftCSS("o_icon o_icon-fw o_icon_archive_tool");
+			archiveForumButton.setElementCssClass("o_sel_forum_archive");
+		}
+		if(securityModule.isUserAllowedAutoComplete(ureq.getUserSession().getRoles()) && foCallback.mayFilterForUser() ) {
+			userListButton = uifactory.addFormLink("filter", formLayout, Link.BUTTON_SMALL);
+			userListButton.setIconLeftCSS("o_icon o_icon-fw o_icon_user");
+			userListButton.setElementCssClass("o_sel_forum_filter");
+		}
+		
+		if(!guestOnly && formLayout instanceof FormLayoutContainer) {
+			SearchServiceUIFactory searchServiceUIFactory = (SearchServiceUIFactory)CoreSpringFactory.getBean(SearchServiceUIFactory.class);
+			searchController = searchServiceUIFactory.createInputController(ureq, getWindowControl(), DisplayOption.STANDARD, mainForm);
+			listenTo(searchController);
+			((FormLayoutContainer)formLayout).put("search_input", searchController.getInitialComponent());
+		}
+
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ThreadListCols.type.i18nKey(), ThreadListCols.type.ordinal(),
+				true, ThreadListCols.type.name(), new StatusTypeCellRenderer()));
+		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(ThreadListCols.thread.i18nKey(), ThreadListCols.thread.ordinal(), "select",
+				true, ThreadListCols.thread.name(),  new StaticFlexiCellRenderer("select", new StickyCellRenderer())));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ThreadListCols.creator.i18nKey(), ThreadListCols.creator.ordinal(),
+				true, ThreadListCols.creator.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ThreadListCols.lastModified.i18nKey(), ThreadListCols.lastModified.ordinal(),
+				true, ThreadListCols.lastModified.name()));
+		if(!guestOnly) {
+			columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(ThreadListCols.markedMessages.i18nKey(), ThreadListCols.markedMessages.ordinal(),
+					"marked", true, ThreadListCols.markedMessages.name(), new StaticFlexiCellRenderer("marked", new TextFlexiCellRenderer())));
+			columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(ThreadListCols.unreadMessages.i18nKey(), ThreadListCols.unreadMessages.ordinal(),
+					"unread", true, ThreadListCols.unreadMessages.name(), new StaticFlexiCellRenderer("unread", new TextFlexiCellRenderer())));
+		}
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ThreadListCols.totalMessages.i18nKey(), ThreadListCols.totalMessages.ordinal()));
+		
+		threadTableModel = new ThreadListDataModel(columnsModel, getTranslator());
+		threadTable = uifactory.addTableElement(getWindowControl(), "threads", threadTableModel, getTranslator(), formLayout);
+		threadTable.setCustomizeColumns(false);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	public void loadModel() {
+		Identity identity = guestOnly ? null : getIdentity();
+		List<ForumThread> threads = forumManager.getForumThreads(forum, identity);
+		threadTableModel.setObjects(threads);
+		threadTableModel.sort(new SortKey(ThreadListCols.thread.name(), true));
+		threadTable.reloadData();
+		threadTable.reset();
+		
+		if(archiveForumButton != null) {
+			archiveForumButton.setVisible(threads.size() > 0);
+		}
+		if(userListButton != null) {
+			userListButton.setVisible(threads.size() > 0);
+		}
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(newThreadCtrl == source) {
+			if(event == Event.DONE_EVENT) {
+				DBFactory.getInstance().commit();
+				loadModel();
+				doSelect(ureq, newThreadCtrl.getMessage());
+			}
+			cmc.deactivate();
+			cleanUp();
+		} else if(cmc == source) {
+			cleanUp();
+		}
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(newThreadCtrl);
+		removeAsListenerAndDispose(cmc);
+		newThreadCtrl = null;
+		cmc = null;
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(archiveForumButton == source) {
+			doArchiveForum(ureq);
+		} else if(newThreadButton == source) {
+			doNewThread(ureq);
+		} else if(userListButton == source) {
+			doOpenUserList(ureq);
+		} else if(source == threadTable) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				String cmd = se.getCommand();
+				ForumThread row = threadTableModel.getObject(se.getIndex());
+				if("select".equals(cmd)) {
+					doSelect(ureq, row);
+				} else if("marked".equals(cmd)) {
+					doSelectMarked(ureq, row);
+				} else if("unread".equals(cmd)) {
+					doSelectNew(ureq, row);
+				}
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	private void doSelect(UserRequest ureq, MessageRef message) {
+		fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_THREAD, message.getKey()));
+	}
+	
+	private void doSelectMarked(UserRequest ureq, MessageRef message) {
+		fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_MARKED, message.getKey()));
+	}
+	
+	private void doSelectNew(UserRequest ureq, MessageRef message) {
+		fireEvent(ureq, new SelectMessageEvent(SelectMessageEvent.SELECT_NEW, message.getKey()));
+	}
+	
+	private void doArchiveForum(UserRequest ureq) {
+		VFSContainer forumContainer = forumManager.getForumContainer(forum.getKey());
+		ForumDownloadResource download = new ForumDownloadResource("Forum", forum, foCallback, null, forumContainer, getLocale());
+		ureq.getDispatchResult().setResultingMediaResource(download);
+	}
+	
+	private void doNewThread(UserRequest ureq) {
+		removeAsListenerAndDispose(newThreadCtrl);
+		removeAsListenerAndDispose(cmc);
+
+		// user has clicked on button 'open new thread'.
+		Message m = forumManager.createMessage(forum, getIdentity(), guestOnly);
+		newThreadCtrl = new MessageEditController(ureq, getWindowControl(), forum, foCallback, m, null, EditMode.newThread);
+		listenTo(newThreadCtrl);
+		
+		String title = translate("msg.create");
+		cmc = new CloseableModalController(getWindowControl(), "close", newThreadCtrl.getInitialComponent(), true, title);
+		listenTo(newThreadCtrl);
+		cmc.activate();
+	}
+	
+	private void doOpenUserList(UserRequest ureq) {
+		fireEvent(ureq, new SelectUserListEvent());
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java b/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
new file mode 100644
index 00000000000..b59fd868ef5
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
@@ -0,0 +1,155 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.StringHelper;
+import org.olat.modules.fo.Status;
+import org.olat.modules.fo.model.ForumThread;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ThreadListDataModel extends DefaultFlexiTableDataModel<ForumThread>
+	implements SortableFlexiTableDataModel<ForumThread> {
+	
+	private Translator translator;
+	
+	public ThreadListDataModel(FlexiTableColumnModel columnModel, Translator translator) {
+		super(columnModel);
+		this.translator = translator;
+	}
+
+	@Override
+	public void sort(SortKey orderBy) {
+		if(orderBy != null) {
+			List<ForumThread> views = new ThreadListDataModelSort(orderBy, this, null).sort();
+			super.setObjects(views);
+		}
+	}
+
+	@Override
+	public Object getValueAt(int row, int col) {
+		ForumThread thread = getObject(row);
+		return getValueAt(thread, col);
+	}
+
+	@Override
+	public Object getValueAt(ForumThread row, int col) {
+		switch(ThreadListCols.values()[col]) {
+			case type: return row.getStatusCode();
+			case thread: return row.getTitle();
+			case creator: {
+				if(StringHelper.containsNonWhitespace(row.getPseudonym())) {
+					return row.getPseudonym();
+				}
+				if(row.isGuest()) {
+					return translator.translate("anonymous.poster");
+				}
+				return row.getCreatorFullname();
+			}
+			case lastModified: return row.getLastModified();
+			case markedMessages: return row.getMarkedMessages();
+			case unreadMessages: return row.getNewMessages();
+			case totalMessages: return row.getNumOfPosts();
+			default: return "ERROR";
+		}
+	}
+
+	@Override
+	public DefaultFlexiTableDataModel<ForumThread> createCopyWithEmptyList() {
+		return new ThreadListDataModel(getTableColumnModel(), translator);
+	}
+
+	public enum ThreadListCols {
+		type("table.header.typeimg"),
+		thread("table.thread"),
+		creator("table.userfriendlyname"),
+		lastModified("table.lastModified"),
+		markedMessages("table.marked"),
+		unreadMessages("table.unread"),
+		totalMessages("table.total");
+		
+		private final String i18nKey;
+	
+		private ThreadListCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		public String i18nKey() {
+			return i18nKey;
+		}
+	}
+	
+	public class ThreadListDataModelSort extends SortableFlexiTableModelDelegate<ForumThread> {
+		
+		public ThreadListDataModelSort(SortKey orderBy, SortableFlexiTableDataModel<ForumThread> tableModel, Locale locale) {
+			super(orderBy, tableModel, locale);
+		}
+		
+		@Override
+		public List<ForumThread> sort() {
+			SortableFlexiTableDataModel<ForumThread> model = getTableModel();
+			int rowCount = model.getRowCount();
+			List<ForumThread> rows = new ArrayList<>(rowCount);
+			for(int i=0; i<rowCount; i++) {
+				rows.add(model.getObject(i));
+			}
+			Collections.sort(rows, new StickyComparator(isAsc()));
+			return rows;
+		}
+		
+		public class StickyComparator extends DefaultComparator {
+			
+			private final boolean asc;
+			
+			public StickyComparator(boolean asc) {
+				this.asc = asc;
+			}
+			
+			@Override
+			public int compare(ForumThread t1, ForumThread t2) {
+				boolean s1 = Status.getStatus(t1.getStatusCode()).isSticky();
+				boolean s2 = Status.getStatus(t2.getStatusCode()).isSticky();
+				
+				if(s1 && !s2) {
+					return -1;
+				}
+				if(!s1 && s2) {
+					return 1;
+				}
+				return (asc ? 1 : -1) * super.compare(t1, t2);
+			}
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/attachments-editview.html b/src/main/java/org/olat/modules/fo/ui/_content/attachments-editview.html
new file mode 100644
index 00000000000..c139cf4af62
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/_content/attachments-editview.html
@@ -0,0 +1,14 @@
+#if($attachments && $attachments.size() > 0)
+$r.translate("attachments")
+<table class="table table-condensed  table-striped"><tbody>		
+	#foreach ($attachment in $attachments)
+		#set( $fname = $attachment.getName() )
+		<tr>
+			<td style="width:1%"><i class="o_icon o_icon-fw $r.getFiletypeIconCss($fname)"> </i></td>
+			<td>$r.escapeHtml($fname)</td>
+			<td>$r.formatBytes($attachment.getSize())</td>
+			<td style="width:1%">$r.render("delete.attachment.$velocityCount")</td>
+		</tr>
+	#end
+</tbody></table>
+#end
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/forum.html b/src/main/java/org/olat/modules/fo/ui/_content/forum.html
new file mode 100644
index 00000000000..bfe00d39239
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/_content/forum.html
@@ -0,0 +1,4 @@
+#if($r.available("subscription"))
+	$r.render("subscription")
+#end
+$r.render("forum")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/msg-preview.html b/src/main/java/org/olat/modules/fo/ui/_content/msg-preview.html
new file mode 100644
index 00000000000..643eeab622f
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/_content/msg-preview.html
@@ -0,0 +1,17 @@
+<div class="o_forum">
+	<div class="o_forum_message o_block_large_bottom">
+		<div class="o_forum_message_header clearfix">
+			#if(!$guestOnly && $r.available("portrait"))
+				$r.render("portrait")
+			#end			
+			<h4 class="o_forum_message_title">$r.escapeHtml($message.getTitle())</h4>
+			<div class="o_author">
+				$r.escapeHtml($identity.getUser().getProperty("firstName", $locale)) $r.escapeHtml($identity.getUser().getProperty("lastName", $locale))
+			</div>
+			<div class="o_date">$r.formatDateAndTime($message.getCreationDate())</div>
+		</div>
+		<div class="o_forum_message_body">
+			<div class="clearfix o_scrollblock">$r.formatLatexFormulas($messageBody)</div>
+		</div>			
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/_content/list_titles.html b/src/main/java/org/olat/modules/fo/ui/_content/threads.html
similarity index 51%
rename from src/main/java/org/olat/modules/fo/_content/list_titles.html
rename to src/main/java/org/olat/modules/fo/ui/_content/threads.html
index 2e3fe4ef06b..e2e65e78f08 100644
--- a/src/main/java/org/olat/modules/fo/_content/list_titles.html
+++ b/src/main/java/org/olat/modules/fo/ui/_content/threads.html
@@ -1,18 +1,13 @@
-#if ($r.available("subscription"))
-	$r.render("subscription")
-#end
-<h3>
-	$r.translate("header.overview")
-</h3>
+<h3>$r.translate("header.overview")</h3>
 <div class="clearfix o_block">
 	<div class="o_forum_toolbar btn-group">
-	#if ($security.mayOpenNewThread())
+	#if($r.available("msg.create"))
 		$r.render("msg.create")
 	#end
-	#if ($security.mayArchiveForum() && $hasThreads)
+	#if($r.available("archive.forum"))
 		$r.render("archive.forum")
 	#end
-	#if ($security.mayFilterForUser() && $hasThreads && $r.available("filter"))
+	#if($r.available("filter"))
 		$r.render("filter")
 	#end
 	</div>
@@ -22,6 +17,4 @@
       </div>
 	#end
 </div>
-<div>
-	$r.render("allThreadTable")
-</div>
+$r.render("threads")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/threadview.html b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html
new file mode 100644
index 00000000000..343bcaaf258
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html
@@ -0,0 +1,198 @@
+#if($r.available("backLinkLT"))
+<div class="o_block">$r.render("backLinkLT")</div>
+#end
+<div class="o_forum">
+	<div class="clearfix o_block">
+		#if($filteredForLastName)
+		<h3>$r.translate("filter.results.title") $r.escapeHtml($filteredForFirstName) $r.escapeHtml($filteredForLastName)</h3>
+		#end
+		<div class="o_forum_toolbar btn-group">
+			#if($r.available("archive.thread") && $r.visible("archive.thread"))
+				$r.render("archive.thread")
+			#end
+			#if(!$guestOnly && (($r.available("close.thread") && $r.visible("close.thread")) || ($r.available("open.thread") && $r.visible("open.thread")) || ($r.available("hide.thread") && $r.visible("hide.thread")) || ($r.available("show.thread") && $r.visible("show.thread")) || ($r.available("msg.sticky") && $r.visible("msg.sticky")) || ($r.available("remove.sticky") && $r.visible("remove.sticky"))))
+			<button type="button" class="btn btn-sm dropdown-toggle" data-toggle="dropdown">
+				<i class="o_icon o_icon-fw o_icon_actions"></i>
+				<span class="caret"></span>
+			</button>
+			<ul class="dropdown-menu dropdown-menu-right">
+				#if($r.available("close.thread") && $r.visible("close.thread"))
+					<li>$r.render("close.thread")</li>
+				#end
+				#if($r.available("open.thread") && $r.visible("open.thread"))
+					<li>$r.render("open.thread")</li>
+				#end
+				#if($r.available("hide.thread") && $r.visible("hide.thread"))
+					<li>$r.render("hide.thread")</li>
+				#end
+				#if($r.available("show.thread") && $r.visible("show.thread"))
+					<li>$r.render("show.thread")</li>
+				#end
+				#if($r.available("msg.sticky") && $r.visible("msg.sticky"))
+					<li>$r.render("msg.sticky")</li>
+				#end
+				#if($r.available("remove.sticky") && $r.visible("remove.sticky"))
+					<li>$r.render("remove.sticky")</li>
+				#end
+			</ul>
+			#end
+		</div>
+		
+		<div class="o_forum_toolbar btn-group pull-right">
+		#if ($r.available("viewswitch.threadview") && $r.visible("viewswitch.threadview"))
+			$r.render("viewswitch.threadview")
+		#end
+		#if ($r.available("viewswitch.flatview"))
+			$r.render("viewswitch.flatview")
+		#end
+		#if ($r.available("viewswitch.messageview"))
+			$r.render("viewswitch.messageview")
+		#end
+		#if ($r.available("viewswitch.marked"))
+			$r.render("viewswitch.marked")
+		#end
+		#if ($r.available("viewswitch.new"))
+			$r.render("viewswitch.new")
+		#end
+		</div>
+	</div>
+	#if ($messages.isEmpty())
+		#if ($mode == "marked")
+		<p class="o_important">$r.translate("msg.no_marked_message")</p>
+		#elseif ($mode == "new")
+		<p class="o_important">$r.translate("msg.no_new_message")</p>
+		#end
+	#end
+	
+#foreach ($message in $messages)
+	#set( $count = $velocityCount - 1)
+	<div #if($threadMode) style="margin-left: ${message.depth}em" #end class="o_forum_message o_block_large_bottom #if($message.newMessage) o_forum_message_new #end #if($message.key == $goToMessageId) o_forum_message_highlight #end" id="o_forum_message_${message.key}">
+		<div class="o_forum_message_header clearfix">
+			#if($r.available("eportfolio_${message.key}"))
+				<div class="o_ep_collect">$r.render("eportfolio_${message.key}")</div>
+			#end
+			#if($r.available("mark_${count}"))
+				<div class="o_mark">$r.render("mark_${count}")</div>
+			#end
+			#if(!$guestOnly)
+				#if($message.guest || ($message.pseudonym && !${message.pseudonym.isEmpty()}))
+				 	<div class="o_portrait"><div class="o_portrait_image"><img src="$r.staticLink("images/transparent.gif")" class="o_portrait_avatar o_portrait_anonymous" /></div></div>
+				#elseif($r.available("portrait_${message.key}"))
+					$r.render("portrait_${message.key}")
+				#end
+			#end
+			
+			<h4 class="o_forum_message_title">
+				$r.escapeHtml($message.title)
+				#if($message.newMessage)
+					<span class="o_newindicator" title="$r.translateInAttribute("message.unread")"><i class="o_icon o_icon_new" > </i> <span class="o_label">$r.translate("new")</span></span>
+				#end
+			</h4>
+			<div class="o_author">
+				#if($message.pseudonym && !${message.pseudonym.isEmpty()})
+					$r.escapeHtml($message.pseudonym)
+				#elseif($message.guest)
+					$r.translate("anonymous.poster")
+				#elseif($r.available("vc_${count}"))
+					$r.render("vc_${count}")
+				#else							
+					$r.escapeHtml($message.creatorFirstname) $r.escapeHtml($message.creatorLastname)
+				#end
+			</div>
+			<div class="o_date">
+				$r.translate("msg.creationdate") $message.formattedCreationDate
+			</div>
+			
+			#if($message.modified || $message.moved)
+			<div class="o_modified">
+				#if($message.modified)
+		   			$r.translate("msg.modified"): $r.escapeHtml($message.modifierFirstName) $r.escapeHtml($message.modifierLastName) $message.formattedLastModified
+		   		#end
+		   		#if($message.moved)
+		   			$r.translate("msg.moved")
+	   			#end
+		   	</div>
+			#end	
+		</div>
+		
+		<div class="o_forum_message_body">
+			<div class="clearfix o_scrollblock">$r.formatLatexFormulas($message.body)</div>
+		</div>
+
+		<div class="o_forum_message_actions o_button_group">
+			#if($r.available("open_in_thread_${count}"))
+				$r.render("open_in_thread_${count}")
+			#end
+
+			#if ($r.available("dl_${count}") || $r.available("ed_${count}"))
+			<div class="btn-group">
+				#if($r.available("dl_${count}"))
+					$r.render("dl_${count}")
+				#end
+				#if ($r.available("ed_${count}"))
+					$r.render("ed_${count}")
+				#end
+			</div>
+			#end
+			
+			#if ($r.available("rp_${count}"))
+			<div class="btn-group">$r.render("qt_${count}") $r.render("rp_${count}")</div>
+			#end
+			
+			#if($r.available("split_${count}"))
+			<div class="btn-group">
+				<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+					<i class="o_icon o_icon-fw o_icon_actions"></i>
+					<span class="caret"></span>
+				</button>
+				<ul class="dropdown-menu dropdown-menu-right">
+					<li>$r.render("split_${count}")</li>
+					<li>$r.render("move_${count}")</li>
+				</ul>
+			</div>
+			#end
+		</div>
+		
+		#if(${message.hasAttachments()})
+		<div class="o_forum_message_attachments">
+			<h5>$r.translate("attachments"):</h5>
+			<ul class="list-inline">
+			#foreach($attachment in $message.attachments)
+				#set($fname = $attachment.getName())
+				<li class="o_attachment">
+					<a href="$r.commandURI("attachment_${velocityCount}_${message.key}")$fname" target="_blank">
+						<div class="o_filename">$r.escapeHtml($fname)</div>
+						<div class="o_size">
+							<i class="o_icon o_icon-fw $r.getFiletypeIconCss($fname)"></i>
+							 $r.formatBytes($attachment.getSize())
+						</div>
+						#if ($attachment.getMetaInfo() && $attachment.getMetaInfo().isThumbnailAvailable())										
+						<img src="${thumbMapper}/$message.key/$attachment.getMetaInfo().getUUID()/$fname" class="img-thumbnail" alt="$r.escapeHtml("$fname")" title="$r.escapeHtml("$fname")"/>
+						<i class="o_icon o_icon-lg o_icon_enlarge"></i>
+						#end
+					</a>		
+				</li>
+			#end 
+			</ul>
+		</div>
+		#end
+	</div>
+#end
+
+#if($mode == "one")
+	$r.render("singleThreadTable")
+	<script type="text/javascript">
+	/* <![CDATA[ */
+			o_scrollToElement('#o_top');
+	/* ]]> */
+	</script> 
+#end
+#if(${goToMessage.isTrue()})
+	<script type="text/javascript">
+	/* <![CDATA[ */
+	    o_scrollToElement('#o_forum_message_$goToMessageId');
+	/* ]]> */
+	</script> 
+#end
+
+</div> ## END of o_forum
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/user_list.html b/src/main/java/org/olat/modules/fo/ui/_content/user_list.html
new file mode 100644
index 00000000000..df9e5453be2
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/_content/user_list.html
@@ -0,0 +1,4 @@
+#if($r.available("back"))
+<div class="o_block">$r.render("back")</div>
+#end
+$r.render("users")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/fo/ui/events/SelectMessageEvent.java b/src/main/java/org/olat/modules/fo/ui/events/SelectMessageEvent.java
new file mode 100644
index 00000000000..5e6ddab81c8
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/events/SelectMessageEvent.java
@@ -0,0 +1,58 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui.events;
+
+import org.olat.core.gui.control.Event;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class SelectMessageEvent extends Event {
+
+	private static final long serialVersionUID = -478977517193199740L;
+	public static final String  SELECT_THREAD = "select-thread";
+	public static final String  SELECT_MARKED = "select-marked";
+	public static final String  SELECT_NEW = "select-new";
+	public static final String  SELECT_MESSAGE = "select-message";
+	
+	private Long messageKey;
+	private Long scrollToMessageKey;
+	
+	public SelectMessageEvent(String cmd, Long messageKey) {
+		this(cmd, messageKey, null);
+	}
+	
+	public SelectMessageEvent(String cmd, Long messageKey, Long scrollToMessageKey) {
+		super(cmd);
+		this.messageKey = messageKey;
+		this.scrollToMessageKey = scrollToMessageKey;
+	}
+	
+	public Long getMessageKey() {
+		return messageKey;
+	}
+
+	public Long getScrollToMessageKey() {
+		return scrollToMessageKey;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/ui/events/SelectUserEvent.java b/src/main/java/org/olat/modules/fo/ui/events/SelectUserEvent.java
new file mode 100644
index 00000000000..0c59bb5cd25
--- /dev/null
+++ b/src/main/java/org/olat/modules/fo/ui/events/SelectUserEvent.java
@@ -0,0 +1,69 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.fo.ui.events;
+
+import org.olat.core.gui.control.Event;
+
+/**
+ * 
+ * Initial date: 12.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class SelectUserEvent extends Event {
+
+	private static final long serialVersionUID = -4325949984308787246L;
+	public static final String SELECT_USER = "select-user";
+	
+	private Long identityKey;
+	private String pseudonym;
+	private boolean guest;
+	
+	public SelectUserEvent(Long identityKey, String pseudonym, boolean guest) {
+		super(SELECT_USER);
+		this.identityKey = identityKey;
+		this.pseudonym = pseudonym;
+		this.guest = guest;
+	}
+
+	public Long getIdentityKey() {
+		return identityKey;
+	}
+
+	public void setIdentityKey(Long identityKey) {
+		this.identityKey = identityKey;
+	}
+
+	public String getPseudonym() {
+		return pseudonym;
+	}
+
+	public void setPseudonym(String pseudonym) {
+		this.pseudonym = pseudonym;
+	}
+
+	public boolean isGuest() {
+		return guest;
+	}
+
+	public void setGuest(boolean guest) {
+		this.guest = guest;
+	}
+}
diff --git a/src/main/java/org/olat/modules/fo/OpenMessageInThreadEvent.java b/src/main/java/org/olat/modules/fo/ui/events/SelectUserListEvent.java
similarity index 60%
rename from src/main/java/org/olat/modules/fo/OpenMessageInThreadEvent.java
rename to src/main/java/org/olat/modules/fo/ui/events/SelectUserListEvent.java
index e6d1ec97579..94872af7212 100644
--- a/src/main/java/org/olat/modules/fo/OpenMessageInThreadEvent.java
+++ b/src/main/java/org/olat/modules/fo/ui/events/SelectUserListEvent.java
@@ -17,33 +17,23 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.modules.fo;
+package org.olat.modules.fo.ui.events;
 
 import org.olat.core.gui.control.Event;
 
 /**
  * 
- * Description:<br>
- * This event trigger the openning of the message in its thread
- * 
- * <P>
- * Initial Date:  18 sept. 2009 <br>
- * @author srosse
+ * Initial date: 11.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
  */
-public class OpenMessageInThreadEvent extends Event {
-
-	private static final long serialVersionUID = -1215014162134562259L;
+public class SelectUserListEvent extends Event {
 
-	public static final String OPEN_MSG_IN_THREAD = "open_msg_in_thread";
-	
-	private final Message message;
+	private static final long serialVersionUID = -8837394501164914406L;
+	public static final String SELECT_USER_LIST = "select-user-list";
 	
-	public OpenMessageInThreadEvent(Message message) {
-		super(OPEN_MSG_IN_THREAD);
-		this.message = message;
-	}
-	
-	public Message getMessage() {
-		return message;
+	public SelectUserListEvent() {
+		super(SELECT_USER_LIST);
 	}
+
 }
diff --git a/src/main/java/org/olat/modules/wiki/WikiForumCallback.java b/src/main/java/org/olat/modules/wiki/WikiForumCallback.java
index e7309b6d071..996fc008df5 100644
--- a/src/main/java/org/olat/modules/wiki/WikiForumCallback.java
+++ b/src/main/java/org/olat/modules/wiki/WikiForumCallback.java
@@ -48,6 +48,11 @@ public class WikiForumCallback implements ForumCallback {
 		this.context = context;
 	}
 
+	@Override
+	public boolean mayUsePseudonym() {
+		return false;
+	}
+
 	@Override
 	public boolean mayOpenNewThread() {
 		return !isGuestOnly ;
diff --git a/src/main/java/org/olat/modules/wiki/WikiMainController.java b/src/main/java/org/olat/modules/wiki/WikiMainController.java
index 6a36b585aa2..f7ff86a9312 100644
--- a/src/main/java/org/olat/modules/wiki/WikiMainController.java
+++ b/src/main/java/org/olat/modules/wiki/WikiMainController.java
@@ -94,8 +94,8 @@ import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSMediaResource;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumCallback;
-import org.olat.modules.fo.ForumController;
-import org.olat.modules.fo.ForumManager;
+import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.ui.ForumController;
 import org.olat.modules.wiki.gui.components.wikiToHtml.ErrorEvent;
 import org.olat.modules.wiki.gui.components.wikiToHtml.FilterUtil;
 import org.olat.modules.wiki.gui.components.wikiToHtml.RequestImageEvent;
diff --git a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
index e0225a5912c..195d547ab97 100644
--- a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
+++ b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
@@ -60,9 +60,9 @@ import org.olat.fileresource.types.WikiResource;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.modules.ModuleConfiguration;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.ForumNotificationsHandler;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 
diff --git a/src/main/java/org/olat/portfolio/EPUIFactory.java b/src/main/java/org/olat/portfolio/EPUIFactory.java
index ba1c244dc15..b88a0c2cc9a 100755
--- a/src/main/java/org/olat/portfolio/EPUIFactory.java
+++ b/src/main/java/org/olat/portfolio/EPUIFactory.java
@@ -88,7 +88,8 @@ public class EPUIFactory {
 	 * @param businessPath
 	 * @return
 	 */
-	public static Controller createArtefactCollectWizzardController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, String businessPath) {
+	public static Controller createArtefactCollectWizzardController(UserRequest ureq, WindowControl wControl,
+			OLATResourceable ores, String businessPath) {
 		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
 		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(ores.getResourceableTypeName());
 		if (portfolioModule.isEnabled() && handler != null && handler.isEnabled()) {
@@ -97,6 +98,16 @@ public class EPUIFactory {
 		return null;
 	}
 	
+	public static Controller createArtefactCollectWizzardController(UserRequest ureq, WindowControl wControl,
+			int numOfArtefact, OLATResourceable ores, String businessPath) {
+		PortfolioModule portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
+		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler(ores.getResourceableTypeName());
+		if (portfolioModule.isEnabled() && handler != null && handler.isEnabled()) {
+			return new ArtefactWizzardStepsController(ureq, wControl, numOfArtefact, ores, businessPath);
+		}
+		return null;
+	}
+	
 	/**
 	 * opens an artefact in an overlay window with all available details in read-only mode
 	 * @param artefact
diff --git a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java b/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java
index 6c2eba2dbbf..f3cb94f368a 100755
--- a/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPArtefactManager.java
@@ -23,12 +23,16 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import org.olat.basesecurity.IdentityRef;
 import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.DBQuery;
@@ -483,6 +487,30 @@ public class EPArtefactManager extends BasicManager {
 		if (artefacts.isEmpty()) return null;
 		return artefacts;		
 	}
+	
+	protected Map<String,Long> loadNumOfArtefactsByStartingBusinessPath(String startOfBusinessPath, IdentityRef author) {
+		if (!StringHelper.containsNonWhitespace(startOfBusinessPath) || author == null) {
+			return Collections.emptyMap();
+		}
+		
+		StringBuilder sb = new StringBuilder();
+		sb.append("select artefact.businessPath, count(artefact.key) from ").append(AbstractArtefact.class.getName()).append(" artefact")
+		  .append(" where artefact.businessPath like :bpath and artefact.author.key=:identityKey")
+		  .append(" group by artefact.businessPath");
+
+		List<Object[]> objectsList = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Object[].class)
+				.setParameter("bpath", startOfBusinessPath + "%")
+				.setParameter("identityKey", author.getKey())
+				.getResultList();
+		Map<String,Long> stats = new HashMap<>();
+		for(Object[] objects:objectsList) {
+			String bp = (String)objects[0];
+			Long count = (Long)objects[1];
+			stats.put(bp, count);
+		}
+		return stats;
+	}
 
 	protected void deleteArtefact(AbstractArtefact artefact) {
 		getArtefactContainer(artefact).delete();
diff --git a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java
index c371c95c3f3..8783d2fb537 100755
--- a/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPFrontendManager.java
@@ -306,6 +306,10 @@ public class EPFrontendManager implements UserDataDeletable, DeletableGroupData
 		return artefactManager.loadArtefactsByBusinessPath(businessPath, author);		
 	}
 	
+	public Map<String,Long> getNumOfArtefactsByStartingBusinessPath(String businessPath, IdentityRef author){
+		return artefactManager.loadNumOfArtefactsByStartingBusinessPath(businessPath, author);		
+	}
+	
 	/**
 	 * List artefacts for indexing
 	 * @param author (optional)
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java b/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java
index 9e48cc7ac7e..e68f807022f 100755
--- a/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/collect/ArtefactWizzardStepsController.java
@@ -22,7 +22,6 @@ package org.olat.portfolio.ui.artefacts.collect;
 import java.util.Date;
 import java.util.List;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
@@ -41,6 +40,7 @@ import org.olat.portfolio.EPArtefactHandler;
 import org.olat.portfolio.PortfolioModule;
 import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.portfolio.model.artefacts.AbstractArtefact;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -55,17 +55,21 @@ import org.olat.portfolio.model.artefacts.AbstractArtefact;
 public class ArtefactWizzardStepsController extends BasicController {
 
 	private Controller collectStepsCtrl;
-	EPFrontendManager ePFMgr;
-	private PortfolioModule portfolioModule;
+	
 	private Link addLink;
 	AbstractArtefact artefact;
 	private OLATResourceable ores;
 	private String businessPath;
 	private VFSContainer tmpFolder = null;
+	
+	@Autowired
+	private EPFrontendManager ePFMgr;
+	@Autowired
+	private PortfolioModule portfolioModule;
 
 	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
-		setManagersAndModule();
+		
 		EPArtefactHandler<?> handler = portfolioModule.getArtefactHandler("Forum");
 		AbstractArtefact newArtefact = handler.createArtefact();
 		this.artefact = newArtefact;
@@ -84,7 +88,7 @@ public class ArtefactWizzardStepsController extends BasicController {
 	 */
 	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact, VFSContainer tmpFolder) {
 		super(ureq, wControl);
-		setManagersAndModule();
+		
 		this.artefact = artefact;
 		this.tmpFolder  = tmpFolder;
 
@@ -105,7 +109,6 @@ public class ArtefactWizzardStepsController extends BasicController {
 	 */
 	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, String businessPath) {
 		super(ureq, wControl);
-		setManagersAndModule();
 		this.ores = ores;
 		this.businessPath = businessPath;
 		initCollectLinkVelocity();
@@ -121,35 +124,40 @@ public class ArtefactWizzardStepsController extends BasicController {
 	 */
 	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, AbstractArtefact artefact) {
 		super(ureq, wControl);
-		setManagersAndModule();
 		this.artefact = artefact;
 		this.businessPath = artefact.getBusinessPath();
 		initCollectLinkVelocity();
 	}
-
-	/**
-	 * @param ureq
-	 * @param artefact
-	 */
+	
+	public ArtefactWizzardStepsController(UserRequest ureq, WindowControl wControl, int numOfArtefacts,
+			OLATResourceable ores, String businessPath) {
+		super(ureq, wControl);
+		this.ores = ores;
+		this.businessPath = businessPath;
+		initCollectLinkVelocity(numOfArtefacts);
+	}
+	
 	private void initCollectLinkVelocity() {
+		List<AbstractArtefact> existingArtefacts = ePFMgr.loadArtefactsByBusinessPath(businessPath, getIdentity());
+		int numOfArtefacts = existingArtefacts == null ? 0 : existingArtefacts.size();
+		initCollectLinkVelocity(numOfArtefacts);
+	}
+
+	private void initCollectLinkVelocity(int numOfArtefacts) {
 		addLink = LinkFactory.createCustomLink("add.to.eportfolio", "add.to.eportfolio", "", Link.LINK_CUSTOM_CSS + Link.NONTRANSLATED,
 				null, this);
 		addLink.setCustomEnabledLinkCSS("o_eportfolio_add");
 		addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
 		addLink.setTooltip(translate("add.to.eportfolio"));
 		addLink.setTranslator(getTranslator());
-		// check for an already existing artefact with same businessPath, change collect-item
-		List<AbstractArtefact> existingArtefacts = ePFMgr.loadArtefactsByBusinessPath(businessPath, getIdentity());
-		if (existingArtefacts!=null){
-			int amount = existingArtefacts.size();
+		if (numOfArtefacts > 0) {
 			addLink.setIconLeftCSS("o_icon o_icon-lg o_icon_eportfolio_add");
 			addLink.setCustomEnabledLinkCSS("o_eportfolio_add_again");
-			addLink.setTooltip(translate("add.to.eportfolio.again", String.valueOf(amount)));	
+			addLink.setTooltip(translate("add.to.eportfolio.again", String.valueOf(numOfArtefacts)));	
 		}
 		putInitialPanel(addLink);
 		getInitialComponent().setSpanAsDomReplaceable(true); // special case since controller is actually just a link 
 	}
-
 	
 	/**
 	 * @param ores
@@ -165,10 +173,7 @@ public class ArtefactWizzardStepsController extends BasicController {
 		this.artefact = artefact1;
 	}
 
-	private void setManagersAndModule() {
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		portfolioModule = (PortfolioModule) CoreSpringFactory.getBean("portfolioModule");
-	}
+
 
 	private void initCollectionStepWizzard(UserRequest ureq) {
 		if (artefact == null && ores != null) prepareNewArtefact();
diff --git a/src/main/java/org/olat/search/service/indexer/ForumIndexer.java b/src/main/java/org/olat/search/service/indexer/ForumIndexer.java
index 148823b261c..47b6c1b25e1 100644
--- a/src/main/java/org/olat/search/service/indexer/ForumIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/ForumIndexer.java
@@ -31,8 +31,8 @@ import java.util.List;
 
 import org.apache.lucene.document.Document;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.search.service.SearchResourceContext;
 import org.olat.search.service.document.ForumMessageDocument;
 
diff --git a/src/main/java/org/olat/search/service/indexer/group/GroupForumIndexer.java b/src/main/java/org/olat/search/service/indexer/group/GroupForumIndexer.java
index 85a1bf3a083..d9903a8d540 100644
--- a/src/main/java/org/olat/search/service/indexer/group/GroupForumIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/group/GroupForumIndexer.java
@@ -39,9 +39,9 @@ import org.olat.core.logging.AssertException;
 import org.olat.group.BusinessGroup;
 import org.olat.group.ui.run.BusinessGroupMainRunController;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
 import org.olat.modules.fo.Status;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.properties.NarrowedPropertyManager;
 import org.olat.properties.Property;
 import org.olat.search.service.SearchResourceContext;
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
index c6142f03e09..102a71a4656 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
@@ -52,9 +52,9 @@ import org.olat.modules.dialog.DialogElementsController;
 import org.olat.modules.dialog.DialogElementsPropertyManager;
 import org.olat.modules.dialog.DialogPropertyElements;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
 import org.olat.modules.fo.Status;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.search.service.SearchResourceContext;
 import org.olat.search.service.document.ForumMessageDocument;
 import org.olat.search.service.document.file.DocumentAccessException;
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
index fd11d7357f8..a033e559dd9 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
@@ -40,9 +40,9 @@ import org.olat.course.nodes.CourseNode;
 import org.olat.course.nodes.FOCourseNode;
 import org.olat.course.properties.CoursePropertyManager;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
 import org.olat.modules.fo.Status;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.properties.Property;
 import org.olat.search.service.SearchResourceContext;
 import org.olat.search.service.indexer.ForumIndexer;
diff --git a/src/main/java/org/olat/user/UserPropertiesRow.java b/src/main/java/org/olat/user/UserPropertiesRow.java
index 7eb5f571914..94509e219de 100644
--- a/src/main/java/org/olat/user/UserPropertiesRow.java
+++ b/src/main/java/org/olat/user/UserPropertiesRow.java
@@ -35,17 +35,21 @@ import org.olat.user.propertyhandlers.UserPropertyHandler;
  */
 public class UserPropertiesRow {
 	
-	private Long identityKey;
-	private String identityName;
-	private String[] identityProps;
+	private final Long identityKey;
+	private final String identityName;
+	private final String[] identityProps;
 	
 	public UserPropertiesRow(Identity identity, List<UserPropertyHandler> userPropertyHandlers, Locale locale) {
-		identityKey = identity.getKey();
-		identityName = identity.getName();
-		
 		identityProps = new String[userPropertyHandlers.size()];
-		for(int i=userPropertyHandlers.size(); i-->0; ) {
-			identityProps[i] = userPropertyHandlers.get(i).getUserProperty(identity.getUser(), locale);
+		if(identity == null) {
+			identityKey = null;
+			identityName = null;
+		} else {
+			identityKey = identity.getKey();
+			identityName = identity.getName();
+			for(int i=userPropertyHandlers.size(); i-->0; ) {
+				identityProps[i] = userPropertyHandlers.get(i).getUserProperty(identity.getUser(), locale);
+			}
 		}
 	}
 	
diff --git a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
index 341d44841c4..9b827e0978e 100644
--- a/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
+++ b/src/main/java/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml
@@ -242,6 +242,26 @@
 					</bean>
 				</entry>
 				
+				<entry key="org.olat.modules.fo.ui.ForumUserListController">
+					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
+						<property name="propertyHandlers">
+							<list>
+								<ref bean="userPropertyFirstName" />
+								<ref bean="userPropertyLastName" />
+							</list>
+						</property>
+						<property name="adminViewOnlyProperties">
+							<set></set>						
+						</property>
+						<property name="mandatoryProperties">
+							<set>
+								<ref bean="userPropertyFirstName" />
+								<ref bean="userPropertyLastName" />
+							</set>
+						</property>
+					</bean>
+				</entry>
+				
 				<entry key="org.olat.group.ui.main.MemberInfoController">
 					<!-- First name and last name are already shown -->
 					<bean class="org.olat.user.propertyhandlers.UserPropertyUsageContext">
diff --git a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
index 2a2ef6e9fc9..2b047a83a55 100644
--- a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
+++ b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java
@@ -27,7 +27,6 @@
 package org.olat.util.logging.activity;
 
 import java.io.UnsupportedEncodingException;
-import java.util.List;
 
 import org.olat.commons.calendar.model.Kalendar;
 import org.olat.core.id.Identity;
@@ -46,8 +45,8 @@ import org.olat.group.BusinessGroup;
 import org.olat.group.area.BGArea;
 import org.olat.group.ui.run.BusinessGroupMainRunController;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.webFeed.models.Feed;
 import org.olat.modules.webFeed.models.Item;
 import org.olat.repository.RepositoryEntry;
@@ -388,13 +387,7 @@ public class LoggingResourceable implements ILoggingResourceable {
 	 * @return a LoggingResourceable wrapping the given Forum
 	 */
 	public static LoggingResourceable wrap(Forum forum) {
-		final String name;
-		List<Message> forumMessages = ForumManager.getInstance().getMessagesByForumID(forum.getKey(), 0, 1, null, true);
-		if (forumMessages==null || forumMessages.size()==0) {
-			name = null;
-		} else {
-			name = forumMessages.get(0).getTitle();
-		}
+		final String name = ForumManager.getInstance().getForumNameForLogging(forum);
 		return new LoggingResourceable(forum, OlatResourceableType.forum, forum.getResourceableTypeName(),
 				String.valueOf(forum.getResourceableId()), name, false);
 	}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 6ceed4375b6..20a571cfc2c 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -38,9 +38,6 @@
 		<mapping-file>org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml</mapping-file>
 		<mapping-file>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</mapping-file>
 		<mapping-file>org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/fo/ForumImpl.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/fo/MessageImpl.hbm.xml</mapping-file>
-		<mapping-file>org/olat/modules/fo/ReadMessage.hbm.xml</mapping-file>
 		<mapping-file>org/olat/modules/openmeetings/model/OpenMeetingsReference.hbm.xml</mapping-file>
 		<mapping-file>org/olat/properties/Property.hbm.xml</mapping-file>
 		<mapping-file>org/olat/registration/TemporaryKeyImpl.hbm.xml</mapping-file>
@@ -136,6 +133,13 @@
 		<class>org.olat.instantMessaging.model.InstantMessageNotificationImpl</class>
 		<class>org.olat.ims.qti.statistics.model.QTIStatisticResult</class>
 		<class>org.olat.ims.qti.statistics.model.QTIStatisticResultSet</class>
+		<class>org.olat.modules.fo.model.ForumImpl</class>
+		<class>org.olat.modules.fo.model.MessageImpl</class>
+		<class>org.olat.modules.fo.model.MessageRefImpl</class>
+		<class>org.olat.modules.fo.model.MessageLightImpl</class>
+		<class>org.olat.modules.fo.model.MessagePeekviewImpl</class>
+		<class>org.olat.modules.fo.model.ReadMessageImpl</class>
+		<class>org.olat.modules.fo.model.MessageStatistics</class>
 		<class>org.olat.modules.qpool.model.PoolImpl</class>
 		<class>org.olat.modules.qpool.model.PoolToItem</class>
 		<class>org.olat.modules.qpool.model.PoolItemShortView</class>
diff --git a/src/main/resources/database/mysql/alter_10_3_4_to_10_4_0.sql b/src/main/resources/database/mysql/alter_10_3_4_to_10_4_0.sql
index 128fabaf984..ff56ea65e94 100644
--- a/src/main/resources/database/mysql/alter_10_3_4_to_10_4_0.sql
+++ b/src/main/resources/database/mysql/alter_10_3_4_to_10_4_0.sql
@@ -1,3 +1,9 @@
+alter table o_message modify creator_id bigint NULL DEFAULT NULL;
+alter table o_message add column pseudonym varchar(255);
+alter table o_message add column guest bit default 0;
+
+
+
 create table o_cal_use_config (
    id bigint not null,
    creationdate datetime not null,
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 22332ce509b..9a62caa817d 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -228,9 +228,11 @@ create table if not exists o_message (
    creationdate datetime,
    title varchar(100),
    body longtext,
+   pseudonym varchar(255),
+   guest bit default 0,
    parent_id bigint,
    topthread_id bigint,
-   creator_id bigint not null,
+   creator_id bigint,
    modifier_id bigint,
    forum_fk bigint,
    statuscode integer,
@@ -238,6 +240,9 @@ create table if not exists o_message (
    numofcharacters integer,
    primary key (message_id)
 );
+
+
+
 create table if not exists o_gp_bgtoarea_rel (
    bgtoarea_id bigint not null,
    version mediumint unsigned not null,
diff --git a/src/main/resources/database/oracle/alter_10_3_4_to_10_4_0.sql b/src/main/resources/database/oracle/alter_10_3_4_to_10_4_0.sql
index 657661f9253..93dfccc0392 100644
--- a/src/main/resources/database/oracle/alter_10_3_4_to_10_4_0.sql
+++ b/src/main/resources/database/oracle/alter_10_3_4_to_10_4_0.sql
@@ -1,3 +1,9 @@
+alter table o_message modify (creator_id null);
+alter table o_message add pseudonym varchar2(255 char);
+alter table o_message add guest number default 0 not null;
+
+
+
 create table o_cal_use_config (
    id number(20) not null,
    creationdate date not null,
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index 1f6e91e45a5..b598fedb4b7 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -264,9 +264,11 @@ CREATE TABLE o_message (
   creationdate date,
   title varchar2(100 char),
   body CLOB,
+  pseudonym varchar2(255 char),
+  guest number default 0 not null,
   parent_id number(20),
   topthread_id number(20),
-  creator_id number(20) NOT NULL,
+  creator_id number(20),
   modifier_id number(20),
   forum_fk number(20),
   statuscode number(11),
diff --git a/src/main/resources/database/postgresql/alter_10_3_4_to_10_4_0.sql b/src/main/resources/database/postgresql/alter_10_3_4_to_10_4_0.sql
index a84581abca9..0adfaa68b53 100644
--- a/src/main/resources/database/postgresql/alter_10_3_4_to_10_4_0.sql
+++ b/src/main/resources/database/postgresql/alter_10_3_4_to_10_4_0.sql
@@ -1,3 +1,10 @@
+alter table o_message alter column creator_id DROP NOT NULL;
+alter table o_message add column pseudonym varchar(255);
+alter table o_message add column guest bool not null default false;
+
+
+
+
 create table o_cal_use_config (
    id int8 not null,
    creationdate timestamp not null,
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 047f864e378..0f90d4bda37 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -226,9 +226,11 @@ create table o_message (
    creationdate timestamp,
    title varchar(100),
    body text,
+   pseudonym varchar(255),
+   guest bool not null default false,
    parent_id int8,
    topthread_id int8,
-   creator_id int8 not null,
+   creator_id int8,
    modifier_id int8,
    forum_fk int8,
    statuscode int4,
diff --git a/src/main/webapp/static/themes/light/modules/_forum.scss b/src/main/webapp/static/themes/light/modules/_forum.scss
index ff862aaf867..6bc571d2129 100644
--- a/src/main/webapp/static/themes/light/modules/_forum.scss
+++ b/src/main/webapp/static/themes/light/modules/_forum.scss
@@ -21,6 +21,10 @@
 	.o_forum_fulltextsearch {
 		float: left;
 	}
+	
+	.o_forum_toolbar .o_forum_tool span {
+		display: none;
+	}
 }
 
 .o_forum {
diff --git a/src/main/webapp/static/themes/light/modules/_icons.scss b/src/main/webapp/static/themes/light/modules/_icons.scss
index f2b175ec1e4..0b414e0d3b8 100644
--- a/src/main/webapp/static/themes/light/modules/_icons.scss
+++ b/src/main/webapp/static/themes/light/modules/_icons.scss
@@ -346,6 +346,12 @@ $fa-css-prefix: "o_icon" !default;
 .o_forum_status_hidden_icon:before { content: $fa-var-eye-slash; color: $state-danger-text}
 .o_forum_status_visible_icon:before { content: $fa-var-eye; color: $state-success-text}
 
+.o_forum_all_icon:before { content: $fa-var-align-right; }
+.o_forum_all_flat_icon:before { content: $fa-var-align-justify; }
+.o_forum_one_icon:before { content: $fa-var-eye; }
+.o_forum_marked_icon:before { content: $fa-var-bookmark; }
+.o_forum_new_icon:before { content: $fa-var-asterisk; }
+
 /* tests icons */
 .o_mi_qpool_import:before { content: $fa-var-database; }
 .o_mi_qtisection:before { content: $fa-var-cubes; }
diff --git a/src/main/webapp/static/themes/light/theme.css b/src/main/webapp/static/themes/light/theme.css
index 943c5c01321..9b7a1504757 100644
--- a/src/main/webapp/static/themes/light/theme.css
+++ b/src/main/webapp/static/themes/light/theme.css
@@ -22,5 +22,5 @@
  *  @author gnaegi, www.frentix.com
  *  @date April. 2014
  * ========================================================
-**//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail,.o_form .o_filepreview img,.o_feed .o_media{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,.o_cal .fc-header-title h2,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,.o_cal .fc-header-title h2 small,h4 .small,.o_cal .fc-header-title h2 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.o_cal .fc-header-title h2,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.o_cal .fc-header-title h2 small,h4 .small,.o_cal .fc-header-title h2 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.o_cal .fc-header-title h2,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn,.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,.form-group-sm .form-control,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn,.form-group-sm .form-control{height:auto}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn,.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,.form-group-lg .form-control,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn,.form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group,.o_navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.o_navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static,.o_navbar-form .form-control-static{display:inline-block}.form-inline .input-group,.o_navbar-form .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.o_navbar-form .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.o_navbar-form .input-group .input-group-btn,.form-inline .input-group .form-control,.o_navbar-form .input-group .form-control{width:auto}.form-inline .input-group>.form-control,.o_navbar-form .input-group>.form-control{width:100%}.form-inline .control-label,.o_navbar-form .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.o_navbar-form .radio,.form-inline .checkbox,.o_navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.o_navbar-form .radio label,.form-inline .checkbox label,.o_navbar-form .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.o_navbar-form .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"],.o_navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback,.o_navbar-form .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.o_repo_details .o_lead{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.o_repo_details .o_lead h1,.jumbotron .h1,.o_repo_details .o_lead .h1{color:inherit}.jumbotron p,.o_repo_details .o_lead p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr,.o_repo_details .o_lead>hr{border-top-color:#d5d5d5}.container .jumbotron,.container .o_repo_details .o_lead,.o_repo_details .container .o_lead,.container-fluid .jumbotron,.container-fluid .o_repo_details .o_lead,.o_repo_details .container-fluid .o_lead{border-radius:6px}.jumbotron .container,.o_repo_details .o_lead .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron,.o_repo_details .o_lead{padding:48px 0}.container .jumbotron,.container .o_repo_details .o_lead,.o_repo_details .container .o_lead,.container-fluid .jumbotron,.container-fluid .o_repo_details .o_lead,.o_repo_details .container-fluid .o_lead{padding-left:60px;padding-right:60px}.jumbotron h1,.o_repo_details .o_lead h1,.jumbotron .h1,.o_repo_details .o_lead .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4,.alert .o_cal .fc-header-title h2,.o_cal .fc-header-title .alert h2{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table,.panel-collapse>.table,.panel-collapse>.table-responsive>.table,.panel-collapse>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption,.panel-collapse>.table caption,.panel-collapse>.table-responsive>.table caption,.panel-collapse>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child,.panel-collapse>.table:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child,.panel-collapse>.table:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body,.panel-collapse>.panel-body+.table,.panel-collapse>.panel-body+.table-responsive,.panel-collapse>.table+.panel-body,.panel-collapse>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td,.panel-collapse>.table>tbody:first-child>tr:first-child th,.panel-collapse>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered,.panel-collapse>.table-bordered,.panel-collapse>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel-collapse>.table-bordered>thead>tr>th:first-child,.panel-collapse>.table-bordered>thead>tr>td:first-child,.panel-collapse>.table-bordered>tbody>tr>th:first-child,.panel-collapse>.table-bordered>tbody>tr>td:first-child,.panel-collapse>.table-bordered>tfoot>tr>th:first-child,.panel-collapse>.table-bordered>tfoot>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel-collapse>.table-bordered>thead>tr>th:last-child,.panel-collapse>.table-bordered>thead>tr>td:last-child,.panel-collapse>.table-bordered>tbody>tr>th:last-child,.panel-collapse>.table-bordered>tbody>tr>td:last-child,.panel-collapse>.table-bordered>tfoot>tr>th:last-child,.panel-collapse>.table-bordered>tfoot>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel-collapse>.table-bordered>thead>tr:first-child>td,.panel-collapse>.table-bordered>thead>tr:first-child>th,.panel-collapse>.table-bordered>tbody>tr:first-child>td,.panel-collapse>.table-bordered>tbody>tr:first-child>th,.panel-collapse>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel-collapse>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel-collapse>.table-bordered>tbody>tr:last-child>td,.panel-collapse>.table-bordered>tbody>tr:last-child>th,.panel-collapse>.table-bordered>tfoot>tr:last-child>td,.panel-collapse>.table-bordered>tfoot>tr:last-child>th,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive,.panel-collapse>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}body .modal{position:absolute;overflow:visible}body div.tooltip-inner{max-width:400px}body div.popover{max-width:450px}body .modal-body.alert{border-radius:0}body .progress{margin-bottom:0}.panel-body:nth-child(n+2){border-top:1px solid #ddd}.panel .panel-heading[data-toggle="collapse"]{cursor:pointer}#o_ajax_busy_backdrop{bottom:0;z-index:1020}.form-control-feedback{top:10px}.form-horizontal .has-feedback .form-control-feedback{top:10px}.btn.btn-primary.o_disabled{color:#fff !important}body .progress-bar[aria-valuenow="1"],body .progress-bar[aria-valuenow="2"]{min-width:1px}@-moz-document url-prefix(){fieldset{display:table-cell}}@font-face{font-family:'openolat';src:url("../light/fonts/openolat/openolat.eot?4yacgg");src:url("../light/fonts/openolat/openolat.eot?#iefix4yacgg") format("embedded-opentype"),url("../light/fonts/openolat/openolat.woff?4yacgg") format("woff"),url("../light/fonts/openolat/openolat.ttf?4yacgg") format("truetype"),url("../light/fonts/openolat/openolat.svg?4yacgg#openolat") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:'FontAwesome';src:url("../../font-awesome/fonts/fontawesome-webfont.eot?v=4.3.0");src:url("../../font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"),url("../../font-awesome/fonts/fontawesome-webfont.woff2?v=4.3.0") format("woff2"),url("../../font-awesome/fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"),url("../../font-awesome/fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"),url("../../font-awesome/fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.o_icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.o_icon-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.o_icon-2x{font-size:2em}.o_icon-3x{font-size:3em}.o_icon-4x{font-size:4em}.o_icon-5x{font-size:5em}.o_icon-fw{width:1.28571em;text-align:center}.o_icon-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.o_icon-ul>li{position:relative}.o_icon-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.o_icon-li.o_icon-lg{left:-1.85714em}.o_icon-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.o_icon.pull-left{margin-right:.3em}.o_icon.pull-right{margin-left:.3em}.o_icon-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.o_icon-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.o_icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.o_icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.o_icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.o_icon-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.o_icon-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .o_icon-rotate-90,:root .o_icon-rotate-180,:root .o_icon-rotate-270,:root .o_icon-flip-horizontal,:root .o_icon-flip-vertical{filter:none}.o_icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.o_icon-stack-1x,.o_icon-stack-2x{position:absolute;left:0;width:100%;text-align:center}.o_icon-stack-1x{line-height:inherit}.o_icon-stack-2x{font-size:2em}.o_icon-inverse{color:#fff}.o_icon_accepted:before{content:""}.o_icon_accessibility:before{content:""}.o_icon_actions:before{content:""}.o_icon_archive_tool:before{content:""}.o_icon_assessment_mode:before{content:""}.o_icon_assessment_tool:before{content:""}.o_icon_attempt_limit:before{content:""}.o_icon_accept:before{content:"";color:#5cb85c}.o_icon_add:before{content:""}.o_icon_add_member:before{content:""}.o_icon_add_search:before{content:""}.o_icon_audio:before{content:""}.o_icon_back:before{content:""}.o_icon_back_history:before{content:""}.o_icon_banned:before{content:"";color:#d9534f}.o_icon_bold:before{content:""}.o_icon_booking:before{content:""}.o_icon_bookmark:before{content:"";color:#bc2d0c}.o_icon_bookmark_add:before{content:""}.o_icon_bookmark_header:before{content:""}.o_icon_browse:before{content:""}.o_icon_browsercheck:before{content:""}.o_icon_busy:before{content:""}.o_icon_calendar:before{content:""}.o_icon_calendar_enabled:before{content:""}.o_icon_calendar_disabled:before{content:""}.o_icon_calendar:before{content:""}.o_icon_calendar_sync:before{content:""}.o_icon_caret:before{content:""}.o_icon_caret_right:before{content:""}.o_icon_catalog:before{content:""}.o_icon_catalog_sub:before{content:""}.o_icon_certificate:before{content:""}.o_icon_chat:before{content:""}.o_icon_check:before{content:""}.o_icon_check_off:before{content:""}.o_icon_check_on:before{content:""}.o_icon_checkbox:before{content:""}.o_icon_checkbox_checked:before{content:""}.o_icon_cleanup:before{content:""}.o_icon_close:before{content:""}.o_icon_close_resource:before{content:""}.o_icon_close_tab:before{content:""}.o_icon_close_tool:before{content:""}.o_icon_close_tree:before{content:""}.o_icon_close_togglebox:before,.o_togglebox_wrapper .o_opener.o_in i:before{content:""}.o_icon_code:before{content:""}.o_icon_color_picker:before{content:""}.o_icon_copy:before{content:""}.o_icon_courseareas:before{content:""}.o_icon_coursedb:before{content:""}.o_icon_courseeditor:before{content:""}.o_icon_coursefolder:before{content:""}.o_icon_courserun:before{content:""}.o_icon_comments:before{content:""}.o_icon_comments_none:before{content:""}.o_icon_content_popup:before{content:""}.o_icon_correct_answer:before{content:"";color:#5cb85c}.o_icon_customize:before{content:""}.o_icon_delete_item:before{content:""}.o_icon_delete:before{content:"";color:#A87E7E}.o_icon_details:before{content:""}.o_icon_description:before{content:""}.o_icon_dev:before{content:""}.o_icon_disabled:before{content:""}.o_icon_download:before{content:""}.o_icon_edit:before{content:""}.o_icon_edit_file:before{content:""}.o_icon_edit_metadata:before{content:""}.o_icon_enabled:before{content:""}.o_icon_enlarge:before{content:""}.o_icon_eportfolio_add:before{content:""}.o_icon_eportfolio_link:before{content:""}.o_icon_error:before{content:"";color:#d9534f}.o_icon_expenditure:before{content:""}.o_icon_export:before{content:""}.o_icon_external_link:before{content:""}.o_icon_failed:before{content:""}.o_icon_filter:before{content:""}.o_icon_graduate:before{content:""}.o_icon_group:before,.o_BusinessGroup_icon:before{content:""}.o_icon_header:before{content:""}.o_icon_help:before{content:"";cursor:help}.o_icon_home:before{content:""}.o_icon_impress:before{content:""}.o_icon_important:before{content:"";color:#f0ad4e}.o_icon_import:before{content:""}.o_icon_info:before{content:"";color:#5bc0de}.o_icon_info_msg:before{content:"";color:#d9534f}.o_icon_info_resource:before{content:""}.o_icon_inline_editable:before{content:""}.o_icon_institution:before{content:""}.o_icon_italic:before{content:""}.o_icon_landingpage:before{content:""}.o_icon_language:before{content:""}.o_icon_layout:before{content:""}.o_icon_link:before{content:""}.o_icon_link_extern:before{content:""}.o_icon_list:before{content:""}.o_icon_list_num :before{content:""}.o_icon_lifecycle:before{content:""}.o_icon_locked:before{content:""}.o_icon_login:before{content:""}.o_icon_logout:before{content:""}.o_icon_mandatory:before{content:"";color:#f0ad4e}.o_icon_managed:before{content:"";color:#777}.o_icon_manual:before{content:"";cursor:help}.o_icon_mail:before{content:""}.o_icon_math:before{content:""}.o_icon_membersmanagement:before{content:""}.o_icon_menuhandel:before{content:""}.o_icon_message:before{content:""}.o_icon_mobile:before{content:""}.o_icon_move:before{content:""}.o_icon_move_down:before{content:""}.o_icon_move_left:before{content:""}.o_icon_move_right:before{content:""}.o_icon_move_up:before{content:""}.o_icon_new:before{content:"";color:#5cb85c}.o_icon_new_document:before{content:""}.o_icon_new_folder:before{content:""}.o_icon_news:before{content:""}.o_icon_next:before{content:""}.o_icon_next_page:before{content:""}.o_icon_next_toolbar:before{content:""}.o_icon_node_after:before{content:""}.o_icon_node_before:before{content:""}.o_icon_node_under:before{content:""}.o_icon_notes:before{content:""}.o_icon_notification:before{content:""}.o_icon_ok:before{content:"";color:#5cb85c}.o_icon_open_tree:before{content:""}.o_icon_open_togglebox:before,.o_togglebox_wrapper .o_opener i:before{content:""}.o_icon_openolat:before,.o_icon_provider_olat:before{content:"\E600";font-family:openolat;font-size:10px}.o_icon_options:before{content:""}.o_icon_pageing:before{content:""}.o_icon_passed:before{content:""}.o_icon_password:before{content:""}.o_icon_pending:before{content:""}.o_icon_phone:before{content:""}.o_icon_post:before{content:""}.o_icon_preview:before{content:""}.o_icon_previous:before{content:""}.o_icon_previous_page:before{content:""}.o_icon_previous_toolbar:before{content:""}.o_icon_print:before{content:""}.o_icon_private:before{content:""}.o_icon_provider_adfs:before{content:""}.o_icon_provider_facebook:before{content:""}.o_icon_provider_google:before{content:""}.o_icon_provider_guest:before{content:""}.o_icon_provider_ldap:before{content:""}.o_icon_provider_linkedin:before{content:""}.o_icon_provider_oauth:before{content:""}.o_icon_provider_performx:before{content:""}.o_icon_provider_shibboleth:before{content:""}.o_icon_provider_twitter:before{content:""}.o_icon_publish:before{content:""}.o_icon_qrcode:before{content:""}.o_icon_quickview:before{content:""}.o_icon_radio_off:before{content:""}.o_icon_radio_on:before{content:""}.o_icon_rating_on:before,.o_rating .o_rating_items.o_enabled .o_icon:hover:before{content:""}.o_icon_rating_off:before{content:""}.o_icon_read:before{content:""}.o_icon_readonly:before{content:"";color:red}.o_icon_readwrite:before{content:""}.o_icon_recycle:before{content:""}.o_icon_refresh:before{content:""}.o_icon_reject:before{content:"";color:#d9534f}.o_icon_rejected:before{content:""}.o_icon_reminder:before{content:""}.o_icon_remove:before{content:""}.o_icon_replace:before{content:""}.o_icon_reply:before{content:""}.o_icon_reply_with_quote:before{content:""}.o_icon_response_feedback:before{content:""}.o_icon_review:before{content:""}.o_icon_rss:before{content:""}.o_icon_rss_unsubscribe:before{content:"";color:#996633}.o_icon_search:before{content:""}.o_icon_select:before{content:""}.o_icon_send:before{content:""}.o_icon_settings:before{content:""}.o_icon_share:before{content:""}.o_icon_show_more:before{content:""}.o_icon_show_less:before{content:""}.o_icon_show_send:before{content:""}.o_icon_sign_out:before{content:""}.o_icon_spacer:before{content:""}.o_icon_split:before{content:""}.o_icon_sort:before{content:""}.o_icon_sort_asc:before{content:""}.o_icon_sort_desc:before{content:""}.o_icon_sort_menu:before{content:""}.o_icon_start:before{content:""}.o_icon_status_available:before{content:"";color:#063}.o_icon_status_chat:before{content:""}.o_icon_status_dnd:before{content:"";color:#cc3}.o_icon_status_unavailable:before{content:"";color:#963}.o_icon_statistics_tool:before{content:""}.o_icon_submit:before{content:""}.o_icon_table:before{content:""}.o_icon_table_large:before{content:""}.o_icon_tags:before{content:""}.o_icon_timelimit:before{content:""}.o_icon_toggle:before{content:""}.o_icon_to_read:before{content:""}.o_icon_tool:before{content:""}.o_icon_tools:before{content:""}.o_icon_top:before{content:""}.o_icon_translation_item:before{content:""}.o_icon_translation_package:before{content:""}.o_icon_user:before{content:""}.o_icon_user_vip:before{content:""}.o_icon_user_anonymous:before{content:""}.o_icon_upload:before{content:""}.o_icon_version:before{content:""}.o_icon_video:before{content:""}.o_icon_waiting:before{content:""}.o_icon_warn:before{content:"";color:#f0ad4e}.o_icon_wizard:before{content:""}.o_CourseModule_icon:before,.o_course_icon:before{content:""}.o_EPStructuredMapTemplate_icon:before{content:""}.o_FileResource-BLOG_icon:before{content:""}.o_FileResource-IMSCP_icon:before{content:""}.o_FileResource-PODCAST_icon:before{content:""}.o_FileResource-SHAREDFOLDER:before{content:""}.o_FileResource-SCORMCP_icon:before{content:""}.o_FileResource-SURVEY_icon:before{content:""}.o_FileResource-TEST_icon:before{content:""}.o_FileResource-WIKI_icon:before{content:""}.o_FileResource-SHAREDFOLDER_icon:before{content:""}.o_FileResource-GLOSSARY_icon:before{content:""}.o_FileResource-PDF_icon:before{content:""}.o_FileResource-XLS_icon:before{content:""}.o_FileResource-PPT_icon:before{content:""}.o_FileResource-DOC_icon:before{content:""}.o_FileResource-ANIM_icon:before{content:""}.o_FileResource-IMAGE_icon:before{content:""}.o_FileResource-SOUND_icon:before{content:""}.o_FileResource-MOVIE_icon:before{content:""}.o_FileResource-FILE_icon:before{content:""}.o_CourseModule_icon_closed:before{content:""}.o_sp_icon:before{content:""}.o_st_icon:before{content:""}.o_tu_icon:before{content:""}.o_bc_icon:before{content:""}.o_lti_icon:before{content:""}.o_cp_icon:before{content:""}.o_cp_item:before{content:""}.o_scorm_icon:before{content:""}.o_en_icon:before{content:""}.o_fo_icon:before{content:""}.o_co_icon:before{content:""}.o_infomsg_icon:before{content:""}.o_cal_icon:before{content:""}.o_wiki_icon:before{content:""}.o_podcast_icon:before{content:""}.o_blog_icon:before{content:""}.o_ep_icon:before{content:""}.o_iqtest_icon:before{content:""}.o_iqself_icon:before{content:""}.o_iqsurv_icon:before{content:""}.o_ta_icon:before{content:""}.o_gta_icon:before{content:""}.o_ms_icon:before{content:""}.o_dialog_icon:before{content:""}.o_projectbroker_icon:before{content:""}.o_ll_icon:before{content:""}.o_den_icon:before{content:""}.o_cmembers_icon:before{content:""}.o_cl_icon:before{content:""}.o_vc_icon:before{content:""}.o_vitero_icon:before{content:""}.o_openmeetings_icon:before{content:""}.o_portlet_infomsg_icon:before{content:""}.o_portlet_quickstart_icon:before{content:""}.o_portlet_bookmark_icon:before{content:""}.o_portlet_groups_icon:before{content:""}.o_portlet_notes_icon:before{content:""}.o_portlet_noti_icon:before{content:""}.o_portlet_eff_icon:before{content:""}.o_portlet_repository_student_icon:before{content:""}.o_portlet_repository_teacher_icon:before{content:""}.o_portlet_iframe_icon:before{content:""}.o_portlet_sysinfo_icon:before{content:""}.o_portlet_dyk_icon:before{content:""}.o_portlet_infomessages_icon:before{content:""}.o_portlet_cal_icon:before{content:""}.o_portlet_institutions_icon:before{content:""}.o_portlet_links_icon:before{content:""}.o_portlet_shibboleth_icon:before{content:""}.o_icon_qpool:before{content:""}.o_icon_pool_private:before{content:""}.o_icon_pool_public:before{content:""}.o_icon_pool_my_items:before{content:""}.o_icon_pool_favorits:before{content:""}.o_icon_pool_collection:before{content:""}.o_icon_pool_pool:before{content:""}.o_icon_pool_share:before{content:""}.o_forum_message_icon:before{content:""}.o_calendar_icon:before{content:""}.o_forum_status_thread_icon:before{content:""}.o_forum_status_sticky_closed_icon:before{content:""}.o_forum_status_sticky_icon:before{content:""}.o_forum_status_closed_icon:before{content:"";color:#a94442}.o_forum_status_opened_icon:before{content:"";color:#3c763d}.o_forum_status_hidden_icon:before{content:"";color:#a94442}.o_forum_status_visible_icon:before{content:"";color:#3c763d}.o_mi_qpool_import:before{content:""}.o_mi_qtisection:before{content:""}.o_mi_qtisc:before{content:""}.o_mi_qtimc:before{content:""}.o_mi_qtikprim:before{content:""}.o_mi_qtifib:before{content:""}.o_mi_qtiessay:before{content:""}.o_as_mode_leadtime:before{content:""}.o_as_mode_assessment:before{content:""}.o_as_mode_followup:before{content:""}.o_as_mode_closed:before{content:'-'}.o_black_led:before{content:"";color:#337ab7}.o_green_led:before{content:"";color:#5cb85c}.o_yellow_led:before{content:"";color:#f0ad4e}.o_red_led:before{content:"";color:#d9534f}.o_ac_token_icon:before{content:""}.o_ac_free_icon:before{content:""}.o_ac_group_icon:before{content:""}.o_ac_membersonly_icon:before{content:""}.o_ac_paypal_icon:before{content:""}.o_ac_status_canceled_icon:before{content:"";color:#f0ad4e}.o_ac_status_error_icon:before{content:"";color:#d9534f}.o_ac_status_new_icon:before{content:"";color:#337ab7}.o_ac_status_succes_icon:before{content:"";color:#5cb85c}.o_ac_status_waiting_icon:before{content:"";color:#337ab7}.o_ac_order_status_new_icon:before{content:"";color:#337ab7}.o_ac_order_status_prepayment_icon:before{content:"";color:#5bc0de}.o_ac_order_status_payed_icon:before{content:"";color:#5cb85c}.o_ac_order_status_canceled_icon:before{content:"";color:#f0ad4e}.o_ac_order_status_error_icon:before{content:"";color:#d9534f}.o_ac_order_status_warning_icon:before{content:"";color:#f0ad4e}.o_scorm_org:before{content:""}.o_scorm_item:before{content:""}.o_scorm_completed:before,.o_scorm_passed:before{content:""}.o_scorm_failed:before{content:""}.o_scorm_incomplete:before{content:""}.o_scorm_not_attempted:before{background:none}.o_midpub:before{content:""}.o_midwarn:before{content:""}.o_midlock:before{content:""}.o_miderr:before{content:""}.o_middel:before{content:""}.o_filetype_file:before,.o_filetype_ico:before{content:""}.o_filetype_folder:before{content:""}.o_filetype_folder_open:before{content:""}.o_filetype_zip:before,.o_filetype_gz:before,.o_filetype_tar:before,.o_filetype_tgz:before{content:""}.o_filetype_css:before,.o_filetype_js:before,.o_filetype_java:before,.o_filetype_numbers:before,.o_filetype_ods:before,.o_filetype_xml:before,.o_filetype_xsl:before{content:""}.o_filetype_bat_icon:before,.o_filetype_bat:before,.o_filetype_exe:before,.o_filetype_app:before,.o_filetype_sh:before{content:""}.o_filetype_xls:before,.o_filetype_xlsx:before{content:""}.o_filetype_png:before,.o_filetype_tiff:before,.o_filetype_webp:before,.o_filetype_gif:before,.o_filetype_ico:before,.o_filetype_jpeg:before,.o_filetype_bmp:before,.o_filetype_odg:before,.o_filetype_eps:before,.o_filetype_jpg:before{content:""}.o_filetype_psd:before,.o_filetype_avi:before,.o_filetype_dvi:before,.o_filetype_mp4:before,.o_filetype_m4v:before,.o_filetype_webm:before,.o_filetype_ogg:before,.o_filetype_video:before,.o_filetype_mov:before,.o_filetype_mpeg:before,.o_filetype_mpg:before,.o_filetype_qt:before,.o_filetype_ra:before,.o_filetype_ram:before,.o_filetype_swf:before,.o_filetype_flv:before{content:""}.o_filetype_midi:before,.o_filetype_audio:before,.o_filetype_mp3:before,.o_filetype_m3u:before,.o_filetype_wav:before{content:""}.o_filetype_ps:before,.o_filetype_pdf:before{content:""}.o_filetype_key:before,.o_filetype_odp:before,.o_filetype_ppt:before,.o_filetype_pptx:before{content:""}.o_filetype_odf:before,.o_filetype_rtf:before,.o_filetype_readme:before,.o_filetype_README:before,.o_filetype_log:before,.o_filetype_txt:before,.o_filetype_htm:before,.o_filetype_html:before{content:""}.o_filetype_odt:before,.o_filetype_pages:before,.o_filetype_doc:before,.o_filetype_docx:before{content:""}.o_icon_share_social:before{content:""}.o_icon_apple:before{content:""}.o_icon_facebook:before{content:""}.o_icon_twitter:before{content:""}.o_icon_google:before{content:""}.o_icon_delicious:before{content:""}.o_icon_digg:before{content:""}.o_icon_mailto:before{content:""}.o_icon_link:before{content:""}.o_icon_yahoo:before{content:""}a.o_icon:hover,a.o_icon:focus{text-decoration:none}img.o_emoticons_angel{background:url(../light/images/emoticons/smiley-angel.png);width:16px;height:16px}img.o_emoticons_angry{background:url(../light/images/emoticons/smiley-mad.png);width:16px;height:16px}img.o_emoticons_blushing{background:url(../light/images/emoticons/smiley-red.png);width:16px;height:16px}img.o_emoticons_confused{background:url(../light/images/emoticons/smiley-confuse.png);width:16px;height:16px}img.o_emoticons_cool{background:url(../light/images/emoticons/smiley-cool.png);width:16px;height:16px}img.o_emoticons_cry{background:url(../light/images/emoticons/smiley-cry.png);width:16px;height:16px}img.o_emoticons_devil{background:url(../light/images/emoticons/smiley-evil.png);width:16px;height:16px}img.o_emoticons_grin{background:url(../light/images/emoticons/smiley-grin.png);width:16px;height:16px}img.o_emoticons_kiss{background:url(../light/images/emoticons/smiley-kiss.png);width:16px;height:16px}img.o_emoticons_ohoh{background:url(../light/images/emoticons/smiley-eek.png);width:16px;height:16px}img.o_emoticons_sad{background:url(../light/images/emoticons/smiley-sad.png);width:16px;height:16px}img.o_emoticons_sick{background:url(../light/images/emoticons/smiley-sad-blue.png);width:16px;height:16px}img.o_emoticons_smile{background:url(../light/images/emoticons/smiley.png);width:16px;height:16px}img.o_emoticons_tongue{background:url(../light/images/emoticons/smiley-razz.png);width:16px;height:16px}img.o_emoticons_ugly{background:url(../light/images/emoticons/smiley-money.png);width:16px;height:16px}img.o_emoticons_weird{background:url(../light/images/emoticons/smiley-nerd.png);width:16px;height:16px}img.o_emoticons_wink{background:url(../light/images/emoticons/smiley-wink.png);width:16px;height:16px}img.o_emoticons_worried{background:url(../light/images/emoticons/smiley-roll-blue.png);width:16px;height:16px}img.o_emoticons_up{background:url(../light/images/emoticons/thumb-up.png);width:16px;height:16px}img.o_emoticons_down{background:url(../light/images/emoticons/thumb.png);width:16px;height:16px}.o_block_bottom,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry,.o_header_with_buttons,.o_search_result{margin-bottom:1em}.o_block_top,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry{margin-top:1em}.o_block_large_bottom,.o_block_large,.o_block_with_datecomp,.o_login .o_login_footer_wrapper,.o_portlet{margin-bottom:2em}.o_block_large_top,.o_block_large,.o_block_with_datecomp,.o_login .o_login_footer_wrapper,.o_portlet{margin-top:2em}.o_block_inline,.o_block_inline_left,.o_block_inline_both,.o_block_inline_right{display:inline-block}.o_block_inline_left,.o_block_inline_both{margin-left:0.5em}.o_block_inline_right,.o_block_inline_both{margin-right:0.5em}.o_scrollblock,div.b_scrollblock{overflow-x:auto;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_button_group{text-align:center}.o_button_group a,.o_button_group input,.o_button_group button,.o_button_group .btn-group{margin-right:5px;margin-bottom:0.5em}.o_button_group a:last-child,.o_button_group input:last-child,.o_button_group button:last-child,.o_button_group .btn-group:last-child{margin-right:0}.o_button_group .btn-group a,.o_button_group .btn-group input,.o_button_group .btn-group button{margin-right:0;margin-bottom:0}.o_button_group .dropdown-menu{text-align:left}.o_button_group_left{text-align:left}.o_button_group_right{text-align:right}.o_button_group_top{margin-top:0}.o_header_with_buttons:before,.o_header_with_buttons:after{content:" ";display:table}.o_header_with_buttons:after{clear:both}.o_header_with_buttons h1,.o_header_with_buttons h3,.o_header_with_buttons h4,.o_header_with_buttons .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_header_with_buttons h2{display:inline-block}.o_header_with_buttons .o_button_group{margin-top:10px;margin-bottom:0;float:right}.panel-heading.o_header_with_buttons{margin-bottom:0}.o_xsmall,.b_xsmall,p.b_xsmall,div.b_xsmall{font-size:12px}.o_small,.b_small,p.b_small,div.b_small,.o_comments .o_comment_wrapper h5,.o_comments .o_comment_wrapper .o_comment,.o_bc_meta,.tooltip,.o_htmleditor .o_metadata .o_lastmodified,.o_noti,.o_block_with_datecomp .o_meta,.o_togglebox_wrapper div.o_togglebox_content .o_hide,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label,.o_course_run .o_toc .o_entry{font-size:12px}.o_large,.b_large,p.b_large,div.b_large{font-size:18px}.o_xlarge,.b_xlarge,p.b_xlarge,div.b_xlarge{font-size:18px}.o_disabled,.b_disabled,p.b_disabled,div.b_disabled{color:#777 !important;cursor:default}.o_disabled:hover,.b_disabled:hover{color:#777 !important}.o_dimmed,.b_dimmed,p.b_dimmed,div.b_dimmed{opacity:0.4;filter:alpha(opacity=40)}.o_selected,.b_selected,p.b_selected,div.b_selected{font-weight:bold}.o_deleted,.b_deleted,p.b_deleted,div.b_deleted{text-decoration:line-through}.o_clickable{cursor:pointer}.o_ochre{color:#c8a959}.o_blue{color:#12223F}.o_undecorated:hover,.o_undecorated:focus,.o_disabled:hover,.b_disabled:hover,#o_main_wrapper #o_toplink:hover,#o_footer_powered a:hover,#o_share a:hover,#o_share_social_container a:hover,.o_toolbar .o_tools_container a:hover,.o_button_toggle:hover,.o_im_message_group .o_im_from:hover,.o_noti .o_label:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover,.o_catalog .o_level .o_meta .o_title a:hover,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover,.o_repo_details .o_social .o_comments:hover,.o_login .o_login_register:hover,.o_disabled:focus,.b_disabled:focus,#o_main_wrapper #o_toplink:focus,#o_footer_powered a:focus,#o_share a:focus,#o_share_social_container a:focus,.o_toolbar .o_tools_container a:focus,.o_button_toggle:focus,.o_im_message_group .o_im_from:focus,.o_noti .o_label:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:focus,.o_catalog .o_level .o_meta .o_title a:focus,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:focus,.o_repo_details .o_social .o_comments:focus,.o_login .o_login_register:focus{text-decoration:none}.o_copy_code,.b_copy_code,p.b_copy_code,div.b_copy_code,code,pre{overflow-x:auto;overflow-y:auto;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}.o_nowrap,.b_copy_code,p.b_copy_code,div.b_copy_code,code{white-space:nowrap}.o_titled_wrapper .o_content{margin-top:20px}.o_video,.o_video video,.b_video,.o_video_wrapper{display:inline-block;max-width:100%;height:auto;max-width:100%}.o_image,.o_image img,img,.b_image{display:inline-block;max-width:100%;height:auto;max-width:100%}.o_with_hyphens{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}h1{color:#337ab7}h2{color:#337ab7}h3{color:#337ab7}h4,.o_cal .fc-header-title h2{color:#337ab7}h5{color:#337ab7}h5{color:#337ab7}fieldset legend{color:#333}.b_border_box,p.b_border_box,div.b_border_box{border:1px solid #777;padding:1em;border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}table td{vertical-align:top}table.b_grid{width:99.5%;background:transparent;border-collapse:separate}table.b_grid td,table.b_grid th{padding:1px 5px;border:1px solid #777}table.b_grid th{background:#eee}table.b_border{width:99.5%;background:transparent;border-collapse:collapse}table.b_border td,table.b_border th{padding:1px 5px;border:1px solid #777}table.b_border th{background:#eee}table.b_borderless{width:99.5%;background:transparent;border-collapse:separate}table.b_borderless td,table.b_borderless th{padding:1px 5px;border:0}table.b_full{width:99.5%}table.b_middle{background:transparent}table.b_middle td{vertical-align:middle}.b_align_normal{text-align:left}.b_align_center{text-align:center}.b_align_inverse{text-align:right}.b_align_justified{text-align:justify}a.b_link_extern{color:#337ab7}a.b_link_extern:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}a.b_link_mailto{color:#337ab7}a.b_link_mailto:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}a.b_link_forward{color:#337ab7}a.b_link_forward:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}img.b_float_left{float:left;margin:0 2em 2em 0}img.b_float_left_clear{clear:both;margin:0 2em 2em 0;display:block}img.b_float_right{float:right;margin:0 0 2em 2em}img.b_float_right_clear{clear:both;display:block;margin:0 0 2em auto}img.b_centered{clear:both;display:block;margin:0 auto 2em auto}img.b_circle{border-radius:50%}img.b_with_border{border:1px solid #ddd;padding:3px;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}span.olatFlashMovieViewer{max-width:100% !important;border:none !important}.mejs-container,.mejs-mediaelement video,.mejs-layers div,.me-cannotplay{max-width:100%}.b_clear_float,p.b_clear_float,div.b_clear_float{clear:both}html{position:relative;min-height:100%}body{min-height:100%;margin-bottom:80px}#o_main_wrapper{background:#fff;z-index:3}#o_main_wrapper #o_main_container{background:#fff}#o_main_wrapper #o_main_container #o_main_left{float:left;z-index:2;position:relative;background:#fff}#o_main_wrapper #o_main_container #o_main_left #o_main_left_content{padding:0 0 0 15px}#o_main_wrapper #o_main_container #o_main_left #o_main_left_toggle{position:absolute;display:none;right:0;top:70px;margin-right:-30px;font-size:25px;line-height:35px;text-align:center;width:30px;height:35px;z-index:3;border:1px solid #ddd;border-left:none;border-bottom-right-radius:4px;border-top-right-radius:4px;background-color:#fbfbfb;-webkit-box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);color:#337ab7}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas{background:#fbfbfb;-webkit-box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);min-width:250px}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas #o_main_left_content{padding:0 0 0 0}#o_main_wrapper #o_main_container #o_main_right{float:right;z-index:2;position:relative;background:inherit}#o_main_wrapper #o_main_container #o_main_right #o_main_right_content{padding:0 15px 0 0}#o_main_wrapper #o_main_container #o_main_center{position:relative;z-index:1;background:inherit}#o_main_wrapper #o_main_container #o_main_center h2:first-child{margin-top:0}@media screen and (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center{margin-left:0 !important}}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:0 15px}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content #o_main_center_content_inner{padding-bottom:15px}#o_main_wrapper #o_toplink{position:absolute;bottom:0;right:15px;text-align:center;z-index:3}@media (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:15px}}#o_back_wrapper,#o_preview_wrapper{margin-top:10px}#o_back_wrapper.o_toolbar .o_breadcrumb .breadcrumb,#o_preview_wrapper.o_toolbar .o_breadcrumb .breadcrumb{font-size:14px}#o_footer_wrapper{position:absolute;bottom:0;width:100%;height:70px;overflow:hidden;background-color:#f5f5f5;color:#999;line-height:16px;font-size:12px}#o_footer_wrapper a{color:#999}#o_footer_wrapper a:hover{color:#000}#o_footer_container{position:relative;padding-top:10px;min-height:70px;background:#f5f5f5;z-index:1}#o_footer_user{position:absolute;left:15px;top:10px;z-index:1}#o_footer_user #o_counter{white-space:nowrap}#o_footer_user #o_username{white-space:nowrap;margin-right:1em}#o_footer_version{position:absolute;right:15px;top:10px;text-align:right;z-index:1}@media (max-width: 767px){#o_footer_version{padding-top:10px;text-align:left}}#o_footer_powered{position:absolute;top:30px;right:15px;z-index:1}#o_footer_powered img{opacity:0.6;filter:alpha(opacity=60)}#o_footer_powered img:hover{opacity:1;filter:alpha(opacity=100)}#o_footer_impressum{position:absolute;top:10px;width:100%;text-align:center;z-index:-1}#o_footer_impressum i{display:none}#o_footer_textline{position:absolute;top:30px;width:100%;text-align:center;z-index:-1}#o_share{margin-top:10px}#o_share a{opacity:0.6;filter:alpha(opacity=60)}#o_share a:hover{opacity:1;filter:alpha(opacity=100)}#o_share a,#o_share_social_container a{color:#999;margin:0 0.25em 0 0}#o_share a:hover,#o_share_social_container a:hover{color:#000}@media (max-width: 767px){#o_counter,#o_footer_version,#o_share{display:none}#o_footer_impressum{top:30px;text-align:left}#o_footer_textline{top:50px;text-align:left}#o_footer_powered{top:10px}#o_footer_powered a:after{content:"\221E";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:14px}#o_footer_powered img{display:none}}#o_navbar_wrapper{z-index:4;border-top:1px solid #e7e7e7;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1)}#o_navbar_wrapper #o_navbar_container{position:relative}a.o_disabled.navbar-text{margin:0}.o_navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid #e7e7e7;background-color:#f8f8f8}.o_navbar:before,.o_navbar:after{content:" ";display:table}.o_navbar:after{clear:both}.o_navbar .o_navbar_tabs li{max-width:150px}.o_navbar .o_navbar_tabs li a{padding-right:30px}.o_navbar .o_navbar_tabs li a:first-child span{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o_navbar .o_navbar_tabs .o_icon-fw{position:absolute;top:15px;left:0.5em;padding-top:3px;width:1em;height:1em;display:none}.o_navbar .o_navbar_tabs .o_navbar_tab_close{position:absolute;top:15px;right:0.5em;padding:0;width:1em;height:1em}.o_navbar .o_navbar_tabs .o_navbar_tab_close i:before{color:#d9534f}.o_navbar .o_navbar_tabs .o_navbar_tab_close:hover i:before{color:#c9302c}.o_navbar .o_custom_navbar-brand{background-position:5px 0;background-repeat:no-repeat;height:50px;width:120px}.o_navbar #o_navbar_langchooser{color:#777;padding:7px 15px}.o_navbar #o_navbar_langchooser form span+div{display:inline}.o_navbar #o_navbar_tools_permanent #o_navbar_print a,.o_navbar #o_navbar_tools_permanent #o_navbar_impress a,.o_navbar #o_navbar_tools_permanent #o_navbar_help a{color:#777;padding-right:0}.o_navbar #o_navbar_tools_permanent #o_navbar_login a{color:#f0ad4e}.o_navbar .o_navbar_tools>#o_navbar_tools_permanent>li>a>span{display:none}@media (min-width: 768px){.o_navbar .o_navbar_tools li.o_portrait>a>span{display:inline}}.o_navbar #o_navbar_tools_personal .o_navbar_tool a,.o_navbar #o_navbar_tools_permanent .o_navbar_tool a{padding-right:5px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu a,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu a{padding-left:45px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .dropdown-menu a,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu .dropdown-menu a{padding-left:15px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .o_portrait,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu .o_portrait{position:absolute;left:7px;top:10px}.o_navbar #o_navbar_tools_personal .o_logout,.o_navbar #o_navbar_tools_permanent .o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas .o_navbar_tab_close{top:10px;right:10px}.o_navbar.o_navbar-offcanvas .o_navbar-right a{padding:3px 20px;color:#9d9d9d}.o_navbar.o_navbar-offcanvas .o_navbar-right a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-right a:focus{color:#fff;background-color:transparent}.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout:hover,.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout:focus{color:#c9302c}.o_navbar.o_navbar-offcanvas .o_navbar-right a .o_icon-lg{font-size:1.0em;vertical-align:baseline}.o_navbar.o_navbar-offcanvas .o_navbar-right .divider{height:1px;margin:9px 0;overflow:hidden;background-color:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-header{padding-left:15px}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-toggle{display:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-menu{box-shadow:none;position:relative;top:0;left:0;display:block;float:none;background-color:#222;color:#9d9d9d;font-size:14px;border:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-menu .divider{background:none}.o_navbar.o_navbar-offcanvas .o_navbar-nav a{color:#9d9d9d;text-shadow:none}.o_navbar.o_navbar-offcanvas .o_navbar-nav a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav a:focus{background-color:transparent;color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a:focus{background-color:#090909;color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .o_navbar-link{color:#9d9d9d}.o_navbar.o_navbar-offcanvas .o_navbar-nav .o_navbar-link:hover{color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a{color:#777}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}#o_navbar_impress a span,#o_navbar_search_opener a span{display:none}body.o_dmz #o_navbar_print a span,body.o_dmz #o_navbar_impress a span,body.o_dmz #o_navbar_help a span,body.o_dmz #o_navbar_search_opener a span{display:inline}.o_navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;-webkit-overflow-scrolling:touch}.o_navbar-collapse:before,.o_navbar-collapse:after{content:" ";display:table}.o_navbar-collapse:after{clear:both}.o_navbar-collapse.o_collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.o_navbar-offcanvas .o_navbar-collapse{width:auto;box-shadow:none;margin-top:10px;margin-right:-15px;margin-left:-15px}.o_navbar-brand{float:left;font-size:18px;line-height:20px;height:50px;color:#777}.o_navbar-brand:hover,.o_navbar-brand:focus{text-decoration:none;color:#5e5e5e;background-color:transparent}.o_navbar-toggle{position:relative;margin-right:15px;margin-left:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;border:1px solid #ddd;border-radius:4px;background-color:transparent;background-image:none}.o_navbar-toggle:hover,.o_navbar-toggle:focus{outline:none;background-color:#ddd}.o_navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px;background-color:#888}.o_navbar-toggle .icon-bar+.icon-bar{margin-top:4px}#o_navbar_left-toggle{float:left}#o_navbar_right-toggle{float:right}.o_navbar-link{color:#777}.o_navbar-link:hover{color:#333}.o_navbar-nav{margin:7.5px -15px}.o_navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px;color:#777}.o_navbar-nav>li>a:hover,.o_navbar-nav>li>a:focus{color:#333;background-color:transparent}.o_navbar-nav>.active>a,.o_navbar-nav>.active>a:hover,.o_navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar-nav>.disabled>a,.o_navbar-nav>.disabled>a:hover,.o_navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.o_navbar-nav>.open>a,.o_navbar-nav>.open>a:hover,.o_navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}.o_collapse .o_navbar-nav{float:left;margin:0}.o_collapse .o_navbar-nav>li{float:left}.o_collapse .o_navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.o_collapse .o_navbar-nav.o_navbar-right:last-child{margin-right:-15px}.o_collapse.o_navbar-collapse .o_navbar-left{float:left !important}.o_collapse.o_navbar-collapse .o_navbar-right{float:right !important}.o_navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (max-width: 767px){.o_navbar-form .form-group{margin-bottom:5px}}.o_collapse .o_navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.o_collapse .o_navbar-form.o_navbar-right:last-child{margin-right:-15px}.o_navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.o_navbar-fixed-bottom .o_navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.o_navbar-btn{margin-top:8px;margin-bottom:8px}.o_navbar-btn.btn-sm,.btn-group-sm>.o_navbar-btn.btn{margin-top:10px;margin-bottom:10px}.o_navbar-btn.btn-xs,.btn-group-xs>.o_navbar-btn.btn{margin-top:14px;margin-bottom:14px}.o_navbar-text{margin-top:15px;margin-bottom:15px;color:#777}.o_collapse .o_navbar-text{float:left;margin-left:15px;margin-right:15px}.o_collapse .o_navbar-text.o_navbar-right:last-child{margin-right:0}.o_dropdown_tab{position:relative}.o_dropdown_tab>a:first-child{padding-right:30px}.o_dropdown_tab>a:first-child .o_icon-fw{display:none;position:absolute;top:0;left:10px;padding-top:3px;line-height:20px}.o_dropdown_tab>a:first-child span{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o_dropdown_tab .o_navbar_tab_close{position:absolute;top:0px;right:10px;padding-left:0px;padding-right:0px;color:#d9534f;background-color:inherit}.o_dropdown_tab .o_navbar_tab_close:focus,.o_dropdown_tab .o_navbar_tab_close:hover{color:#c9302c;background-color:inherit}#o_navbar_more .dropdown-menu .divider:last-child{display:none}@media (min-width: 768px){#o_navbar_more .dropdown-menu{max-width:300px}}@media (max-width: 767px){#o_navbar_more>li{position:inherit}#o_navbar_more .dropdown-menu{left:0px;right:0px}#o_navbar_more .dropdown-menu a,#o_navbar_more .dropdown-menu i{line-height:30px}#o_navbar_more .dropdown-menu .o_navbar_tab_close{line-height:inherit}}.o_body_popup #o_topnav_printview{display:inline-block}.o_body_popup #o_topnav_close{float:right}.o_body_popup #o_topnav_close span{display:block}.o_body_popup #o_navbar_tools_permanent li>a{background-color:transparent}.o_toolbar{position:relative;margin-bottom:20px;margin-top:-10px;border:1px solid #e7e7e7}.o_toolbar:before,.o_toolbar:after{content:" ";display:table}.o_toolbar:after{clear:both}@media (min-width: 768px){.o_toolbar{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}}.o_toolbar .o_breadcrumb:before,.o_toolbar .o_breadcrumb:after{content:" ";display:table}.o_toolbar .o_breadcrumb:after{clear:both}.o_toolbar .o_breadcrumb .breadcrumb{margin-bottom:0;padding:5px 9px;font-size:11px;line-height:15px;border-radius:0;background:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close{float:right;position:relative;margin:0 0 0 15px;vertical-align:middle}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a{line-height:15px;color:#d9534f}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a:hover{color:#b52b27}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a i{font-size:16px}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a span{display:none}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close:before{content:none}.o_toolbar .o_tools_container{text-align:center;min-height:37px;position:realtive;background-color:#f8f8f8;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:1px solid #e7e7e7}.o_toolbar .o_tools_container:before,.o_toolbar .o_tools_container:after{content:" ";display:table}.o_toolbar .o_tools_container:after{clear:both}@media (max-width: 991px){.o_toolbar .o_tools_container{min-height:35px}}@media (max-width: 767px){.o_toolbar .o_tools_container{min-height:22px;text-align:left}}.o_toolbar .o_tools_container a{color:#777;display:inline-block}.o_toolbar .o_tools_container a:hover{color:#333}.o_toolbar .o_tools_container a.o_disabled{color:#aaa !important}.o_toolbar .o_tools_container a.o_disabled:hover{color:#aaa !important}.o_toolbar .o_tools_container a.active{color:#337ab7;background-color:transparent}.o_toolbar .o_tools_container .dropdown-menu a{display:block}.o_toolbar .o_tools_container .dropdown-menu a.active{color:#337ab7;background-color:transparent}.o_toolbar .o_tools{margin-top:8px;margin-bottom:5px}.o_toolbar .o_tool,.o_toolbar .o_text{position:relative;margin:0 10px}.o_toolbar .o_tool:first-child,.o_toolbar .o_text:first-child{margin-left:0}.o_toolbar .o_tool:last-child,.o_toolbar .o_text:last-child{margin-right:0}.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:18px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:block;font-size:12px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{position:absolute;right:50%;top:-18px;margin-right:-12px;font-size:13px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:16px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{font-size:11px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{top:-16.5px;margin-right:-11px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:20px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:none}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{display:block;position:relative;top:0;left:0;margin-right:0}}.o_toolbar .o_tool .o_chelp,.o_toolbar .o_text .o_chelp{position:relative;top:-1em;vertical-align:top;color:#fff}.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{padding:0;margin-top:5px;border:1px solid #ccc;background-color:#eee}.o_toolbar .o_tool_next a,.o_toolbar .o_tool_previous a{color:#777}.o_toolbar .o_tool_next a:hover,.o_toolbar .o_tool_previous a:hover{color:#333}.o_toolbar .o_tool_next a.o_disabled,.o_toolbar .o_tool_previous a.o_disabled{color:#aaa !important}.o_toolbar .o_tool_next a.o_disabled:hover,.o_toolbar .o_tool_previous a.o_disabled:hover{color:#aaa !important}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:21px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{margin-top:4px}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:18px}}@media (max-width: 767px){.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{margin-top:0}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:20px}}.o_toolbar .o_tool_previous{margin-left:10px;border-bottom-left-radius:4px;border-top-left-radius:4px;border-right:0}.o_toolbar .o_tool_next{border-bottom-right-radius:4px;border-top-right-radius:4px}.o_toolbar .o_tool_dropdown{margin:0 10px}.o_toolbar .o_tool_dropdown:first-child{margin-left:0}.o_toolbar .o_tool_dropdown:last-child{margin-right:0}.o_toolbar .o_tool_dropdown a.dropdown-toggle{position:relative}.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:18px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span{display:block;font-size:12px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{position:absolute;right:50%;top:4px;margin-right:-20px;font-size:14px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:16px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span,.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{font-size:11px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{top:4px;margin-right:-18px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool_dropdown a.dropdown-toggle{padding:0 10px 0 5px}.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:20px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span{display:none}}.o_toolbar .o_tool_dropdown .dropdown-menu{text-align:left}.o_toolbar .o_tools_left{float:left}.o_toolbar .o_tools_right{float:right}.o_toolbar .o_tools_right_edge{float:right}@media (max-width: 991px){.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tool span{max-width:10em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_toolbar .o_tool,.o_toolbar .o_text,.o_toolbar .o_tool_dropdown{margin:0 5px}}@media (max-width: 767px){.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tools .o_chelp{top:0;vertical-align:top}.o_toolbar .o_tools_center{float:left}.o_toolbar .o_tool,.o_toolbar .o_text,.o_toolbar .o_tool_dropdown{margin:0 0;position:static}.o_toolbar .o_tool_dropdown .dropdown-menu{left:0px;right:0px}.o_toolbar .o_tool_dropdown .dropdown-menu a,.o_toolbar .o_tool_dropdown .dropdown-menu i{line-height:30px}.o_toolbar .o_tool_dropdown .dropdown-menu .o_navbar_tab_close{line-height:inherit}}body{overflow-x:hidden}.o_container_offcanvas{position:relative;max-width:1324px;-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;-m-transition:all .25s ease-in-out;transition:all .25s ease-in-out}#o_offcanvas_right{position:absolute;top:0;right:-250px;width:250px;padding:15px 15px;background-color:#222;color:#9d9d9d;border:1px solid #090909;-webkit-box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);min-height:100%;z-index:10;display:none}#o_offcanvas_right:before,#o_offcanvas_right:after{content:" ";display:table}#o_offcanvas_right:after{clear:both}@media screen and (max-width: 767px){.row-offcanvas{position:relative;-webkit-transition:all .25s ease-out;-moz-transition:all .25s ease-out;transition:all .25s ease-out}.row-offcanvas-right{right:0}.row-offcanvas-right .sidebar-offcanvas{right:-50%}.row-offcanvas-right.active{right:50%}.row-offcanvas-left{left:0}.row-offcanvas-left .sidebar-offcanvas{left:-50%}.row-offcanvas-left.active{left:50%}.sidebar-offcanvas{position:absolute;top:0;width:50%}}.o_info,.b_info,p.b_info,div.b_info,.o_form .o_info,.o_togglebox_wrapper div.o_togglebox_content,div.o_qti_item_itemfeedback{margin:20px 0;padding:20px;border-left:3px solid #777;background-color:#eee}.o_info h2,.o_info h3,.o_info h4,.o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_info h2,.o_info h5,.b_info h2,.o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback h2,.b_info h3,.o_form .o_info h3,.o_togglebox_wrapper div.o_togglebox_content h3,div.o_qti_item_itemfeedback h3,.b_info h4,.o_form .o_info h4,.o_togglebox_wrapper div.o_togglebox_content h4,div.o_qti_item_itemfeedback h4,.b_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_info h2,.o_form .o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback .o_cal .fc-header-title h2,.o_cal .fc-header-title div.o_qti_item_itemfeedback h2,.b_info h5,.o_form .o_info h5,.o_togglebox_wrapper div.o_togglebox_content h5,div.o_qti_item_itemfeedback h5{color:#777}.o_note,.b_note,p.b_note,div.b_note,.o_form .o_desc,.o_course_run .o_statusinfo,.o_course_stats .o_desc{margin:20px 0;padding:20px;border-left:3px solid #31708f;background-color:#d9edf7}.o_note h2,.o_note h3,.o_note h4,.o_note .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_note h2,.o_note h5,.b_note h2,.o_form .o_desc h2,.o_course_run .o_statusinfo h2,.o_course_stats .o_desc h2,.b_note h3,.o_form .o_desc h3,.o_course_run .o_statusinfo h3,.o_course_stats .o_desc h3,.b_note h4,.o_form .o_desc h4,.o_course_run .o_statusinfo h4,.o_course_stats .o_desc h4,.b_note .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_note h2,.o_form .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_desc h2,.o_course_run .o_statusinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_statusinfo h2,.o_course_stats .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_stats .o_desc h2,.b_note h5,.o_form .o_desc h5,.o_course_run .o_statusinfo h5,.o_course_stats .o_desc h5{color:#31708f}.o_important,.b_important,p.b_important,div.b_important,.o_bc_empty,.o_course_run .o_no_scoreinfo{margin:20px 0;padding:20px;border-left:3px solid #F4D000;background-color:#FFF1A4}.o_important h2,.o_important h3,.o_important h4,.o_important .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_important h2,.o_important h5,.b_important h2,.o_bc_empty h2,.o_course_run .o_no_scoreinfo h2,.b_important h3,.o_bc_empty h3,.o_course_run .o_no_scoreinfo h3,.b_important h4,.o_bc_empty h4,.o_course_run .o_no_scoreinfo h4,.b_important .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_important h2,.o_bc_empty .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_bc_empty h2,.o_course_run .o_no_scoreinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_no_scoreinfo h2,.b_important h5,.o_bc_empty h5,.o_course_run .o_no_scoreinfo h5{color:#F4D000}.o_success,.b_success,p.b_success,div.b_success{margin:20px 0;padding:20px;border-left:3px solid #3c763d;background-color:#dff0d8}.o_success h2,.o_success h3,.o_success h4,.o_success .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_success h2,.o_success h5,.b_success h2,.b_success h3,.b_success h4,.b_success .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_success h2,.b_success h5{color:#3c763d}.o_warning,.b_warning,p.b_warning,div.b_warning,.o_form .o_warning{margin:20px 0;padding:20px;border-left:3px solid #8a6d3b;background-color:#fcf8e3}.o_warning h2,.o_warning h3,.o_warning h4,.o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_warning h2,.o_warning h5,.b_warning h2,.o_form .o_warning h2,.b_warning h3,.o_form .o_warning h3,.b_warning h4,.o_form .o_warning h4,.b_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_warning h2,.o_form .o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_warning h2,.b_warning h5,.o_form .o_warning h5{color:#8a6d3b}.o_error,.b_error,p.b_error,div.b_error{margin:20px 0;padding:20px;border-left:3px solid #a94442;background-color:#f2dede}.o_error h2,.o_error h3,.o_error h4,.o_error .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_error h2,.o_error h5,.b_error h2,.b_error h3,.b_error h4,.b_error .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_error h2,.b_error h5{color:#a94442}div.o_callout_overlay{position:fixed;top:0;left:0;width:100%;height:100%;zoom:1;background:#000;opacity:0;filter:alpha(opacity=0)}.o_alert_info{position:fixed;top:-100%;left:0;display:none;z-index:2000;width:100%;text-align:center}.o_alert_info .alert{position:relative;width:auto;margin:0 auto;text-align:left;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.o_alert_info .alert .o_icon_close{float:right;color:#777}.o_alert_info .alert .o_icon_close:hover{color:#555}@media (min-width: 768px){.o_alert_info .alert{width:600px}}#o_msg_sticky,#o_msg_sticky_preview{position:relative;color:#a94442;background-color:#f2dede;border:1px solid #ebccd1;padding:10px 16px 10px 60px;min-height:40px;margin:-20px 0 20px 0}#o_msg_sticky .o_icon_info_msg,#o_msg_sticky_preview .o_icon_info_msg{position:absolute;left:10px;top:5px;font-size:40px}#o_msg_sticky.o_msg_sticky_fullscreen,#o_msg_sticky_preview.o_msg_sticky_fullscreen{margin-top:0}@media (min-width: 768px){.modal .o_modal_fullwidth{width:90%}}@media (min-width: 992px){.modal .o_modal_fullwidth{width:80%}}.modal .modal-header h4,.modal .modal-header .o_cal .fc-header-title h2,.o_cal .fc-header-title .modal .modal-header h2{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.o_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_tree a{color:#777;background-color:none}.o_tree a:hover,.o_tree a:focus{color:#333}.o_tree .o_tree_link{background-color:none}.o_tree .o_tree_link:hover,.o_tree .o_tree_link:focus{background-color:#f8f8f8}.o_tree .o_tree_link:first-child{background-color:transparent}.o_tree .o_tree_link:last-child:hover,.o_tree .o_tree_link:last-child:focus{background-color:#f8f8f8}.o_tree .o_insertion_point>a>span{padding:5px;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.o_tree .o_insertion_source>a>span.o_tree_item,.o_tree .o_insertion_source>a>span.o_dnd_item{border-bottom:solid #f90 4px;background-color:#fefbf6}.o_tree ul{margin:0;padding:0;list-style-type:none}.o_tree ul li{margin:0;padding:0;white-space:nowrap}.o_tree ul li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_tree ul li div.popover{position:absolute;left:auto;right:0}.o_tree ul li div a.o_tree_oc_l0{position:absolute;top:10px;left:-4px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l0,.o_tree ul .o_tree_level_close.b_tree_oc_l0{z-index:10}.o_tree ul li div a.o_tree_oc_l1{position:absolute;top:10px;left:11px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l1,.o_tree ul .o_tree_level_close.b_tree_oc_l1{z-index:10}.o_tree ul li div a.o_tree_oc_l2{position:absolute;top:10px;left:26px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l2,.o_tree ul .o_tree_level_close.b_tree_oc_l2{z-index:10}.o_tree ul li div a.o_tree_oc_l3{position:absolute;top:10px;left:41px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l3,.o_tree ul .o_tree_level_close.b_tree_oc_l3{z-index:10}.o_tree ul li div a.o_tree_oc_l4{position:absolute;top:10px;left:56px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l4,.o_tree ul .o_tree_level_close.b_tree_oc_l4{z-index:10}.o_tree ul li div a.o_tree_oc_l5{position:absolute;top:10px;left:71px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l5,.o_tree ul .o_tree_level_close.b_tree_oc_l5{z-index:10}.o_tree ul li div a.o_tree_oc_l6{position:absolute;top:10px;left:86px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l6,.o_tree ul .o_tree_level_close.b_tree_oc_l6{z-index:10}.o_tree ul li div a.o_tree_oc_l7{position:absolute;top:10px;left:101px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l7,.o_tree ul .o_tree_level_close.b_tree_oc_l7{z-index:10}.o_tree ul li div a.o_tree_oc_l8{position:absolute;top:10px;left:116px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l8,.o_tree ul .o_tree_level_close.b_tree_oc_l8{z-index:10}.o_tree ul li div a.o_tree_oc_l9{position:absolute;top:10px;left:131px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l9,.o_tree ul .o_tree_level_close.b_tree_oc_l9{z-index:10}.o_tree ul li div a.o_tree_oc_l10{position:absolute;top:10px;left:146px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l10,.o_tree ul .o_tree_level_close.b_tree_oc_l10{z-index:10}.o_tree ul li div a.o_tree_oc_l11{position:absolute;top:10px;left:161px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l11,.o_tree ul .o_tree_level_close.b_tree_oc_l11{z-index:10}.o_tree ul li div span.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_tree ul li div span.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_tree ul li div span.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_tree ul li div span.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_tree ul li div span.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_tree ul li div span.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_tree ul li div span.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_tree ul li div span.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_tree ul li div span.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_tree ul li div span.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_tree ul li div span.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_tree ul li div span.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_tree ul span.o_tree_leaf{display:none}.o_tree ul span.o_tree_link>input[type=checkbox]{margin-right:5px}.o_tree ul li .badge{position:absolute;font-size:70%}.o_tree ul li .badge:before{content:none}.o_tree ul li .badge.o_badge_1{top:3px;right:1px}.o_tree ul li .badge.o_badge_2{bottom:3px;right:1px}.o_tree ul li .badge.o_badge_3{top:3px;right:25px}.o_tree ul li .badge.o_badge_4{bottom:3px;right:25px}.o_tree ul li div.o_dnd_sibling{margin:0;padding:0;border-bottom:none}.o_tree ul li .active.o_tree_link{background-color:none;font-weight:bold}.o_tree ul li .active.o_tree_link a{color:#337ab7}.o_tree ul li .active.o_tree_link:hover,.o_tree ul li .active.o_tree_link:focus{background-color:#eee}.o_tree ul li .active.o_tree_link:hover a,.o_tree ul li .active.o_tree_link:focus a{color:#23527c}.o_tree ul li .active_parent.o_tree_link{font-weight:bold}.o_tree ul li .active_parent.o_tree_link a{color:#777}.o_tree ul li .active_parent.o_tree_link a:hover,.o_tree ul li .active_parent.o_tree_link a:focus{color:#333}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l0{left:6px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l1{left:21px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l2{left:36px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l3{left:51px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l4{left:66px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l5{left:81px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l6{left:96px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l7{left:111px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l8{left:126px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l9{left:141px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l10{left:156px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l11{left:171px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l0{padding:10px 2px 10px 20px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l1{padding:10px 2px 10px 35px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l2{padding:10px 2px 10px 50px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l3{padding:10px 2px 10px 65px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l4{padding:10px 2px 10px 80px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l5{padding:10px 2px 10px 95px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l6{padding:10px 2px 10px 110px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l7{padding:10px 2px 10px 125px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l8{padding:10px 2px 10px 140px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l9{padding:10px 2px 10px 155px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l10{padding:10px 2px 10px 170px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l11{padding:10px 2px 10px 185px}.o_tree .o_dnd_item{cursor:move;z-index:100}.o_tree .o_dnd_proxy{opacity:0.4;filter:alpha(opacity=40);background-color:#f0ad4e;padding:5px 10px 5px 10px;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.o_tree .o_dnd_item.o_dnd_over{background-color:#ffff60}.o_tree .o_dnd_sibling{height:7px;width:100%}.o_tree .o_dnd_sibling.o_dnd_over{background:transparent url(../light/images/arrow_dd.png) top left no-repeat}.o_tree .o_dnd_l1{margin-left:0 !important}.o_tree .o_dnd_l2{margin-left:1em !important}.o_tree .o_dnd_l3{margin-left:2em !important}.o_tree .o_dnd_l4{margin-left:3em !important}.o_tree .o_dnd_l5{margin-left:4em !important}.o_tree .o_dnd_l6{margin-left:5em !important}.o_tree .o_dnd_l7{margin-left:6em !important}.o_tree .o_dnd_l8{margin-left:7em !important}.o_tree .o_dnd_l9{margin-left:8em !important}.o_tree .o_dnd_l10{margin-left:9em !important}.o_tree .o_dnd_l11{margin-left:10em !important}.o_tree.o_tree_insert_tool span.o_tree_link a{display:block}.o_offcanvas .o_tree{border:0}.o_selection_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_selection_tree ul{margin:0;padding:0;list-style-type:none}.o_selection_tree li{margin:0;padding:0;white-space:nowrap}.o_selection_tree li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_selection_tree li>div>span.o_tree_l0,.o_selection_tree li>div>div.checkbox.o_tree_l0,.o_selection_tree li>div>div.radio.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_selection_tree li>div>span.o_tree_l1,.o_selection_tree li>div>div.checkbox.o_tree_l1,.o_selection_tree li>div>div.radio.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_selection_tree li>div>span.o_tree_l2,.o_selection_tree li>div>div.checkbox.o_tree_l2,.o_selection_tree li>div>div.radio.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_selection_tree li>div>span.o_tree_l3,.o_selection_tree li>div>div.checkbox.o_tree_l3,.o_selection_tree li>div>div.radio.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_selection_tree li>div>span.o_tree_l4,.o_selection_tree li>div>div.checkbox.o_tree_l4,.o_selection_tree li>div>div.radio.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_selection_tree li>div>span.o_tree_l5,.o_selection_tree li>div>div.checkbox.o_tree_l5,.o_selection_tree li>div>div.radio.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_selection_tree li>div>span.o_tree_l6,.o_selection_tree li>div>div.checkbox.o_tree_l6,.o_selection_tree li>div>div.radio.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_selection_tree li>div>span.o_tree_l7,.o_selection_tree li>div>div.checkbox.o_tree_l7,.o_selection_tree li>div>div.radio.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_selection_tree li>div>span.o_tree_l8,.o_selection_tree li>div>div.checkbox.o_tree_l8,.o_selection_tree li>div>div.radio.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_selection_tree li>div>span.o_tree_l9,.o_selection_tree li>div>div.checkbox.o_tree_l9,.o_selection_tree li>div>div.radio.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_selection_tree li>div>span.o_tree_l10,.o_selection_tree li>div>div.checkbox.o_tree_l10,.o_selection_tree li>div>div.radio.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_selection_tree li>div>span.o_tree_l11,.o_selection_tree li>div>div.checkbox.o_tree_l11,.o_selection_tree li>div>div.radio.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_breadcrumb{position:relative}.o_breadcrumb .o_breadcrumb_close{float:right;position:relative;margin:0 0 0 15px;vertical-align:middle}.o_breadcrumb .o_breadcrumb_close a{line-height:15px;color:#d9534f}.o_breadcrumb .o_breadcrumb_close a:hover{color:#b52b27}.o_breadcrumb .o_breadcrumb_close a i{font-size:16px}.o_breadcrumb .o_breadcrumb_close a span{display:none}.o_breadcrumb .o_breadcrumb_close:before{content:none}.o_form .o_icon_mandatory{margin-right:0.25em}.o_form .o_form_chelp{padding-left:0.25em;margin-right:-1.25em}.o_form .o_form_example{font-size:90%}.o_form .o_error{margin-top:1px;margin-bottom:0;padding:10px}.o_form hr.o_spacer_noline{border-top:1px solid transparent}.o_form hr.o_spacer.form,.o_form hr.o_spacer_noline.form{margin-top:0px;margin-bottom:0px}.o_form .form-group.o_omit_margin{margin-bottom:0}.o_form .o_date{position:relative;padding-right:34px}.o_form .o_date.form-inline .form-group,.o_form .o_date.o_navbar-form .form-group{margin-left:0}.o_form input.o_date_ms{width:3em}.o_form .o_date.form-inline .o_date_ms.form-group,.o_form .o_date.o_navbar-form .o_date_ms.form-group{margin-left:25px}.o_form .has-feedback .o_date.form-inline .form-control.o_date_ms,.o_form .has-feedback .o_date.o_navbar-form .form-control.o_date_ms{padding-right:0}.o_form .o_form_element.form-inline .o_form_element.form-group,.o_form .o_form_element.o_navbar-form .o_form_element.form-group{margin-left:25px}.o_form .input-group.o_date_picker{width:16em}.o_form .o_filepreview{margin-bottom:10px}.o_form .o_fileinput{cursor:pointer;position:relative}.o_form .o_fileinput .o_fakechooser{position:relative;z-index:1}.o_form .o_fileinput .o_realchooser{position:absolute;top:0;right:0;z-index:2;opacity:0;filter:alpha(opacity=0)}.o_form .o_fileinput .o_realchooser.o_chooser_with_delete{right:38px}.o_centered_form{text-align:center}.o_centered_form fieldset.o_form{display:inline-block;text-align:left}.o_choice_checkrow,.o_choice_textrow{vertical-align:text-top;padding-bottom:2px}.o_choice_textrow{padding-left:1em}.o_togglecheck a{white-space:nowrap}.o_catalog .o_catalog_delete_img{position:relative;top:-0.5em}.o_button_dirty{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_button_dirty:hover,.o_button_dirty:focus,.o_button_dirty.focus,.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{background-image:none}.o_button_dirty.disabled,.o_button_dirty.disabled:hover,.o_button_dirty.disabled:focus,.o_button_dirty.disabled.focus,.o_button_dirty.disabled:active,.o_button_dirty.disabled.active,.o_button_dirty[disabled],.o_button_dirty[disabled]:hover,.o_button_dirty[disabled]:focus,.o_button_dirty[disabled].focus,.o_button_dirty[disabled]:active,.o_button_dirty[disabled].active,fieldset[disabled] .o_button_dirty,fieldset[disabled] .o_button_dirty:hover,fieldset[disabled] .o_button_dirty:focus,fieldset[disabled] .o_button_dirty.focus,fieldset[disabled] .o_button_dirty:active,fieldset[disabled] .o_button_dirty.active{background-color:#f0ad4e;border-color:#eea236}.o_button_dirty .badge{color:#f0ad4e;background-color:#fff}.o_button_toggle{border:1px solid #777;border-top-right-radius:9px;border-top-left-radius:9px;border-bottom-right-radius:9px;border-bottom-left-radius:9px;background:#eee;display:inline-block;height:18px;line-height:16px;font-size:16px;text-align:left;padding:0 0.5em 0 0;margin:0}.o_button_toggle i{color:#777;text-shadow:1px 0 2px rgba(0,0,0,0.25)}.o_button_toggle span{line-height:16px;vertical-align:top;font-size:60%;color:#777;text-transform:uppercase}.o_button_toggle.o_on{text-align:right;padding:0 0 0 0.5em}.o_button_toggle.o_on i{color:#337ab7;text-shadow:-1px 0 2px rgba(0,0,0,0.25)}.o_table_wrapper{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_table_wrapper.o_table_flexi .o_table_body{margin-top:20px}.o_table_wrapper.o_table_flexi .table{margin-top:20px}.o_table_wrapper.o_table_flexi .table td ul{margin:0}.o_table_wrapper.o_table_edit table tbody{border-top:solid #f90 4px;background-color:#fefbf6}.o_table_wrapper .o_table_search{max-width:50em}.o_table_wrapper .o_table_footer .o_table_pagination{text-align:center}.o_table_wrapper .o_table_rows_infos{float:left;padding-left:0;padding-right:20px;margin:20px 0}.o_table_wrapper .o_row_selected td{background-color:#dff0d8 !important}.o_table_wrapper .o_table{margin-bottom:0}.o_table_wrapper .o_marked{font-weight:bold}.o_table_wrapper .table{margin-bottom:0}.o_table_wrapper th{color:#333}@media (max-width: 767px){.o_table_wrapper .o_table_rows_infos{clear:both}}a.o_orderby,a.o_orderby:hover{color:#333;text-decoration:none}a.o_orderby.o_orderby_asc,a.o_orderby.o_orderby_desc,a.o_orderby:hover.o_orderby_asc,a.o_orderby:hover.o_orderby_desc{border-bottom:1px solid #ddd}.o_table_row_count{padding-top:6px;padding-bottom:6px;vertical-align:middle}.o_table_row_details td{background-color:white !important}.o_table_config{font-size:12px}.o_table_buttons{text-align:center}.o_table_buttons input{margin-right:1em}.o_table_buttons input:last-child{margin-right:0}.o_table_tools{margin-left:6px}.o_table_tools_indications{margin-left:10px;padding-top:3px;font-size:66%}.o_table_count{max-width:20em;float:left;padding:0 15px}.o_info .table-bordered td,o_note .table-bordered td,o_important .table-bordered td,o_warning .table-bordered td,o_error .table-bordered td{border-color:#333}.panel .o_table_layout{border-top:1px solid #ddd;padding-top:6px}.panel .o_table_count{padding:0 15px}#o_navbar_imclient .o_im_messages{float:left}#o_navbar_imclient #o_im_message,#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_summary{float:left;position:relative;padding:15px 3px}#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_message{padding-left:15px}#o_navbar_imclient #o_im_summary .badge{color:#fff;background-color:#777}#o_navbar_imclient #o_im_status li>a>span{display:inline}#o_navbar_imclient #o_im_status div.o_chelp_wrapper{right:0.5em}#o_navbar_imclient #o_im_message a:hover,#o_navbar_imclient #o_im_message a:focus{text-decoration:none}#o_navbar_imclient #o_im_message .o_icon_message{color:#d9534f}#o_navbar_imclient #o_im_message .o_icon_message:hover{color:#f4c37d}.o_im_load_history{margin-bottom:6px}.o_im_load_history .o_label{font-size:12px;padding-right:0.5em;line-height:1.5em;color:#777}.o_im_chat_history{height:170px;font-size:90%;border:1px solid #eee;margin:0 0 1em 0;overflow:scroll;overflow-x:auto}.o_im_message_group{padding:3px 3px 3px 40px;min-height:40px;position:relative;border-top:1px solid #eee;background:#fff}.o_im_message_group.o_odd{background:#F4F4F4}.o_im_message_group .o_portrait{position:absolute;top:3px;left:3px}.o_im_message_group .o_im_from{color:#777;font-size:12px;font-weight:bold}.o_im_message_group .o_im_from:hover{color:#5e5e5e}.o_im_message_group div.o_im_body{padding:3px 0 3px 0;font-size:12px}.o_im_message_group div.o_im_body .o_date{float:right;color:#777;font-size:9px}.o_groupchat_roster{font-size:12px}.o_groupchat_roster li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.o_groupchat_roster li.o_vip{color:#3c763d}.o_groupchat_roster li.o_anonymous{color:#31708f}.o_im_buddieslist .o_im_buddieslist_toggler .btn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_im_buddieslist ul{font-size:12px}.o_im_buddieslist ul ul{padding-left:1em}.o_im_buddieslist ul a{color:#337ab7}.o_im_buddieslist ul a:hover{color:#23527c}.o_flag{position:relative;top:1px;display:inline-block;line-height:1;width:16px;height:16px;background-repeat:no-repeat;background-position:0 100%}option.o_with_flag{padding-left:23px;min-height:16px;background-repeat:no-repeat;background-position:2px 50%}.o_flag_en{background-image:url("../light/images/flags/gb.png")}.o_flag_de{background-image:url("../light/images/flags/de.png")}.o_flag_fr{background-image:url("../light/images/flags/fr.png")}.o_flag_it{background-image:url("../light/images/flags/it.png")}.o_flag_es{background-image:url("../light/images/flags/es.png")}.o_flag_da{background-image:url("../light/images/flags/dk.png")}.o_flag_cs{background-image:url("../light/images/flags/cz.png")}.o_flag_el{background-image:url("../light/images/flags/gr.png")}.o_flag_ee{background-image:url("../light/images/flags/ee.png")}.o_flag_ru{background-image:url("../light/images/flags/ru.png")}.o_flag_pl{background-image:url("../light/images/flags/pl.png")}.o_flag_zh_CN{background-image:url("../light/images/flags/cn.png")}.o_flag_zh_TW{background-image:url("../light/images/flags/tw.png")}.o_flag_lt{background-image:url("../light/images/flags/lt.png")}.o_flag_fa{background-image:url("../light/images/flags/ir.png")}.o_flag_pt_PT{background-image:url("../light/images/flags/pt.png")}.o_flag_pt_BR{background-image:url("../light/images/flags/br.png")}.o_flag_tr{background-image:url("../light/images/flags/tr.png")}.o_flag_hu{background-image:url("../light/images/flags/hu.png")}.o_flag_sq{background-image:url("../light/images/flags/al.png")}.o_flag_in{background-image:url("../light/images/flags/id.png")}.o_flag_ar{background-image:url("../light/images/flags/eg.png")}.o_flag_rm{background-image:url("../light/images/flags/rm.png")}.o_flag_af{background-image:url("../light/images/flags/za.png")}.o_flag_vi{background-image:url("../light/images/flags/vn.png")}.o_flag_mn{background-image:url("../light/images/flags/mn.png")}.o_flag_iw{background-image:url("../light/images/flags/il.png")}.o_flag_ko{background-image:url("../light/images/flags/kr.png")}.o_flag_nl_NL{background-image:url("../light/images/flags/nl.png")}.o_flag_jp{background-image:url("../light/images/flags/jp.png")}.o_flag_nb_NO{background-image:url("../light/images/flags/no.png")}.o_flag_et_EE{background-image:url("../light/images/flags/ee.png")}.o_flag_bg{background-image:url("../light/images/flags/bg.png")}.o_flag_hi_IN_ASIA{background-image:url("../light/images/flags/in.png")}.o_flag_ar_LB{background-image:url("../light/images/flags/lb.png")}.o_flag_gl_ES{background-image:url("../light/images/flags/galicia.png")}.o_flag_sk{background-image:url("../light/images/flags/sk.png")}.o_rating .o_rating_title{font-size:12px}.o_rating .o_rating_items{white-space:nowrap}.o_rating .o_rating_items .o_icon{color:#f0ad4e}.o_rating .o_rating_items .o_icon:hover{color:#337ab7}.o_rating .o_rating_items .o_legend{margin-left:1em;font-size:12px;line-height:normal}.o_rating .o_rating_explanation{font-size:12px;color:#777}@media (max-width: 991px){.o_rating .o_rating_title,.o_rating .o_rating_explanation{display:none}}.o_comments .o_comment_wrapper .o_avatar{float:left;margin:0 1em 0 0}.o_comments .o_comment_wrapper .o_reply,.o_comments .o_comment_wrapper .o_delete{float:right}.o_comments .o_comment_wrapper .o_comment_wrapper{margin-left:16px}.o_ratings_and_comments .o_rating_wrapper{vertical-align:middle;display:inline-block}.o_ratings_and_comments a.o_comments{margin-left:10px;position:relative;top:0.1em}.d3chart .bar{shape-rendering:crispEdges}.d3chart .bar_default_light{fill:#64a0d3}.d3chart .bar_default{fill:#337ab7}.d3chart .bar_default_dark{fill:#23527c}.d3chart .axis{font:12px sans-serif}.d3chart .axis path,.d3chart .axis line{fill:none;stroke:#000;shape-rendering:crispEdges}.o_forum_peekview .o_quote_wrapper,.o_forum_peekview .b_quote_wrapper{display:none}.o_forum_thread_sticky{font-weight:bold}.o_forum_switch{font-size:12px}.o_forum_toolbar{margin-bottom:6px;float:left}.o_forum_fulltextsearch{float:right}@media (max-width: 767px){.o_forum_fulltextsearch{float:left}}.o_forum .o_mark,.o_forum .o_ep_collect{float:right;position:relative;width:2em;margin-left:12px}.o_forum .o_portrait{float:left;margin-right:16px}.o_forum .o_portrait_avatar{width:70px;height:70px}.o_forum .o_newindicator{font-size:10px;color:#5cb85c;text-transform:uppercase;padding-left:1em;vertical-align:text-top;white-space:nowrap}.o_forum .o_author,.o_forum .o_date{display:inline-block;color:#777}.o_forum .o_date{font-size:12px}.o_forum .o_modified{color:#8a6d3b;font-size:12px;font-style:italic}.o_forum .o_forum_message{margin-bottom:20px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_forum .o_forum_message_new{-webkit-box-shadow:0 1px 10px rgba(92,184,92,0.3);box-shadow:0 1px 10px rgba(92,184,92,0.3)}.o_forum .o_forum_message_highlight{-webkit-box-shadow:0 1px 10px rgba(240,173,78,0.5);box-shadow:0 1px 10px rgba(240,173,78,0.5)}.o_forum .o_forum_message_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:3px;border-top-left-radius:3px}.o_forum .o_forum_message_title{margin-top:0}.o_forum .o_forum_message_body{padding:10px 15px}.o_forum .o_forum_message_attachments{border-top:1px solid #ddd;padding:10px 15px;font-size:12px;background-color:#f7f7f9}.o_forum .o_attachment{position:relative;max-width:250px;vertical-align:top;margin:6px 12px 10px 0}.o_forum .o_attachment img{margin-top:6px}.o_forum .o_filename{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_forum .o_icon_enlarge{position:absolute;left:1em;bottom:1em;text-shadow:1px 1px 2px #fff, -1px 1px 2px #fff, 1px -1px 2px #fff, -1px -1px 2px #fff}@media (min-width: 768px) and (max-width: 991px){.o_forum .o_attachments{font-size:10px}.o_forum .o_attachment{max-width:200px}.o_forum .o_attachment img{max-width:150px}.o_forum .o_filename{max-width:200px}}@media (max-width: 767px){.o_forum .o_attachments{font-size:9px}.o_forum .o_attachment{max-width:150px}.o_forum .o_attachment img{max-width:100px}.o_forum .o_filename{max-width:150px}}.o_quote_wrapper,.b_quote_wrapper{position:relative;margin:10px 0}.o_quote_author,.b_quote_author{color:#777;font-size:12px}.o_quote_author:before,.b_quote_author:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"";font-size:21px;padding-right:0.5em}blockquote.o_quote,blockquote.b_quote{color:#555;font-size:12px;margin-top:6px;padding:0 12px}a.o_chelp{display:inline-block;padding:1px 3px;text-align:center;vertical-align:middle;white-space:nowrap;font-size:10px;font-weight:normal;line-height:15px;color:#fff;background-color:#337ab7;border:1px solid #2e6da4;border-radius:2px;cursor:help;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a.o_chelp:active,a.o_chelp:hover,a.o_chelp:focus{text-decoration:none;color:#fff;background-color:#2a6598;border-color:#204d74}a.o_chelp i{font-size:10px !important}.o_chelp_wrapper{position:relative;float:right;display:inline-block;line-height:normal;margin-bottom:10px;margin-left:10px}.o_form_chelp,.o_chelp_tooltip{color:#737373}.o_iframedisplay iframe{width:100%}.o_singlepage .o_edit{position:absolute;top:10px;right:37px}.o_content_popup{position:absolute;top:10px;right:12px}.o_module_cp_wrapper .o_tools{position:absolute;top:10px;right:12px;text-align:right;vertical-align:middle}.o_module_cp_wrapper .o_tools .o_search_wrapper{display:inline-block;position:relative;top:-2px}ul.o_dropdown{margin:-5px -14px}ul.o_dropdown .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}ul.o_dropdown>li>a{display:block;padding:5px 14px;clear:both;font-weight:normal;line-height:1.42857;color:#333;background:#fff;white-space:nowrap}ul.o_dropdown>li>a:hover,ul.o_dropdown>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.badge.o_scorm_completed{background-color:#3c763d}.badge.o_scorm_failed{background-color:#a94442}.badge.o_scorm_incomplete{background-color:#8a6d3b}.badge.o_scorm_not_attempted{background:none}.o_bc_meta h5,.o_bc_meta .o_author,.o_bc_meta .o_comment,.tooltip h5,.tooltip .o_author,.tooltip .o_comment{color:#fff;margin:5px 0}.o_bc_meta .o_thumbnail,.tooltip .o_thumbnail{width:200px;height:200px;background-color:#fff;margin:0 -5px}.o_htmleditor .o_metadata{border:1px solid #999;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom:0;background:#eee;position:relative;top:1px;padding:5px}.o_htmleditor .o_metadata #o_filename{float:left}.o_htmleditor .o_metadata .o_lastmodified{float:right;color:#777;line-height:1.42857}.o_htmleditor #o_save{margin-top:10px;text-align:center}.o_htmleditor #o_save input{margin-right:1em}.o_htmleditor #o_save input:last-child{margin-right:0}.o_notifications_news_wrapper .o_notifications_news_subscription{margin:10px 0}.o_notifications_news_wrapper .o_notifications_news_subscription h4 i,.o_notifications_news_wrapper .o_notifications_news_subscription .o_cal .fc-header-title h2 i,.o_cal .fc-header-title .o_notifications_news_wrapper .o_notifications_news_subscription h2 i{display:none}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_context{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content{margin-left:1.5em;position:relative}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_icon{position:absolute;left:-1.5em;line-height:1.5em;top:0}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_date{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_url{margin-left:1.5em}.o_noti{margin:6px 0 6px 12px;float:right;color:#777}.o_noti .o_label{color:#777;cursor:help}@media (max-width: 767px){.o_noti .o_label span{display:none}}.panel-body .o_noti{margin:0}.o_portrait{display:inline-block}.o_portrait img{border-radius:50%;border:none;background-color:#eee;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.o_portrait_name{margin-top:6px}.o_block_inline .o_portait,.o_block_inline .o_portrait_name,.o_block_inline .o_portrait_image,.o_block_inline_right .o_portait,.o_block_inline_right .o_portrait_name,.o_block_inline_right .o_portrait_image,.o_block_inline_left .o_portait,.o_block_inline_left .o_portrait_name,.o_block_inline_left .o_portrait_image,.o_block_inline_both .o_portait,.o_block_inline_both .o_portrait_name,.o_block_inline_both .o_portrait_image{display:inline-block}.o_portrait_avatar,.o_portrait_dummy,.o_portrait_dummy_female_big,.o_portrait_dummy_male_big,.o_portrait_anonymous{width:100px;height:100px}.o_portrait_dummy{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_dummy_female_big{background-image:url("../light/images/portrait/dummy_female_big.png")}.o_portrait_dummy_male_big{background-image:url("../light/images/portrait/dummy_male_big.png")}.o_portrait_anonymous{background-image:url("../light/images/portrait/anonymous.png")}.o_portrait_avatar_small,.o_portrait_dummy_small,.o_portrait_dummy_female_small,.o_portrait_dummy_male_small,.o_portrait_anonymous_small{width:30px;height:30px}.o_portrait_dummy_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_portrait_dummy_female_small{background-image:url("../light/images/portrait/dummy_female_small.png")}.o_portrait_dummy_male_small{background-image:url("../light/images/portrait/dummy_male_small.png")}.o_portrait_anonymous_small{background-image:url("../light/images/portrait/anonymous_small.png")}.o_datecomp{position:relative;width:40px;height:52px;border:1px solid #555;margin-right:12px;text-align:center;vertical-align:middle}.o_datecomp div.o_year{position:absolute;left:0;width:100%;top:-20px;height:20px;line-height:20px;font-size:10px}.o_datecomp div.o_month{height:20px;line-height:20px;font-size:12px;background-color:#337ab7;color:#fff}.o_datecomp div.o_day{height:30px;line-height:30px;font-size:18px;border-top:1px solid #555;background-color:#fff;color:#333}.o_block_with_datecomp .o_head{position:relative;padding-left:52px}.o_block_with_datecomp .o_datecomp{position:absolute;top:0.2em;left:0}.o_block_with_datecomp .o_title{margin-top:0}.o_block_with_datecomp .o_meta{color:#777}.o_block_with_datecomp .o_content{border-left:5px solid #eee;padding:0 20px}.o_block_with_datecomp .o_block_footer{padding-left:25px}ul.o_certificates li{padding:5px 0}ul.o_certificates li a.o_sel_certificate_delete{padding-left:2em}.o_cal_toptoolbar{margin-bottom:6px}.o_cal_toptoolbar .o_cal_toptoolbar_help{float:left;margin-right:12px}.o_feed .o_date,.o_feed .o_author{color:#777}.o_feed .o_subscription a{margin-right:1.5em}.o_feed .o_subscription .form-group{margin-bottom:5px}.o_feed .o_subscription .form-control{border:0;background:none;padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper{float:left}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_title,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_explanation,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_legend{display:none}.o_feed .o_blog_posts .o_ratings_and_comments a.o_comments span{display:none}.o_feed .o_content:before,.o_feed .o_content:after{content:" ";display:table}.o_feed .o_content:after{clear:both}.o_glossary .o_register{text-align:center}.o_glossary .o_meta{font-size:90%;color:#777;font-style:italic}.o_glossary dl dt:first-letter{font-size:21px}.o_glossary dl dt small{color:#777}.o_tm_glossary{border-bottom:1px dotted #666699 !important}.o_tm_yellow{background-color:#FFFF66}.o_tm_blue{background-color:#33FFFF}.o_tm_red{background-color:#FF3333}.o_tm_green{background-color:#99FF00}.vitero_iframe{width:100%;height:100%;border:none;min-height:60em}.o_reminder_rule{padding:5px 0}.o_segments.btn-group a span{overflow:hidden;display:block;text-overflow:ellipsis}.o_segments_content{margin-top:20px}.o_tabbed_pane .o_tabbed_pane_content{padding:20px 0 6px 0}.o_togglebox_wrapper .o_opener{position:relative;left:-0.5em}.o_togglebox_wrapper div.o_togglebox_content{position:relative;margin:0}.o_togglebox_wrapper div.o_togglebox_content .o_hide{position:absolute;bottom:0.5em;right:1em}.o_toolboxes ul{margin:0 0 1.5em 0;padding:0 0 0 1.5em}.o_qrcode{width:256px;height:256px}#o_ajax_busy{position:absolute;left:50%;top:20em;margin-left:-2.5em;height:5em;width:5em;color:#fff;z-index:1201;display:none}#o_body.o_ajax_busy{cursor:busy}.o_exception .o_visual{position:relative;background-image:url("../light/images/lion-500x333.jpg");filter:grayscale(50%);-webkit-filter:grayscale(50%);-moz-filter:grayscale(50%);-ms-filter:grayscale(50%);-o-filter:grayscale(50%);width:500px;height:333px;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;margin:0 0 10px 16px}@media (min-width: 768px) and (max-width: 991px){.o_exception .o_visual{width:375px;height:249px}}@media (min-width: 500px) and (max-width: 767px){.o_exception .o_visual{width:250px;height:166px}}@media (max-width: 500px){.o_exception .o_visual{background-size:cover}}.o_exception .jumbotron h1,.o_exception .o_repo_details .o_lead h1,.o_repo_details .o_exception .o_lead h1{color:#d9534f}.tt-input{width:400px}.tt-dropdown-menu{width:400px;margin-top:6px;padding:0 0 0;color:#555;background-color:#fff;border:1px solid #66afe9;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;-webkit-box-shadow:0 0 8px rgba(102,175,233,0.6);box-shadow:0 0 8px rgba(102,175,233,0.6)}.tt-suggestion{padding:6px 12px;font-size:14px;line-height:1.42857}.tt-suggestion.tt-cursor{color:#fff;background-color:#337ab7}.tt-suggestion p{margin:0}.o_search_link_extended,.o_search_link_simple{margin-top:12px;display:inline-block}.o_search_results_stats{color:#777;padding-left:1.5em}.o_search_highlight{margin-left:12px;font-size:12px}.o_search_result_title h4,.o_search_result_title .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_search_result_title h2{display:inline-block;margin-right:12px;margin-bottom:6px}.o_search_result_highlight{font-weight:bold}.o_search_result_context{color:#3c763d}.o_search_result_excerpt{color:#555}.o_search_result_details .o_togglebox_wrapper.o_block{margin-top:0;margin-bottom:0}.o_search_result_details .o_togglebox_wrapper .o_togglebox_content{color:#777;font-size:12px;background:#fff;padding:6px 12px}@media (max-width: 767px){.o_search_result_details{display:none}}.wizard{border:1px solid #d4d4d4;border-radius:2px;background-color:#f9f9f9;position:relative;overflow:hidden;margin-bottom:15px}.wizard ul{list-style:none outside none;padding:0;margin:0;width:4000px}.wizard ul li{float:left;margin:0;padding:0 20px 0 30px;height:46px;line-height:46px;position:relative;background:#ededed;color:#333;font-size:16px;cursor:default}.wizard ul li .chevron{border:24px solid transparent;border-left:14px solid #d4d4d4;border-right:0;display:block;position:absolute;right:-14px;top:0;z-index:1}.wizard ul li .chevron:before{border:24px solid transparent;border-left:14px solid #ededed;border-right:0;content:"";display:block;position:absolute;right:1px;top:-24px}.wizard ul li.active{background:#f1f6fc;color:#333}.wizard ul li.active .chevron:before{border-left:14px solid #f1f6fc}.wizard ul li .badge{margin-right:8px}.wizard ul li:first-child{border-radius:4px 0 0 4px;padding-left:20px}.o_process{position:relative;padding-left:25px}.o_process .o_step{position:relative;height:auto;padding-top:10px;padding-left:30px;padding-bottom:10px}.o_process .o_bar{position:absolute;top:10px;left:8px;height:100%;border-left:4px solid #777}.o_process .o_bar:after{position:absolute;top:0;left:-10px;height:16px;width:16px;border:4px solid #777;border-radius:16px;background:#fff;content:" "}.o_process .o_title{margin-top:-1px;color:#777 !important}.o_process .o_title:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);position:absolute;left:-24px}.o_process .o_title a:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);content:"";width:1em}.o_process .o_title a.collapsed:before{content:""}.o_process .o_step.o_active .o_bar,.o_process .o_step.o_active .o_bar:after{border-color:#337ab7}.o_process .o_step.o_active .o_title{color:#337ab7 !important}.o_process .o_step.o_active .o_title:before{content:"";color:#337ab7}.o_process .o_step.o_done .o_bar,.o_process .o_step.o_done .o_bar:after{border-color:#5094ce}.o_process .o_step.o_done .o_title{color:#5094ce !important}.o_process .o_step.o_done .o_title:before{content:"";color:#5cb85c}.o_process .o_meta{color:#777;font-size:12px;margin-top:-0.5em}.o_cal_orange{background:#ffc266;border-color:#ff9900;color:#5D5D5D}.o_cal_orange .o_cal_wv_event_header{background:#ff9900}.o_cal_orange a{color:#5D5D5D !important}.o_cal_green{background:#66c266;border-color:#009900;color:#FFF}.o_cal_green .o_cal_wv_event_header{background:#009900}.o_cal_green a{color:#FFF !important}.o_cal_blue{background:#4d6e9f;border-color:#2e5894;color:#FFF}.o_cal_blue .o_cal_wv_event_header{background:#2e5894}.o_cal_blue a{color:#FFF !important}.o_cal_yellow{background:#ffe066;border-color:#ffcc00;color:#5D5D5D}.o_cal_yellow .o_cal_wv_event_header{background:#ffcc00}.o_cal_yellow a{color:#5D5D5D !important}.o_cal_red{background:#c26666;border-color:#990000;color:#FFF}.o_cal_red .o_cal_wv_event_header{background:#990000}.o_cal_red a{color:#FFF !important}.o_cal_rebeccapurple{background:#663399;border-color:#663399;color:#FFF}.o_cal_rebeccapurple .o_cal_wv_event_header{background:#663399}.o_cal_rebeccapurple a{color:#FFF !important}.o_cal_grey{background:#DDDAAA;border-color:#5D5D5D;color:#FFF}.o_cal_grey .o_cal_wv_event_header{background:#5D5D5D}.o_cal_grey a{color:#FFF !important}.o_sel_calendar_print_chooser{padding-right:4em}.o_cal_config_enabled,.o_cal_config_disabled{position:relative;float:left;display:inline}.o_cal_config_calendar{margin:0 5px;padding:1px 6px 1px 4px;position:relative;width:200px;overflow:hidden;float:left;display:inline}.o_cal_config_color{display:block;width:16px;height:16px;border-radius:8px}.o_cal_colorchooser_selected:before{content:""}#o_cal_colorchooser div{border:1px solid #337ab7;margin:5px;display:inline-block}#o_cal_colorchooser div:hover{border:1px solid #333}#o_cal_colorchooser a{width:20px;height:20px;display:inline-block}.fc-button{color:#333;background-color:#fff;border-color:#ccc}.fc-button:hover,.fc-button:focus,.fc-button.focus,.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{background-image:none}.fc-button.disabled,.fc-button.disabled:hover,.fc-button.disabled:focus,.fc-button.disabled.focus,.fc-button.disabled:active,.fc-button.disabled.active,.fc-button[disabled],.fc-button[disabled]:hover,.fc-button[disabled]:focus,.fc-button[disabled].focus,.fc-button[disabled]:active,.fc-button[disabled].active,fieldset[disabled] .fc-button,fieldset[disabled] .fc-button:hover,fieldset[disabled] .fc-button:focus,fieldset[disabled] .fc-button.focus,fieldset[disabled] .fc-button:active,fieldset[disabled] .fc-button.active{background-color:#fff;border-color:#ccc}.fc-button .badge{color:#fff;background-color:#333}.fc-button.fc-state-default{text-shadow:none}.fc-button.fc-state-active{color:#fff;background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active:hover,.fc-button.fc-state-active:focus,.fc-button.fc-state-active.focus,.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{background-image:none}.fc-button.fc-state-active.disabled,.fc-button.fc-state-active.disabled:hover,.fc-button.fc-state-active.disabled:focus,.fc-button.fc-state-active.disabled.focus,.fc-button.fc-state-active.disabled:active,.fc-button.fc-state-active.disabled.active,.fc-button.fc-state-active[disabled],.fc-button.fc-state-active[disabled]:hover,.fc-button.fc-state-active[disabled]:focus,.fc-button.fc-state-active[disabled].focus,.fc-button.fc-state-active[disabled]:active,.fc-button.fc-state-active[disabled].active,fieldset[disabled] .fc-button.fc-state-active,fieldset[disabled] .fc-button.fc-state-active:hover,fieldset[disabled] .fc-button.fc-state-active:focus,fieldset[disabled] .fc-button.fc-state-active.focus,fieldset[disabled] .fc-button.fc-state-active:active,fieldset[disabled] .fc-button.fc-state-active.active{background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active .badge{color:#337ab7;background-color:#fff}.o_visual{position:absolute;top:0;left:0;overflow:hidden;height:120px;width:180px;vertical-align:middle}@media (min-width: 768px) and (max-width: 991px){.o_visual{height:80px;width:120px}}@media (max-width: 767px){.o_visual{height:50px;width:75px}}.o_visual img{width:100%;height:auto}.o_visual .o_visual_not_available{width:100%;height:100%;background-image:url("../light/images/no_preview.png");background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.o_coursetable.o_rendertype_custom .o_table_row{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_coursetable.o_rendertype_custom .o_table_row .o_visual{border-right:1px solid #337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_access{position:absolute;top:0;right:0;height:120px;width:180px;overflow:hidden;border-left:1px solid #337ab7;padding-top:0.25em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{padding:0 1em;height:20px;line-height:20px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{position:relative;left:2px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score .o_label{color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social{position:absolute;width:100%;bottom:32px;height:20px;padding-left:1em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_title,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating o_rating_legend,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_explanation{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings{padding:0 0 0 1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label{margin-bottom:1em;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_methods{color:#5bc0de}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{position:absolute;display:block;bottom:0;width:90px;height:30px;line-height:30px;text-align:center}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{right:0}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start{color:#fff;background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start .badge{color:#337ab7;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book .badge{color:#f0ad4e;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:90px;color:#fff;background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details .badge{color:#5cb85c;background-color:#fff}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{height:80px;width:120px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_comments,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_label{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{width:60px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:60px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:120px;margin:0 180px 0 180px;position:relative;padding:1em 0.5em 0.25em 1em;overflow:hidden}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{margin:0;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{display:block;color:#337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover{color:#286090}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author{margin-top:0.5em;line-height:normal;font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle{position:absolute;top:5px;right:40px;font-size:90%;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active{color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active:hover{color:#2b542c}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{margin-top:0.5em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark{position:absolute;top:-1px;right:15px}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:80px;margin:0 120px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:50px;margin:0 0 0 75px;padding:0 0 0 1em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{line-height:50px}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{border-right:37px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_go_xs{position:absolute;top:0;right:0;padding:0 1em;height:50px;width:37px;line-height:50px;color:#fff;background-color:#337ab7}.o_coursetable.o_rendertype_classic .o_rating_explanation{display:none}.o_coursetable.o_rendertype_classic .o_start,.o_coursetable.o_rendertype_classic .o_book{white-space:nowrap}.o_coursetable.o_rendertype_classic .o_repoentry_type{color:#555}.o_coursetable.o_rendertype_classic .o_repoentry_ac{color:#555}.o_catalog .o_level{position:relative;margin-bottom:10px;padding:0;border-top:1px solid #337ab7;border-bottom:1px solid #337ab7}.o_catalog .o_level .o_visual{height:180px}.o_catalog .o_level .o_meta{position:relative;min-height:180px;height:180px;overflow:hidden;margin:0 0 0 180px;padding:1em 0.5em 0.5em 2em}.o_catalog .o_level .o_meta .o_title{margin:0}.o_catalog .o_level .o_meta .o_title a{display:block;color:#337ab7}.o_catalog .o_level .o_meta .o_title a:hover{color:#286090}.o_catalog .o_level .o_meta .o_desc{padding:1em 0 0.5em 0}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_level .o_visual{height:120px}.o_catalog .o_level .o_meta{min-height:120px;height:120px;margin:0 0 0 120px}}@media (max-width: 767px){.o_catalog .o_level .o_visual{height:75px}.o_catalog .o_level .o_meta{min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em}.o_catalog .o_level .o_meta .o_title{line-height:75px}.o_catalog .o_level .o_meta .o_desc{display:none}}.o_catalog .o_sublevels_list .o_sublevel{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_catalog .o_sublevels_list .o_sublevel .o_visual{height:75px;width:75px}.o_catalog .o_sublevels_list .o_sublevel .o_title{margin:0}.o_catalog .o_sublevels_list .o_sublevel .o_meta{border-left:1px solid #337ab7;min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em;overflow:hidden}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_title{line-height:75px}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_desc{display:none}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a{font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a>i,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a>i,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a>i{display:none}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels{border:1px solid transparent}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels .o_meta{border-left:1px solid transparent}.o_catalog .o_sublevels{position:relative;margin-bottom:20px}.o_catalog .o_sublevels:before,.o_catalog .o_sublevels:after{content:" ";display:table}.o_catalog .o_sublevels:after{clear:both}.o_catalog .o_sublevels .o_sublevel{position:relative;float:left;margin:0 20px 20px 0;width:180px}.o_catalog .o_sublevels .o_sublevel:last-child{margin-right:0}.o_catalog .o_sublevels .o_sublevel .o_visual{border:1px solid #337ab7;position:relative;height:180px}.o_catalog .o_sublevels .o_sublevel .o_meta{position:absolute;left:0;bottom:0;width:100%;border:1px solid #337ab7;border-top:0;background-color:rgba(255,255,255,0.8)}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title{margin:0;text-align:center;line-height:2em;height:2em;width:100%;overflow:hidden}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a{display:block;color:#337ab7;font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover{color:#286090}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a>i{display:none}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 10px 10px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (max-width: 767px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 1px 1px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px;width:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (min-width: 768px){.o_catalog .o_sublevels_list,.o_catalog .o_sublevels_compact{-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2;columns:2}}.o_repo_details{position:relative}.o_repo_details .o_lead{margin-bottom:10px}.o_repo_details .o_lead .o_author{margin-top:0.5em;margin-bottom:1em;font-size:120%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_repo_details .o_lead .o_media{float:right;margin-left:2em;margin-bottom:2em}.o_repo_details .o_lead .o_media.o_desc_empty{float:none;margin-left:0;margin-bottom:0}.o_repo_details .o_lead h1 i{display:none}.o_repo_details .o_overview i{margin-right:0.5em}.o_repo_details .o_overview div{margin-bottom:0.25em}.o_repo_details .o_start,.o_repo_details .o_book{margin:2em 0}.o_repo_details .o_social:before,.o_repo_details .o_social:after{content:" ";display:table}.o_repo_details .o_social:after{clear:both}.o_repo_details .o_social .o_rating_wrapper{float:left}.o_repo_details .o_social .o_comments{margin-left:1em}@media (max-width: 767px){.o_repo_details .o_lead p{font-size:16px}.o_repo_details .o_lead .o_media{margin-left:0;float:none;text-align:center}}@media (max-width: 613px){.o_repo_details .o_subcolumn{width:100%}}.o_meta .o_closed{padding:2px 5px;margin:5px 0}.o_overview .o_closed{padding:12px 15px;margin:15px 0}.o_ac_configuration span.o_ac_infos{font-weight:normal;color:grey}.badge.o_midpub{background-color:#3c763d}.badge.o_midwarn{background-color:#8a6d3b}.badge.o_midlock{background-color:#31708f}.badge.o_miderr{background-color:#a94442}.badge.o_middel{background-color:#777}.o_course_editor_legend .badge{font-size:80%}.o_course_editor_legend .badge:before{content:none}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#66512c}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#777}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #777}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#777}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_course_run.o_titled_wrapper>h2 i{display:none}.o_tree.o_course_menu div.o_tree_l0>a:first-child{background-color:none}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_ll_container h5{margin-bottom:5px}.o_ll_container h5 a.o_desc{color:#337ab7}.o_ll_container h5 a.o_desc small{display:none}.o_ll_container h5 a.o_desc:hover{color:#286090;text-decoration:none}.o_ll_container h5 a.o_desc:hover small{color:#5e5e5e;display:inline}.o_ll_container div.o_comment{color:#777}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:10px}.o_cmembers .o_cmember .o_portrait img{width:50px;height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}td.o_qti_item_kprim_input .radio,th.o_qti_item_kprim_input .radio{display:inline}div.o_qti_menu_section,div.o_qti_menu_section_clickable,div.o_qti_menu_section_active{margin-top:10px}div.o_qti_menu_item a,div.o_qti_menu_section a{text-decoration:none}div.o_qti_menu_item{padding:.1em}div.o_qti_menu_item_active{padding:.1em;font-weight:bold}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}div.o_qti_item_choice_option_flow{display:inline-block;padding:.5em;border:1px solid transparent}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}div.o_qti_metadatas .panel-body{border-top:none}.o_qti_menu_item_attempts:after,.o_qti_menu_item_attempts_marked:after{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_qti_menu_item_attempts:after{content:""}.o_qti_menu_item_attempts_marked:after{content:"";color:#337ab7}.onyx_iframe{width:100%;height:100%;border:none;min-height:60em}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:""}.o_ep_icon_collection:before{content:""}.o_ep_icon_page:before{content:""}.o_ep_icon_struct:before{content:""}.o_ep_icon_liveblog:before{content:""}.o_artefact_closed:before{content:""}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.o_eportfolio_page .o_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif;box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.panel-footer .o_ep_options{display:inline-block}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #efefef, #fafafa);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_map-epmst-green{background-color:#ECF69A;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_map-epmst-green2{background:#99E44D;background:#99E44D -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99E44D), to(#CBF1A5));background:#99E44D -moz-linear-gradient(43% 71% 101deg, #CBF1A5, #99E44D);background:#99E44D -o-linear-gradient(#99E44D, #CBF1A5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99E44D', EndColorStr='#CBF1A5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_map-epmst-green3{background:#DFF0C1;background:#DFF0C1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DFF0C1), to(#A0D346));background:#DFF0C1 -moz-linear-gradient(43% 71% 101deg, #A0D346, #DFF0C1);background:#DFF0C1 -o-linear-gradient(#DFF0C1, #A0D346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DFF0C1', EndColorStr='#A0D346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_map-epmst-green4{background-color:#D7DBB5;border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_map-epmst-red{background:#FFBA71;background:#FFBA71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFBA71), to(#FFBA99));background:#FFBA71 -moz-linear-gradient(43% 71% 101deg, #FFBA99, #FFBA71);background:#FFBA71 -o-linear-gradient(#FFBA71, #FFBA99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFBA71', EndColorStr='#FFBA99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_map-epmst-red2{background:#FF9772;background:#FF9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FF9772), to(#FF9780));background:#FF9772 -moz-linear-gradient(43% 71% 101deg, #FF9780, #FF9772);background:#FF9772 -o-linear-gradient(#FF9772, #FF9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FF9772', EndColorStr='#FF9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_map-epmst-red3{background:#E8AFBB;background:#E8AFBB -webkit-gradient(linear, 37% 20%, 53% 100%, from(#E8AFBB), to(#E8AFA0));background:#E8AFBB -moz-linear-gradient(43% 71% 101deg, #E8AFA0, #E8AFBB);background:#E8AFBB -o-linear-gradient(#E8AFBB, #E8AFA0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#E8AFBB', EndColorStr='#E8AFA0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_map-epmst-red4{background:#FFA800;background:#FFA800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFA800), to(#FFAF00));background:#FFA800 -moz-linear-gradient(43% 71% 101deg, #FFAF00, #FFA800);background:#FFA800 -o-linear-gradient(#FFA800, #FFAF00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFA800', EndColorStr='#FFAF00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_map-epmst-blue{background:#00D2F8;background:#00D2F8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00D2F8), to(#4A9EAD));background:#00D2F8 -moz-linear-gradient(43% 71% 101deg, #4A9EAD, #00D2F8);background:#00D2F8 -o-linear-gradient(#00D2F8, #4A9EAD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00D2F8', EndColorStr='#4A9EAD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_map-epmst-blue2{background-color:#C4F6FF;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_map-epmst-blue3{background-color:#B3E2F7;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_map-epmst-blue4{background:#DEE7F7;background:#DEE7F7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DEE7F7), to(#C1E9FD));background:#DEE7F7 -moz-linear-gradient(43% 71% 101deg, #C1E9FD, #DEE7F7);background:#DEE7F7 -o-linear-gradient(#DEE7F7, #C1E9FD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DEE7F7', EndColorStr='#C1E9FD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_userbulk_changedcell{font-style:italic;font-weight:bold}body.o_dmz{background:transparent}body.o_dmz #o_bg{position:absolute;top:0;left:0;width:100%;height:100%;border-top:50px solid transparent;border-bottom:70px solid transparent;background:url("../light/images/learn-bg.jpg");background-size:cover;background-position:center center;background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=1 )}body.o_dmz #o_bg:after{content:" ";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(to right, rgba(255,255,255,0.1) 0.2%, rgba(255,255,255,0.6) 60%, rgba(255,255,255,0.8) 100%);background-size:cover;background-position:center center;background-repeat:no-repeat}body.o_dmz #o_toplink{display:none}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-bottom:20px;padding-left:10%;padding-right:10%;text-align:right}.o_login .o_login_intro{padding-left:10%}.o_login .o_login_intro h1{margin-bottom:40px;color:#337ab7}.o_login .o_login_intro .lead{color:#333}.o_login .o_login_intro .lead h1,.o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h3,.o_login .o_login_intro .lead h4,.o_login .o_login_intro .lead .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h5{margin-bottom:20px;color:#337ab7}.o_login .o_login_messages,.o_login .o_login_box{display:inline-block;width:400px;text-align:left}.o_login .o_login_messages .o_infomessage_wrapper{background:rgba(255,255,255,0.5);border:1px solid transparent;border-radius:4px;padding:6px 12px}.o_login .o_login_messages .o_infomessage_wrapper .o_info,.o_login .o_login_messages .o_infomessage_wrapper .o_warning,.o_login .o_login_messages .o_infomessage_wrapper .o_note{margin:0}.o_login .o_login_box{padding-top:10px}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_providers .o_icon_provider_olat{font-size:1em}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_form .o_form .o_desc{margin:0 0 30px 0;padding:0;border-left:0;background-color:transparent}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register.focus,.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled.focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled].focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register.focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}.o_login .o_login_social{position:relative;padding:10px 12px}.o_login .o_login_social li{padding:10px 12px}.o_login .o_login_social li>a{display:block;line-height:2em;text-align:center;font-size:18px;border-radius:4px;padding:10px 12px}.o_login .o_login_social .btn-default.o_sel_auth_facebook{color:#fff;background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{color:#fff;background-color:#37538d;border-color:#2d4374}.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled],.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.active{background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook .badge{color:#4568b2;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_twitter{color:#fff;background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{color:#fff;background-color:#00b4f8;border-color:#009ad4}.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled],.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.active{background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter .badge{color:#2cc5ff;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_google{color:#fff;background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google:hover,.o_login .o_login_social .btn-default.o_sel_auth_google:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.focus,.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{color:#fff;background-color:#d83825;border-color:#ba3120}.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_google.disabled,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled],.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.active{background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google .badge{color:#e15f4f;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_linkedin{color:#fff;background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{color:#fff;background-color:#015e8a;border-color:#014667}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled],.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.active{background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin .badge{color:#0181bd;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_adfs{color:#fff;background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{color:#fff;background-color:#010101;border-color:#000}.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled],.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.active{background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs .badge{color:#1a1a1a;background-color:#fff}@media (max-width: 767px){body.o_dmz #o_bg{background:none;display:none}.o_login{padding:0}.o_login .o_login_intro{padding:0;text-align:left}.o_login .o_login_box_wrapper{text-align:center;padding:0}.o_login .o_login_box{padding-left:0;padding-right:0}.o_login .o_login_box .o_login_providers,.o_login .o_login_box .o_login_provider{-webkit-box-shadow:none;box-shadow:none}.o_login .o_login_messages,.o_login .o_login_box{width:100%;display:block}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px;margin-top:10px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.o_library_icon:before{content:""}.o_library ul{list-style:none;margin:0 0 15px 0;padding:0}.o_library ul ul{margin:0}.o_library_overview .o_library_newest_files ul li{float:left;margin-right:15px}.o_library_item{margin-bottom:10px;position:relative}.o_library_item .o_library_visual,.o_library_item .o_library_extra,.o_library_item .o_library_meta{margin-top:15px}.o_library_item .o_library_visual{float:left;background-color:#fff;border-radius:4px;border:1px solid #ddd}.o_library_item .o_library_visual .o_thumbnail_available,.o_library_item .o_library_visual .o_thumbnail_unavailable{background-size:146px auto;width:150px !important;height:150px !important;background-repeat:no-repeat;background-position:50% 50%}.o_library_item .o_library_visual .o_thumbnail_available:before,.o_library_item .o_library_visual .o_thumbnail_unavailable:before{content:none}.o_library_item .o_library_visual .o_thumbnail_available{background-size:146px auto}.o_library_item .o_library_visual .o_thumbnail_unavailable{display:none}.o_library_item .o_library_extra{float:right;width:200px}.o_library_item .o_library_meta{clear:both}.o_library_item .o_library_meta .o_library_desc{padding-bottom:10px}.o_library_item .o_library_meta small{display:block;word-wrap:break-word}.o_library_item h4,.o_library_item .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item h2{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:normal}.o_library_item .btn{display:block;margin-bottom:0.5em}.o_library_item .o_comments{display:inline-block}.o_library_item .table{table-layout:fixed;word-wrap:break-word;margin-bottom:0}.o_library_item p.o_library_show_more{text-align:right;margin:0;padding-top:20px}.o_library_item .o_library_more{padding-top:20px;display:none}.o_library_folder{margin-top:-20px}.o_ratings_and_comments .o_rating_title,.o_ratings_and_comments .o_rating_explanation{display:none}@media (min-width: 768px){.o_library_item .o_library_meta{clear:none;margin-left:150px;margin-right:200px;padding:0 10px}.o_library_item .o_library_more{display:none}.o_library_item .o_library_more table tbody{vertical-align:top}.o_library_item .o_library_more table tr,.o_library_item .o_library_more table th,.o_library_item .o_library_more table td{display:inline-block}.o_library_item .o_library_more table tr{width:49%}.o_library_item .o_library_more table th{width:30%}.o_library_item .o_library_more table td{width:70%}}.o_library_item_compact .o_library_extra{width:auto}.o_library_item_compact .o_library_meta{padding:0 10px 0 0;margin:0;overflow:hidden}.o_library_item_compact .btn{display:inline-block}.o_library_item_compact h4,.o_library_item_compact .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item_compact h2{overflow:hidden;margin-right:70px}.o_library_item_compact h4 a,.o_library_item_compact .o_cal .fc-header-title h2 a,.o_cal .fc-header-title .o_library_item_compact h2 a{text-overflow:ellipsis;white-space:nowrap}.o_library_item_compact p.o_library_show_more{padding:20px;position:absolute;top:0;right:0}span.o_translation_i18nitem{position:relative !important}span.o_translation_i18nitem a.o_translation_i18nitem_launcher{position:absolute !important;z-index:100 !important;width:18px !important;height:20px !important;top:0 !important;left:5px !important;background:#fff;border:1px solid #337ab7 !important;border-radius:3px;text-align:center;padding:0 !important}.o_user_infos{position:relative}.o_user_infos .o_user_portrait{position:absolute;top:0;left:15px;width:100px;height:100px}.o_user_infos .o_user_infos_inner{margin:0 30px 0 100px}.o_user_infos .o_user_infos_inner table{margin:0 30px 15px 30px}.o_members_pagination{text-align:center}.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:66px;height:66px;margin-right:10px}@media (max-width: 767px){.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:50px;height:50px;margin:5px 5px 0 0}}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon,.ui-state-default .ui-icon,.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-active .ui-icon,.ui-state-highlight .ui-icon,.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background:none;background-image:none}.ui-dialog{-webkit-box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-dialog-title{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close:before{content:"" !important}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;font-size:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close span{display:none}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important;float:right}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px;overflow:auto;background:white !important}.ui-dialog .ui-dialog-titlebar{padding:4px 7px 4px 7px;background-color:#eee !important}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{z-index:2000 !important;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #2e6da4;background:#337ab7;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent}label.mce-label{display:inline;max-width:150px;margin-bottom:0;font-weight:normal}i.mce-ico.mce-i-media,i.mce-ico.mce-i-movie,i.mce-ico.mce-i-help{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}i.mce-ico.mce-i-media:before{content:""}i.mce-ico.mce-i-movie:before{content:""}i.mce-ico.mce-i-help{width:9px;height:9px;padding-top:1px}i.mce-ico.mce-i-help:before{content:"";color:white}.mce-tabs span.o_chelp_wrapper{float:right;margin:5px}@media print{a[href]:after{content:""}#o_header_wrapper,#o_offcanvas_right,#o_navbar_wrapper,#o_footer_wrapper,#o_toplink,#o_main_left,#o_main_right,#o_main_toolbar,#jsMath_PrintWarning,.o_noti,.o_opener,.o_hide,.o_noprint{display:none !important}.o_print_break_avoid{page-break-inside:avoid}.o_print_break_before{page-break-before:always}body.o_dmz{background:white !important}.progress{-webkit-print-color-adjust:exact;background-color:rgba(0,0,0,0.1) !important;border:1px solid rgba(0,0,0,0.5)}.progress-bar{-webkit-print-color-adjust:exact;background-color:#000 !important;border:10px solid #000}}body.o_browser_ie7 #o_offcanvas_right,body.o_browser_ie8 #o_offcanvas_right{right:0px}
+**//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail,.o_form .o_filepreview img,.o_feed .o_media{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,.o_cal .fc-header-title h2,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,.o_cal .fc-header-title h2 small,h4 .small,.o_cal .fc-header-title h2 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.o_cal .fc-header-title h2,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.o_cal .fc-header-title h2 small,h4 .small,.o_cal .fc-header-title h2 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.o_cal .fc-header-title h2,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn,.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,.form-group-sm .form-control,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn,.form-group-sm .form-control{height:auto}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn,.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,.form-group-lg .form-control,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn,.form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group,.o_navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.o_navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static,.o_navbar-form .form-control-static{display:inline-block}.form-inline .input-group,.o_navbar-form .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.o_navbar-form .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.o_navbar-form .input-group .input-group-btn,.form-inline .input-group .form-control,.o_navbar-form .input-group .form-control{width:auto}.form-inline .input-group>.form-control,.o_navbar-form .input-group>.form-control{width:100%}.form-inline .control-label,.o_navbar-form .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.o_navbar-form .radio,.form-inline .checkbox,.o_navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.o_navbar-form .radio label,.form-inline .checkbox label,.o_navbar-form .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.o_navbar-form .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"],.o_navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback,.o_navbar-form .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.o_repo_details .o_lead{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.o_repo_details .o_lead h1,.jumbotron .h1,.o_repo_details .o_lead .h1{color:inherit}.jumbotron p,.o_repo_details .o_lead p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr,.o_repo_details .o_lead>hr{border-top-color:#d5d5d5}.container .jumbotron,.container .o_repo_details .o_lead,.o_repo_details .container .o_lead,.container-fluid .jumbotron,.container-fluid .o_repo_details .o_lead,.o_repo_details .container-fluid .o_lead{border-radius:6px}.jumbotron .container,.o_repo_details .o_lead .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron,.o_repo_details .o_lead{padding:48px 0}.container .jumbotron,.container .o_repo_details .o_lead,.o_repo_details .container .o_lead,.container-fluid .jumbotron,.container-fluid .o_repo_details .o_lead,.o_repo_details .container-fluid .o_lead{padding-left:60px;padding-right:60px}.jumbotron h1,.o_repo_details .o_lead h1,.jumbotron .h1,.o_repo_details .o_lead .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4,.alert .o_cal .fc-header-title h2,.o_cal .fc-header-title .alert h2{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table,.panel-collapse>.table,.panel-collapse>.table-responsive>.table,.panel-collapse>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption,.panel-collapse>.table caption,.panel-collapse>.table-responsive>.table caption,.panel-collapse>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child,.panel-collapse>.table:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel-collapse>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel-collapse>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel-collapse>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child,.panel-collapse>.table:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel-collapse>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel-collapse>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel-collapse>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body,.panel-collapse>.panel-body+.table,.panel-collapse>.panel-body+.table-responsive,.panel-collapse>.table+.panel-body,.panel-collapse>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td,.panel-collapse>.table>tbody:first-child>tr:first-child th,.panel-collapse>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered,.panel-collapse>.table-bordered,.panel-collapse>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel-collapse>.table-bordered>thead>tr>th:first-child,.panel-collapse>.table-bordered>thead>tr>td:first-child,.panel-collapse>.table-bordered>tbody>tr>th:first-child,.panel-collapse>.table-bordered>tbody>tr>td:first-child,.panel-collapse>.table-bordered>tfoot>tr>th:first-child,.panel-collapse>.table-bordered>tfoot>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel-collapse>.table-bordered>thead>tr>th:last-child,.panel-collapse>.table-bordered>thead>tr>td:last-child,.panel-collapse>.table-bordered>tbody>tr>th:last-child,.panel-collapse>.table-bordered>tbody>tr>td:last-child,.panel-collapse>.table-bordered>tfoot>tr>th:last-child,.panel-collapse>.table-bordered>tfoot>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel-collapse>.table-bordered>thead>tr:first-child>td,.panel-collapse>.table-bordered>thead>tr:first-child>th,.panel-collapse>.table-bordered>tbody>tr:first-child>td,.panel-collapse>.table-bordered>tbody>tr:first-child>th,.panel-collapse>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel-collapse>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel-collapse>.table-bordered>tbody>tr:last-child>td,.panel-collapse>.table-bordered>tbody>tr:last-child>th,.panel-collapse>.table-bordered>tfoot>tr:last-child>td,.panel-collapse>.table-bordered>tfoot>tr:last-child>th,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel-collapse>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel-collapse>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive,.panel-collapse>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}body .modal{position:absolute;overflow:visible}body div.tooltip-inner{max-width:400px}body div.popover{max-width:450px}body .modal-body.alert{border-radius:0}body .progress{margin-bottom:0}.panel-body:nth-child(n+2){border-top:1px solid #ddd}.panel .panel-heading[data-toggle="collapse"]{cursor:pointer}#o_ajax_busy_backdrop{bottom:0;z-index:1020}.form-control-feedback{top:10px}.form-horizontal .has-feedback .form-control-feedback{top:10px}.btn.btn-primary.o_disabled{color:#fff !important}body .progress-bar[aria-valuenow="1"],body .progress-bar[aria-valuenow="2"]{min-width:1px}@-moz-document url-prefix(){fieldset{display:table-cell}}@font-face{font-family:'openolat';src:url("../light/fonts/openolat/openolat.eot?4yacgg");src:url("../light/fonts/openolat/openolat.eot?#iefix4yacgg") format("embedded-opentype"),url("../light/fonts/openolat/openolat.woff?4yacgg") format("woff"),url("../light/fonts/openolat/openolat.ttf?4yacgg") format("truetype"),url("../light/fonts/openolat/openolat.svg?4yacgg#openolat") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:'FontAwesome';src:url("../../font-awesome/fonts/fontawesome-webfont.eot?v=4.3.0");src:url("../../font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"),url("../../font-awesome/fonts/fontawesome-webfont.woff2?v=4.3.0") format("woff2"),url("../../font-awesome/fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"),url("../../font-awesome/fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"),url("../../font-awesome/fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.o_icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.o_icon-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.o_icon-2x{font-size:2em}.o_icon-3x{font-size:3em}.o_icon-4x{font-size:4em}.o_icon-5x{font-size:5em}.o_icon-fw{width:1.28571em;text-align:center}.o_icon-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.o_icon-ul>li{position:relative}.o_icon-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.o_icon-li.o_icon-lg{left:-1.85714em}.o_icon-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.o_icon.pull-left{margin-right:.3em}.o_icon.pull-right{margin-left:.3em}.o_icon-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.o_icon-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.o_icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.o_icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.o_icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.o_icon-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.o_icon-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .o_icon-rotate-90,:root .o_icon-rotate-180,:root .o_icon-rotate-270,:root .o_icon-flip-horizontal,:root .o_icon-flip-vertical{filter:none}.o_icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.o_icon-stack-1x,.o_icon-stack-2x{position:absolute;left:0;width:100%;text-align:center}.o_icon-stack-1x{line-height:inherit}.o_icon-stack-2x{font-size:2em}.o_icon-inverse{color:#fff}.o_icon_accepted:before{content:""}.o_icon_accessibility:before{content:""}.o_icon_actions:before{content:""}.o_icon_archive_tool:before{content:""}.o_icon_assessment_mode:before{content:""}.o_icon_assessment_tool:before{content:""}.o_icon_attempt_limit:before{content:""}.o_icon_accept:before{content:"";color:#5cb85c}.o_icon_add:before{content:""}.o_icon_add_member:before{content:""}.o_icon_add_search:before{content:""}.o_icon_audio:before{content:""}.o_icon_back:before{content:""}.o_icon_back_history:before{content:""}.o_icon_banned:before{content:"";color:#d9534f}.o_icon_bold:before{content:""}.o_icon_booking:before{content:""}.o_icon_bookmark:before{content:"";color:#bc2d0c}.o_icon_bookmark_add:before{content:""}.o_icon_bookmark_header:before{content:""}.o_icon_browse:before{content:""}.o_icon_browsercheck:before{content:""}.o_icon_busy:before{content:""}.o_icon_calendar:before{content:""}.o_icon_calendar_enabled:before{content:""}.o_icon_calendar_disabled:before{content:""}.o_icon_calendar:before{content:""}.o_icon_calendar_sync:before{content:""}.o_icon_caret:before{content:""}.o_icon_caret_right:before{content:""}.o_icon_catalog:before{content:""}.o_icon_catalog_sub:before{content:""}.o_icon_certificate:before{content:""}.o_icon_chat:before{content:""}.o_icon_check:before{content:""}.o_icon_check_off:before{content:""}.o_icon_check_on:before{content:""}.o_icon_checkbox:before{content:""}.o_icon_checkbox_checked:before{content:""}.o_icon_cleanup:before{content:""}.o_icon_close:before{content:""}.o_icon_close_resource:before{content:""}.o_icon_close_tab:before{content:""}.o_icon_close_tool:before{content:""}.o_icon_close_tree:before{content:""}.o_icon_close_togglebox:before,.o_togglebox_wrapper .o_opener.o_in i:before{content:""}.o_icon_code:before{content:""}.o_icon_color_picker:before{content:""}.o_icon_copy:before{content:""}.o_icon_courseareas:before{content:""}.o_icon_coursedb:before{content:""}.o_icon_courseeditor:before{content:""}.o_icon_coursefolder:before{content:""}.o_icon_courserun:before{content:""}.o_icon_comments:before{content:""}.o_icon_comments_none:before{content:""}.o_icon_content_popup:before{content:""}.o_icon_correct_answer:before{content:"";color:#5cb85c}.o_icon_customize:before{content:""}.o_icon_delete_item:before{content:""}.o_icon_delete:before{content:"";color:#A87E7E}.o_icon_details:before{content:""}.o_icon_description:before{content:""}.o_icon_dev:before{content:""}.o_icon_disabled:before{content:""}.o_icon_download:before{content:""}.o_icon_edit:before{content:""}.o_icon_edit_file:before{content:""}.o_icon_edit_metadata:before{content:""}.o_icon_enabled:before{content:""}.o_icon_enlarge:before{content:""}.o_icon_eportfolio_add:before{content:""}.o_icon_eportfolio_link:before{content:""}.o_icon_error:before{content:"";color:#d9534f}.o_icon_expenditure:before{content:""}.o_icon_export:before{content:""}.o_icon_external_link:before{content:""}.o_icon_failed:before{content:""}.o_icon_filter:before{content:""}.o_icon_graduate:before{content:""}.o_icon_group:before,.o_BusinessGroup_icon:before{content:""}.o_icon_header:before{content:""}.o_icon_help:before{content:"";cursor:help}.o_icon_home:before{content:""}.o_icon_impress:before{content:""}.o_icon_important:before{content:"";color:#f0ad4e}.o_icon_import:before{content:""}.o_icon_info:before{content:"";color:#5bc0de}.o_icon_info_msg:before{content:"";color:#d9534f}.o_icon_info_resource:before{content:""}.o_icon_inline_editable:before{content:""}.o_icon_institution:before{content:""}.o_icon_italic:before{content:""}.o_icon_landingpage:before{content:""}.o_icon_language:before{content:""}.o_icon_layout:before{content:""}.o_icon_link:before{content:""}.o_icon_link_extern:before{content:""}.o_icon_list:before{content:""}.o_icon_list_num :before{content:""}.o_icon_lifecycle:before{content:""}.o_icon_locked:before{content:""}.o_icon_login:before{content:""}.o_icon_logout:before{content:""}.o_icon_mandatory:before{content:"";color:#f0ad4e}.o_icon_managed:before{content:"";color:#777}.o_icon_manual:before{content:"";cursor:help}.o_icon_mail:before{content:""}.o_icon_math:before{content:""}.o_icon_membersmanagement:before{content:""}.o_icon_menuhandel:before{content:""}.o_icon_message:before{content:""}.o_icon_mobile:before{content:""}.o_icon_move:before{content:""}.o_icon_move_down:before{content:""}.o_icon_move_left:before{content:""}.o_icon_move_right:before{content:""}.o_icon_move_up:before{content:""}.o_icon_new:before{content:"";color:#5cb85c}.o_icon_new_document:before{content:""}.o_icon_new_folder:before{content:""}.o_icon_news:before{content:""}.o_icon_next:before{content:""}.o_icon_next_page:before{content:""}.o_icon_next_toolbar:before{content:""}.o_icon_node_after:before{content:""}.o_icon_node_before:before{content:""}.o_icon_node_under:before{content:""}.o_icon_notes:before{content:""}.o_icon_notification:before{content:""}.o_icon_ok:before{content:"";color:#5cb85c}.o_icon_open_tree:before{content:""}.o_icon_open_togglebox:before,.o_togglebox_wrapper .o_opener i:before{content:""}.o_icon_openolat:before,.o_icon_provider_olat:before{content:"\E600";font-family:openolat;font-size:10px}.o_icon_options:before{content:""}.o_icon_pageing:before{content:""}.o_icon_passed:before{content:""}.o_icon_password:before{content:""}.o_icon_pending:before{content:""}.o_icon_phone:before{content:""}.o_icon_post:before{content:""}.o_icon_preview:before{content:""}.o_icon_previous:before{content:""}.o_icon_previous_page:before{content:""}.o_icon_previous_toolbar:before{content:""}.o_icon_print:before{content:""}.o_icon_private:before{content:""}.o_icon_provider_adfs:before{content:""}.o_icon_provider_facebook:before{content:""}.o_icon_provider_google:before{content:""}.o_icon_provider_guest:before{content:""}.o_icon_provider_ldap:before{content:""}.o_icon_provider_linkedin:before{content:""}.o_icon_provider_oauth:before{content:""}.o_icon_provider_performx:before{content:""}.o_icon_provider_shibboleth:before{content:""}.o_icon_provider_twitter:before{content:""}.o_icon_publish:before{content:""}.o_icon_qrcode:before{content:""}.o_icon_quickview:before{content:""}.o_icon_radio_off:before{content:""}.o_icon_radio_on:before{content:""}.o_icon_rating_on:before,.o_rating .o_rating_items.o_enabled .o_icon:hover:before{content:""}.o_icon_rating_off:before{content:""}.o_icon_read:before{content:""}.o_icon_readonly:before{content:"";color:red}.o_icon_readwrite:before{content:""}.o_icon_recycle:before{content:""}.o_icon_refresh:before{content:""}.o_icon_reject:before{content:"";color:#d9534f}.o_icon_rejected:before{content:""}.o_icon_reminder:before{content:""}.o_icon_remove:before{content:""}.o_icon_replace:before{content:""}.o_icon_reply:before{content:""}.o_icon_reply_with_quote:before{content:""}.o_icon_response_feedback:before{content:""}.o_icon_review:before{content:""}.o_icon_rss:before{content:""}.o_icon_rss_unsubscribe:before{content:"";color:#996633}.o_icon_search:before{content:""}.o_icon_select:before{content:""}.o_icon_send:before{content:""}.o_icon_settings:before{content:""}.o_icon_share:before{content:""}.o_icon_show_more:before{content:""}.o_icon_show_less:before{content:""}.o_icon_show_send:before{content:""}.o_icon_sign_out:before{content:""}.o_icon_spacer:before{content:""}.o_icon_split:before{content:""}.o_icon_sort:before{content:""}.o_icon_sort_asc:before{content:""}.o_icon_sort_desc:before{content:""}.o_icon_sort_menu:before{content:""}.o_icon_start:before{content:""}.o_icon_status_available:before{content:"";color:#063}.o_icon_status_chat:before{content:""}.o_icon_status_dnd:before{content:"";color:#cc3}.o_icon_status_unavailable:before{content:"";color:#963}.o_icon_statistics_tool:before{content:""}.o_icon_submit:before{content:""}.o_icon_table:before{content:""}.o_icon_table_large:before{content:""}.o_icon_tags:before{content:""}.o_icon_timelimit:before{content:""}.o_icon_toggle:before{content:""}.o_icon_to_read:before{content:""}.o_icon_tool:before{content:""}.o_icon_tools:before{content:""}.o_icon_top:before{content:""}.o_icon_translation_item:before{content:""}.o_icon_translation_package:before{content:""}.o_icon_user:before{content:""}.o_icon_user_vip:before{content:""}.o_icon_user_anonymous:before{content:""}.o_icon_upload:before{content:""}.o_icon_version:before{content:""}.o_icon_video:before{content:""}.o_icon_waiting:before{content:""}.o_icon_warn:before{content:"";color:#f0ad4e}.o_icon_wizard:before{content:""}.o_CourseModule_icon:before,.o_course_icon:before{content:""}.o_EPStructuredMapTemplate_icon:before{content:""}.o_FileResource-BLOG_icon:before{content:""}.o_FileResource-IMSCP_icon:before{content:""}.o_FileResource-PODCAST_icon:before{content:""}.o_FileResource-SHAREDFOLDER:before{content:""}.o_FileResource-SCORMCP_icon:before{content:""}.o_FileResource-SURVEY_icon:before{content:""}.o_FileResource-TEST_icon:before{content:""}.o_FileResource-WIKI_icon:before{content:""}.o_FileResource-SHAREDFOLDER_icon:before{content:""}.o_FileResource-GLOSSARY_icon:before{content:""}.o_FileResource-PDF_icon:before{content:""}.o_FileResource-XLS_icon:before{content:""}.o_FileResource-PPT_icon:before{content:""}.o_FileResource-DOC_icon:before{content:""}.o_FileResource-ANIM_icon:before{content:""}.o_FileResource-IMAGE_icon:before{content:""}.o_FileResource-SOUND_icon:before{content:""}.o_FileResource-MOVIE_icon:before{content:""}.o_FileResource-FILE_icon:before{content:""}.o_CourseModule_icon_closed:before{content:""}.o_sp_icon:before{content:""}.o_st_icon:before{content:""}.o_tu_icon:before{content:""}.o_bc_icon:before{content:""}.o_lti_icon:before{content:""}.o_cp_icon:before{content:""}.o_cp_item:before{content:""}.o_scorm_icon:before{content:""}.o_en_icon:before{content:""}.o_fo_icon:before{content:""}.o_co_icon:before{content:""}.o_infomsg_icon:before{content:""}.o_cal_icon:before{content:""}.o_wiki_icon:before{content:""}.o_podcast_icon:before{content:""}.o_blog_icon:before{content:""}.o_ep_icon:before{content:""}.o_iqtest_icon:before{content:""}.o_iqself_icon:before{content:""}.o_iqsurv_icon:before{content:""}.o_ta_icon:before{content:""}.o_gta_icon:before{content:""}.o_ms_icon:before{content:""}.o_dialog_icon:before{content:""}.o_projectbroker_icon:before{content:""}.o_ll_icon:before{content:""}.o_den_icon:before{content:""}.o_cmembers_icon:before{content:""}.o_cl_icon:before{content:""}.o_vc_icon:before{content:""}.o_vitero_icon:before{content:""}.o_openmeetings_icon:before{content:""}.o_portlet_infomsg_icon:before{content:""}.o_portlet_quickstart_icon:before{content:""}.o_portlet_bookmark_icon:before{content:""}.o_portlet_groups_icon:before{content:""}.o_portlet_notes_icon:before{content:""}.o_portlet_noti_icon:before{content:""}.o_portlet_eff_icon:before{content:""}.o_portlet_repository_student_icon:before{content:""}.o_portlet_repository_teacher_icon:before{content:""}.o_portlet_iframe_icon:before{content:""}.o_portlet_sysinfo_icon:before{content:""}.o_portlet_dyk_icon:before{content:""}.o_portlet_infomessages_icon:before{content:""}.o_portlet_cal_icon:before{content:""}.o_portlet_institutions_icon:before{content:""}.o_portlet_links_icon:before{content:""}.o_portlet_shibboleth_icon:before{content:""}.o_icon_qpool:before{content:""}.o_icon_pool_private:before{content:""}.o_icon_pool_public:before{content:""}.o_icon_pool_my_items:before{content:""}.o_icon_pool_favorits:before{content:""}.o_icon_pool_collection:before{content:""}.o_icon_pool_pool:before{content:""}.o_icon_pool_share:before{content:""}.o_forum_message_icon:before{content:""}.o_calendar_icon:before{content:""}.o_forum_status_thread_icon:before{content:""}.o_forum_status_sticky_closed_icon:before{content:""}.o_forum_status_sticky_icon:before{content:""}.o_forum_status_closed_icon:before{content:"";color:#a94442}.o_forum_status_opened_icon:before{content:"";color:#3c763d}.o_forum_status_hidden_icon:before{content:"";color:#a94442}.o_forum_status_visible_icon:before{content:"";color:#3c763d}.o_forum_all_icon:before{content:""}.o_forum_all_flat_icon:before{content:""}.o_forum_one_icon:before{content:""}.o_forum_marked_icon:before{content:""}.o_forum_new_icon:before{content:""}.o_mi_qpool_import:before{content:""}.o_mi_qtisection:before{content:""}.o_mi_qtisc:before{content:""}.o_mi_qtimc:before{content:""}.o_mi_qtikprim:before{content:""}.o_mi_qtifib:before{content:""}.o_mi_qtiessay:before{content:""}.o_as_mode_leadtime:before{content:""}.o_as_mode_assessment:before{content:""}.o_as_mode_followup:before{content:""}.o_as_mode_closed:before{content:'-'}.o_black_led:before{content:"";color:#337ab7}.o_green_led:before{content:"";color:#5cb85c}.o_yellow_led:before{content:"";color:#f0ad4e}.o_red_led:before{content:"";color:#d9534f}.o_ac_token_icon:before{content:""}.o_ac_free_icon:before{content:""}.o_ac_group_icon:before{content:""}.o_ac_membersonly_icon:before{content:""}.o_ac_paypal_icon:before{content:""}.o_ac_status_canceled_icon:before{content:"";color:#f0ad4e}.o_ac_status_error_icon:before{content:"";color:#d9534f}.o_ac_status_new_icon:before{content:"";color:#337ab7}.o_ac_status_succes_icon:before{content:"";color:#5cb85c}.o_ac_status_waiting_icon:before{content:"";color:#337ab7}.o_ac_order_status_new_icon:before{content:"";color:#337ab7}.o_ac_order_status_prepayment_icon:before{content:"";color:#5bc0de}.o_ac_order_status_payed_icon:before{content:"";color:#5cb85c}.o_ac_order_status_canceled_icon:before{content:"";color:#f0ad4e}.o_ac_order_status_error_icon:before{content:"";color:#d9534f}.o_ac_order_status_warning_icon:before{content:"";color:#f0ad4e}.o_scorm_org:before{content:""}.o_scorm_item:before{content:""}.o_scorm_completed:before,.o_scorm_passed:before{content:""}.o_scorm_failed:before{content:""}.o_scorm_incomplete:before{content:""}.o_scorm_not_attempted:before{background:none}.o_midpub:before{content:""}.o_midwarn:before{content:""}.o_midlock:before{content:""}.o_miderr:before{content:""}.o_middel:before{content:""}.o_filetype_file:before,.o_filetype_ico:before{content:""}.o_filetype_folder:before{content:""}.o_filetype_folder_open:before{content:""}.o_filetype_zip:before,.o_filetype_gz:before,.o_filetype_tar:before,.o_filetype_tgz:before{content:""}.o_filetype_css:before,.o_filetype_js:before,.o_filetype_java:before,.o_filetype_numbers:before,.o_filetype_ods:before,.o_filetype_xml:before,.o_filetype_xsl:before{content:""}.o_filetype_bat_icon:before,.o_filetype_bat:before,.o_filetype_exe:before,.o_filetype_app:before,.o_filetype_sh:before{content:""}.o_filetype_xls:before,.o_filetype_xlsx:before{content:""}.o_filetype_png:before,.o_filetype_tiff:before,.o_filetype_webp:before,.o_filetype_gif:before,.o_filetype_ico:before,.o_filetype_jpeg:before,.o_filetype_bmp:before,.o_filetype_odg:before,.o_filetype_eps:before,.o_filetype_jpg:before{content:""}.o_filetype_psd:before,.o_filetype_avi:before,.o_filetype_dvi:before,.o_filetype_mp4:before,.o_filetype_m4v:before,.o_filetype_webm:before,.o_filetype_ogg:before,.o_filetype_video:before,.o_filetype_mov:before,.o_filetype_mpeg:before,.o_filetype_mpg:before,.o_filetype_qt:before,.o_filetype_ra:before,.o_filetype_ram:before,.o_filetype_swf:before,.o_filetype_flv:before{content:""}.o_filetype_midi:before,.o_filetype_audio:before,.o_filetype_mp3:before,.o_filetype_m3u:before,.o_filetype_wav:before{content:""}.o_filetype_ps:before,.o_filetype_pdf:before{content:""}.o_filetype_key:before,.o_filetype_odp:before,.o_filetype_ppt:before,.o_filetype_pptx:before{content:""}.o_filetype_odf:before,.o_filetype_rtf:before,.o_filetype_readme:before,.o_filetype_README:before,.o_filetype_log:before,.o_filetype_txt:before,.o_filetype_htm:before,.o_filetype_html:before{content:""}.o_filetype_odt:before,.o_filetype_pages:before,.o_filetype_doc:before,.o_filetype_docx:before{content:""}.o_icon_share_social:before{content:""}.o_icon_apple:before{content:""}.o_icon_facebook:before{content:""}.o_icon_twitter:before{content:""}.o_icon_google:before{content:""}.o_icon_delicious:before{content:""}.o_icon_digg:before{content:""}.o_icon_mailto:before{content:""}.o_icon_link:before{content:""}.o_icon_yahoo:before{content:""}a.o_icon:hover,a.o_icon:focus{text-decoration:none}img.o_emoticons_angel{background:url(../light/images/emoticons/smiley-angel.png);width:16px;height:16px}img.o_emoticons_angry{background:url(../light/images/emoticons/smiley-mad.png);width:16px;height:16px}img.o_emoticons_blushing{background:url(../light/images/emoticons/smiley-red.png);width:16px;height:16px}img.o_emoticons_confused{background:url(../light/images/emoticons/smiley-confuse.png);width:16px;height:16px}img.o_emoticons_cool{background:url(../light/images/emoticons/smiley-cool.png);width:16px;height:16px}img.o_emoticons_cry{background:url(../light/images/emoticons/smiley-cry.png);width:16px;height:16px}img.o_emoticons_devil{background:url(../light/images/emoticons/smiley-evil.png);width:16px;height:16px}img.o_emoticons_grin{background:url(../light/images/emoticons/smiley-grin.png);width:16px;height:16px}img.o_emoticons_kiss{background:url(../light/images/emoticons/smiley-kiss.png);width:16px;height:16px}img.o_emoticons_ohoh{background:url(../light/images/emoticons/smiley-eek.png);width:16px;height:16px}img.o_emoticons_sad{background:url(../light/images/emoticons/smiley-sad.png);width:16px;height:16px}img.o_emoticons_sick{background:url(../light/images/emoticons/smiley-sad-blue.png);width:16px;height:16px}img.o_emoticons_smile{background:url(../light/images/emoticons/smiley.png);width:16px;height:16px}img.o_emoticons_tongue{background:url(../light/images/emoticons/smiley-razz.png);width:16px;height:16px}img.o_emoticons_ugly{background:url(../light/images/emoticons/smiley-money.png);width:16px;height:16px}img.o_emoticons_weird{background:url(../light/images/emoticons/smiley-nerd.png);width:16px;height:16px}img.o_emoticons_wink{background:url(../light/images/emoticons/smiley-wink.png);width:16px;height:16px}img.o_emoticons_worried{background:url(../light/images/emoticons/smiley-roll-blue.png);width:16px;height:16px}img.o_emoticons_up{background:url(../light/images/emoticons/thumb-up.png);width:16px;height:16px}img.o_emoticons_down{background:url(../light/images/emoticons/thumb.png);width:16px;height:16px}.o_block_bottom,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry,.o_header_with_buttons,.o_search_result{margin-bottom:1em}.o_block_top,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry{margin-top:1em}.o_block_large_bottom,.o_block_large,.o_block_with_datecomp,.o_login .o_login_footer_wrapper,.o_portlet{margin-bottom:2em}.o_block_large_top,.o_block_large,.o_block_with_datecomp,.o_login .o_login_footer_wrapper,.o_portlet{margin-top:2em}.o_block_inline,.o_block_inline_left,.o_block_inline_both,.o_block_inline_right{display:inline-block}.o_block_inline_left,.o_block_inline_both{margin-left:0.5em}.o_block_inline_right,.o_block_inline_both{margin-right:0.5em}.o_scrollblock,div.b_scrollblock{overflow-x:auto;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_button_group{text-align:center}.o_button_group a,.o_button_group input,.o_button_group button,.o_button_group .btn-group{margin-right:5px;margin-bottom:0.5em}.o_button_group a:last-child,.o_button_group input:last-child,.o_button_group button:last-child,.o_button_group .btn-group:last-child{margin-right:0}.o_button_group .btn-group a,.o_button_group .btn-group input,.o_button_group .btn-group button{margin-right:0;margin-bottom:0}.o_button_group .dropdown-menu{text-align:left}.o_button_group_left{text-align:left}.o_button_group_right{text-align:right}.o_button_group_top{margin-top:0}.o_header_with_buttons:before,.o_header_with_buttons:after{content:" ";display:table}.o_header_with_buttons:after{clear:both}.o_header_with_buttons h1,.o_header_with_buttons h3,.o_header_with_buttons h4,.o_header_with_buttons .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_header_with_buttons h2{display:inline-block}.o_header_with_buttons .o_button_group{margin-top:10px;margin-bottom:0;float:right}.panel-heading.o_header_with_buttons{margin-bottom:0}.o_xsmall,.b_xsmall,p.b_xsmall,div.b_xsmall{font-size:12px}.o_small,.b_small,p.b_small,div.b_small,.o_comments .o_comment_wrapper h5,.o_comments .o_comment_wrapper .o_comment,.o_bc_meta,.tooltip,.o_htmleditor .o_metadata .o_lastmodified,.o_noti,.o_block_with_datecomp .o_meta,.o_togglebox_wrapper div.o_togglebox_content .o_hide,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label,.o_course_run .o_toc .o_entry{font-size:12px}.o_large,.b_large,p.b_large,div.b_large{font-size:18px}.o_xlarge,.b_xlarge,p.b_xlarge,div.b_xlarge{font-size:18px}.o_disabled,.b_disabled,p.b_disabled,div.b_disabled{color:#777 !important;cursor:default}.o_disabled:hover,.b_disabled:hover{color:#777 !important}.o_dimmed,.b_dimmed,p.b_dimmed,div.b_dimmed{opacity:0.4;filter:alpha(opacity=40)}.o_selected,.b_selected,p.b_selected,div.b_selected{font-weight:bold}.o_deleted,.b_deleted,p.b_deleted,div.b_deleted{text-decoration:line-through}.o_clickable{cursor:pointer}.o_ochre{color:#c8a959}.o_blue{color:#12223F}.o_undecorated:hover,.o_undecorated:focus,.o_disabled:hover,.b_disabled:hover,#o_main_wrapper #o_toplink:hover,#o_footer_powered a:hover,#o_share a:hover,#o_share_social_container a:hover,.o_toolbar .o_tools_container a:hover,.o_button_toggle:hover,.o_im_message_group .o_im_from:hover,.o_noti .o_label:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover,.o_catalog .o_level .o_meta .o_title a:hover,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover,.o_repo_details .o_social .o_comments:hover,.o_login .o_login_register:hover,.o_disabled:focus,.b_disabled:focus,#o_main_wrapper #o_toplink:focus,#o_footer_powered a:focus,#o_share a:focus,#o_share_social_container a:focus,.o_toolbar .o_tools_container a:focus,.o_button_toggle:focus,.o_im_message_group .o_im_from:focus,.o_noti .o_label:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:focus,.o_catalog .o_level .o_meta .o_title a:focus,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:focus,.o_repo_details .o_social .o_comments:focus,.o_login .o_login_register:focus{text-decoration:none}.o_copy_code,.b_copy_code,p.b_copy_code,div.b_copy_code,code,pre{overflow-x:auto;overflow-y:auto;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}.o_nowrap,.b_copy_code,p.b_copy_code,div.b_copy_code,code{white-space:nowrap}.o_titled_wrapper .o_content{margin-top:20px}.o_video,.o_video video,.b_video,.o_video_wrapper{display:inline-block;max-width:100%;height:auto;max-width:100%}.o_image,.o_image img,img,.b_image{display:inline-block;max-width:100%;height:auto;max-width:100%}.o_with_hyphens{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}h1{color:#337ab7}h2{color:#337ab7}h3{color:#337ab7}h4,.o_cal .fc-header-title h2{color:#337ab7}h5{color:#337ab7}h5{color:#337ab7}fieldset legend{color:#333}.b_border_box,p.b_border_box,div.b_border_box{border:1px solid #777;padding:1em;border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}table td{vertical-align:top}table.b_grid{width:99.5%;background:transparent;border-collapse:separate}table.b_grid td,table.b_grid th{padding:1px 5px;border:1px solid #777}table.b_grid th{background:#eee}table.b_border{width:99.5%;background:transparent;border-collapse:collapse}table.b_border td,table.b_border th{padding:1px 5px;border:1px solid #777}table.b_border th{background:#eee}table.b_borderless{width:99.5%;background:transparent;border-collapse:separate}table.b_borderless td,table.b_borderless th{padding:1px 5px;border:0}table.b_full{width:99.5%}table.b_middle{background:transparent}table.b_middle td{vertical-align:middle}.b_align_normal{text-align:left}.b_align_center{text-align:center}.b_align_inverse{text-align:right}.b_align_justified{text-align:justify}a.b_link_extern{color:#337ab7}a.b_link_extern:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}a.b_link_mailto{color:#337ab7}a.b_link_mailto:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}a.b_link_forward{color:#337ab7}a.b_link_forward:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-right:0.5em;content:""}img.b_float_left{float:left;margin:0 2em 2em 0}img.b_float_left_clear{clear:both;margin:0 2em 2em 0;display:block}img.b_float_right{float:right;margin:0 0 2em 2em}img.b_float_right_clear{clear:both;display:block;margin:0 0 2em auto}img.b_centered{clear:both;display:block;margin:0 auto 2em auto}img.b_circle{border-radius:50%}img.b_with_border{border:1px solid #ddd;padding:3px;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}span.olatFlashMovieViewer{max-width:100% !important;border:none !important}.mejs-container,.mejs-mediaelement video,.mejs-layers div,.me-cannotplay{max-width:100%}.b_clear_float,p.b_clear_float,div.b_clear_float{clear:both}html{position:relative;min-height:100%}body{min-height:100%;margin-bottom:80px}#o_main_wrapper{background:#fff;z-index:3}#o_main_wrapper #o_main_container{background:#fff}#o_main_wrapper #o_main_container #o_main_left{float:left;z-index:2;position:relative;background:#fff}#o_main_wrapper #o_main_container #o_main_left #o_main_left_content{padding:0 0 0 15px}#o_main_wrapper #o_main_container #o_main_left #o_main_left_toggle{position:absolute;display:none;right:0;top:70px;margin-right:-30px;font-size:25px;line-height:35px;text-align:center;width:30px;height:35px;z-index:3;border:1px solid #ddd;border-left:none;border-bottom-right-radius:4px;border-top-right-radius:4px;background-color:#fbfbfb;-webkit-box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);color:#337ab7}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas{background:#fbfbfb;-webkit-box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);min-width:250px}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas #o_main_left_content{padding:0 0 0 0}#o_main_wrapper #o_main_container #o_main_right{float:right;z-index:2;position:relative;background:inherit}#o_main_wrapper #o_main_container #o_main_right #o_main_right_content{padding:0 15px 0 0}#o_main_wrapper #o_main_container #o_main_center{position:relative;z-index:1;background:inherit}#o_main_wrapper #o_main_container #o_main_center h2:first-child{margin-top:0}@media screen and (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center{margin-left:0 !important}}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:0 15px}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content #o_main_center_content_inner{padding-bottom:15px}#o_main_wrapper #o_toplink{position:absolute;bottom:0;right:15px;text-align:center;z-index:3}@media (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:15px}}#o_back_wrapper,#o_preview_wrapper{margin-top:10px}#o_back_wrapper.o_toolbar .o_breadcrumb .breadcrumb,#o_preview_wrapper.o_toolbar .o_breadcrumb .breadcrumb{font-size:14px}#o_footer_wrapper{position:absolute;bottom:0;width:100%;height:70px;overflow:hidden;background-color:#f5f5f5;color:#999;line-height:16px;font-size:12px}#o_footer_wrapper a{color:#999}#o_footer_wrapper a:hover{color:#000}#o_footer_container{position:relative;padding-top:10px;min-height:70px;background:#f5f5f5;z-index:1}#o_footer_user{position:absolute;left:15px;top:10px;z-index:1}#o_footer_user #o_counter{white-space:nowrap}#o_footer_user #o_username{white-space:nowrap;margin-right:1em}#o_footer_version{position:absolute;right:15px;top:10px;text-align:right;z-index:1}@media (max-width: 767px){#o_footer_version{padding-top:10px;text-align:left}}#o_footer_powered{position:absolute;top:30px;right:15px;z-index:1}#o_footer_powered img{opacity:0.6;filter:alpha(opacity=60)}#o_footer_powered img:hover{opacity:1;filter:alpha(opacity=100)}#o_footer_impressum{position:absolute;top:10px;width:100%;text-align:center;z-index:-1}#o_footer_impressum i{display:none}#o_footer_textline{position:absolute;top:30px;width:100%;text-align:center;z-index:-1}#o_share{margin-top:10px}#o_share a{opacity:0.6;filter:alpha(opacity=60)}#o_share a:hover{opacity:1;filter:alpha(opacity=100)}#o_share a,#o_share_social_container a{color:#999;margin:0 0.25em 0 0}#o_share a:hover,#o_share_social_container a:hover{color:#000}@media (max-width: 767px){#o_counter,#o_footer_version,#o_share{display:none}#o_footer_impressum{top:30px;text-align:left}#o_footer_textline{top:50px;text-align:left}#o_footer_powered{top:10px}#o_footer_powered a:after{content:"\221E";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:14px}#o_footer_powered img{display:none}}#o_navbar_wrapper{z-index:4;border-top:1px solid #e7e7e7;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1)}#o_navbar_wrapper #o_navbar_container{position:relative}a.o_disabled.navbar-text{margin:0}.o_navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid #e7e7e7;background-color:#f8f8f8}.o_navbar:before,.o_navbar:after{content:" ";display:table}.o_navbar:after{clear:both}.o_navbar .o_navbar_tabs li{max-width:150px}.o_navbar .o_navbar_tabs li a{padding-right:30px}.o_navbar .o_navbar_tabs li a:first-child span{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o_navbar .o_navbar_tabs .o_icon-fw{position:absolute;top:15px;left:0.5em;padding-top:3px;width:1em;height:1em;display:none}.o_navbar .o_navbar_tabs .o_navbar_tab_close{position:absolute;top:15px;right:0.5em;padding:0;width:1em;height:1em}.o_navbar .o_navbar_tabs .o_navbar_tab_close i:before{color:#d9534f}.o_navbar .o_navbar_tabs .o_navbar_tab_close:hover i:before{color:#c9302c}.o_navbar .o_custom_navbar-brand{background-position:5px 0;background-repeat:no-repeat;height:50px;width:120px}.o_navbar #o_navbar_langchooser{color:#777;padding:7px 15px}.o_navbar #o_navbar_langchooser form span+div{display:inline}.o_navbar #o_navbar_tools_permanent #o_navbar_print a,.o_navbar #o_navbar_tools_permanent #o_navbar_impress a,.o_navbar #o_navbar_tools_permanent #o_navbar_help a{color:#777;padding-right:0}.o_navbar #o_navbar_tools_permanent #o_navbar_login a{color:#f0ad4e}.o_navbar .o_navbar_tools>#o_navbar_tools_permanent>li>a>span{display:none}@media (min-width: 768px){.o_navbar .o_navbar_tools li.o_portrait>a>span{display:inline}}.o_navbar #o_navbar_tools_personal .o_navbar_tool a,.o_navbar #o_navbar_tools_permanent .o_navbar_tool a{padding-right:5px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu a,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu a{padding-left:45px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .dropdown-menu a,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu .dropdown-menu a{padding-left:15px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .o_portrait,.o_navbar #o_navbar_tools_permanent #o_navbar_my_menu .o_portrait{position:absolute;left:7px;top:10px}.o_navbar #o_navbar_tools_personal .o_logout,.o_navbar #o_navbar_tools_permanent .o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas .o_navbar_tab_close{top:10px;right:10px}.o_navbar.o_navbar-offcanvas .o_navbar-right a{padding:3px 20px;color:#9d9d9d}.o_navbar.o_navbar-offcanvas .o_navbar-right a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-right a:focus{color:#fff;background-color:transparent}.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout:hover,.o_navbar.o_navbar-offcanvas .o_navbar-right a.o_logout:focus{color:#c9302c}.o_navbar.o_navbar-offcanvas .o_navbar-right a .o_icon-lg{font-size:1.0em;vertical-align:baseline}.o_navbar.o_navbar-offcanvas .o_navbar-right .divider{height:1px;margin:9px 0;overflow:hidden;background-color:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-header{padding-left:15px}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-toggle{display:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-menu{box-shadow:none;position:relative;top:0;left:0;display:block;float:none;background-color:#222;color:#9d9d9d;font-size:14px;border:none}.o_navbar.o_navbar-offcanvas .o_navbar-right .dropdown-menu .divider{background:none}.o_navbar.o_navbar-offcanvas .o_navbar-nav a{color:#9d9d9d;text-shadow:none}.o_navbar.o_navbar-offcanvas .o_navbar-nav a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav a:focus{background-color:transparent;color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .active a:focus{background-color:#090909;color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .o_navbar-link{color:#9d9d9d}.o_navbar.o_navbar-offcanvas .o_navbar-nav .o_navbar-link:hover{color:#fff}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a{color:#777}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a:hover,.o_navbar.o_navbar-offcanvas .o_navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}#o_navbar_impress a span,#o_navbar_search_opener a span{display:none}body.o_dmz #o_navbar_print a span,body.o_dmz #o_navbar_impress a span,body.o_dmz #o_navbar_help a span,body.o_dmz #o_navbar_search_opener a span{display:inline}.o_navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;-webkit-overflow-scrolling:touch}.o_navbar-collapse:before,.o_navbar-collapse:after{content:" ";display:table}.o_navbar-collapse:after{clear:both}.o_navbar-collapse.o_collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.o_navbar-offcanvas .o_navbar-collapse{width:auto;box-shadow:none;margin-top:10px;margin-right:-15px;margin-left:-15px}.o_navbar-brand{float:left;font-size:18px;line-height:20px;height:50px;color:#777}.o_navbar-brand:hover,.o_navbar-brand:focus{text-decoration:none;color:#5e5e5e;background-color:transparent}.o_navbar-toggle{position:relative;margin-right:15px;margin-left:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;border:1px solid #ddd;border-radius:4px;background-color:transparent;background-image:none}.o_navbar-toggle:hover,.o_navbar-toggle:focus{outline:none;background-color:#ddd}.o_navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px;background-color:#888}.o_navbar-toggle .icon-bar+.icon-bar{margin-top:4px}#o_navbar_left-toggle{float:left}#o_navbar_right-toggle{float:right}.o_navbar-link{color:#777}.o_navbar-link:hover{color:#333}.o_navbar-nav{margin:7.5px -15px}.o_navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px;color:#777}.o_navbar-nav>li>a:hover,.o_navbar-nav>li>a:focus{color:#333;background-color:transparent}.o_navbar-nav>.active>a,.o_navbar-nav>.active>a:hover,.o_navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar-nav>.disabled>a,.o_navbar-nav>.disabled>a:hover,.o_navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.o_navbar-nav>.open>a,.o_navbar-nav>.open>a:hover,.o_navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}.o_collapse .o_navbar-nav{float:left;margin:0}.o_collapse .o_navbar-nav>li{float:left}.o_collapse .o_navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.o_collapse .o_navbar-nav.o_navbar-right:last-child{margin-right:-15px}.o_collapse.o_navbar-collapse .o_navbar-left{float:left !important}.o_collapse.o_navbar-collapse .o_navbar-right{float:right !important}.o_navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (max-width: 767px){.o_navbar-form .form-group{margin-bottom:5px}}.o_collapse .o_navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.o_collapse .o_navbar-form.o_navbar-right:last-child{margin-right:-15px}.o_navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.o_navbar-fixed-bottom .o_navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.o_navbar-btn{margin-top:8px;margin-bottom:8px}.o_navbar-btn.btn-sm,.btn-group-sm>.o_navbar-btn.btn{margin-top:10px;margin-bottom:10px}.o_navbar-btn.btn-xs,.btn-group-xs>.o_navbar-btn.btn{margin-top:14px;margin-bottom:14px}.o_navbar-text{margin-top:15px;margin-bottom:15px;color:#777}.o_collapse .o_navbar-text{float:left;margin-left:15px;margin-right:15px}.o_collapse .o_navbar-text.o_navbar-right:last-child{margin-right:0}.o_dropdown_tab{position:relative}.o_dropdown_tab>a:first-child{padding-right:30px}.o_dropdown_tab>a:first-child .o_icon-fw{display:none;position:absolute;top:0;left:10px;padding-top:3px;line-height:20px}.o_dropdown_tab>a:first-child span{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o_dropdown_tab .o_navbar_tab_close{position:absolute;top:0px;right:10px;padding-left:0px;padding-right:0px;color:#d9534f;background-color:inherit}.o_dropdown_tab .o_navbar_tab_close:focus,.o_dropdown_tab .o_navbar_tab_close:hover{color:#c9302c;background-color:inherit}#o_navbar_more .dropdown-menu .divider:last-child{display:none}@media (min-width: 768px){#o_navbar_more .dropdown-menu{max-width:300px}}@media (max-width: 767px){#o_navbar_more>li{position:inherit}#o_navbar_more .dropdown-menu{left:0px;right:0px}#o_navbar_more .dropdown-menu a,#o_navbar_more .dropdown-menu i{line-height:30px}#o_navbar_more .dropdown-menu .o_navbar_tab_close{line-height:inherit}}.o_body_popup #o_topnav_printview{display:inline-block}.o_body_popup #o_topnav_close{float:right}.o_body_popup #o_topnav_close span{display:block}.o_body_popup #o_navbar_tools_permanent li>a{background-color:transparent}.o_toolbar{position:relative;margin-bottom:20px;margin-top:-10px;border:1px solid #e7e7e7}.o_toolbar:before,.o_toolbar:after{content:" ";display:table}.o_toolbar:after{clear:both}@media (min-width: 768px){.o_toolbar{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}}.o_toolbar .o_breadcrumb:before,.o_toolbar .o_breadcrumb:after{content:" ";display:table}.o_toolbar .o_breadcrumb:after{clear:both}.o_toolbar .o_breadcrumb .breadcrumb{margin-bottom:0;padding:5px 9px;font-size:11px;line-height:15px;border-radius:0;background:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close{float:right;position:relative;margin:0 0 0 15px;vertical-align:middle}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a{line-height:15px;color:#d9534f}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a:hover{color:#b52b27}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a i{font-size:16px}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close a span{display:none}.o_toolbar .o_breadcrumb .breadcrumb .o_breadcrumb_close:before{content:none}.o_toolbar .o_tools_container{text-align:center;min-height:37px;position:realtive;background-color:#f8f8f8;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:1px solid #e7e7e7}.o_toolbar .o_tools_container:before,.o_toolbar .o_tools_container:after{content:" ";display:table}.o_toolbar .o_tools_container:after{clear:both}@media (max-width: 991px){.o_toolbar .o_tools_container{min-height:35px}}@media (max-width: 767px){.o_toolbar .o_tools_container{min-height:22px;text-align:left}}.o_toolbar .o_tools_container a{color:#777;display:inline-block}.o_toolbar .o_tools_container a:hover{color:#333}.o_toolbar .o_tools_container a.o_disabled{color:#aaa !important}.o_toolbar .o_tools_container a.o_disabled:hover{color:#aaa !important}.o_toolbar .o_tools_container a.active{color:#337ab7;background-color:transparent}.o_toolbar .o_tools_container .dropdown-menu a{display:block}.o_toolbar .o_tools_container .dropdown-menu a.active{color:#337ab7;background-color:transparent}.o_toolbar .o_tools{margin-top:8px;margin-bottom:5px}.o_toolbar .o_tool,.o_toolbar .o_text{position:relative;margin:0 10px}.o_toolbar .o_tool:first-child,.o_toolbar .o_text:first-child{margin-left:0}.o_toolbar .o_tool:last-child,.o_toolbar .o_text:last-child{margin-right:0}.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:18px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:block;font-size:12px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{position:absolute;right:50%;top:-18px;margin-right:-12px;font-size:13px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:16px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{font-size:11px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{top:-16.5px;margin-right:-11px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:20px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:none}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{display:block;position:relative;top:0;left:0;margin-right:0}}.o_toolbar .o_tool .o_chelp,.o_toolbar .o_text .o_chelp{position:relative;top:-1em;vertical-align:top;color:#fff}.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{padding:0;margin-top:5px;border:1px solid #ccc;background-color:#eee}.o_toolbar .o_tool_next a,.o_toolbar .o_tool_previous a{color:#777}.o_toolbar .o_tool_next a:hover,.o_toolbar .o_tool_previous a:hover{color:#333}.o_toolbar .o_tool_next a.o_disabled,.o_toolbar .o_tool_previous a.o_disabled{color:#aaa !important}.o_toolbar .o_tool_next a.o_disabled:hover,.o_toolbar .o_tool_previous a.o_disabled:hover{color:#aaa !important}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:21px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{margin-top:4px}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:18px}}@media (max-width: 767px){.o_toolbar .o_tool_next,.o_toolbar .o_tool_previous{margin-top:0}.o_toolbar .o_tool_next i,.o_toolbar .o_tool_previous i{font-size:20px}}.o_toolbar .o_tool_previous{margin-left:10px;border-bottom-left-radius:4px;border-top-left-radius:4px;border-right:0}.o_toolbar .o_tool_next{border-bottom-right-radius:4px;border-top-right-radius:4px}.o_toolbar .o_tool_dropdown{margin:0 10px}.o_toolbar .o_tool_dropdown:first-child{margin-left:0}.o_toolbar .o_tool_dropdown:last-child{margin-right:0}.o_toolbar .o_tool_dropdown a.dropdown-toggle{position:relative}.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:18px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span{display:block;font-size:12px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{position:absolute;right:50%;top:4px;margin-right:-20px;font-size:14px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:16px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span,.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{font-size:11px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{top:4px;margin-right:-18px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool_dropdown a.dropdown-toggle{padding:0 10px 0 5px}.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:20px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span{display:none}}.o_toolbar .o_tool_dropdown .dropdown-menu{text-align:left}.o_toolbar .o_tools_left{float:left}.o_toolbar .o_tools_right{float:right}.o_toolbar .o_tools_right_edge{float:right}@media (max-width: 991px){.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tool span{max-width:10em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_toolbar .o_tool,.o_toolbar .o_text,.o_toolbar .o_tool_dropdown{margin:0 5px}}@media (max-width: 767px){.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tools .o_chelp{top:0;vertical-align:top}.o_toolbar .o_tools_center{float:left}.o_toolbar .o_tool,.o_toolbar .o_text,.o_toolbar .o_tool_dropdown{margin:0 0;position:static}.o_toolbar .o_tool_dropdown .dropdown-menu{left:0px;right:0px}.o_toolbar .o_tool_dropdown .dropdown-menu a,.o_toolbar .o_tool_dropdown .dropdown-menu i{line-height:30px}.o_toolbar .o_tool_dropdown .dropdown-menu .o_navbar_tab_close{line-height:inherit}}body{overflow-x:hidden}.o_container_offcanvas{position:relative;max-width:1324px;-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;-m-transition:all .25s ease-in-out;transition:all .25s ease-in-out}#o_offcanvas_right{position:absolute;top:0;right:-250px;width:250px;padding:15px 15px;background-color:#222;color:#9d9d9d;border:1px solid #090909;-webkit-box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);min-height:100%;z-index:10;display:none}#o_offcanvas_right:before,#o_offcanvas_right:after{content:" ";display:table}#o_offcanvas_right:after{clear:both}@media screen and (max-width: 767px){.row-offcanvas{position:relative;-webkit-transition:all .25s ease-out;-moz-transition:all .25s ease-out;transition:all .25s ease-out}.row-offcanvas-right{right:0}.row-offcanvas-right .sidebar-offcanvas{right:-50%}.row-offcanvas-right.active{right:50%}.row-offcanvas-left{left:0}.row-offcanvas-left .sidebar-offcanvas{left:-50%}.row-offcanvas-left.active{left:50%}.sidebar-offcanvas{position:absolute;top:0;width:50%}}.o_info,.b_info,p.b_info,div.b_info,.o_form .o_info,.o_togglebox_wrapper div.o_togglebox_content,div.o_qti_item_itemfeedback{margin:20px 0;padding:20px;border-left:3px solid #777;background-color:#eee}.o_info h2,.o_info h3,.o_info h4,.o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_info h2,.o_info h5,.b_info h2,.o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback h2,.b_info h3,.o_form .o_info h3,.o_togglebox_wrapper div.o_togglebox_content h3,div.o_qti_item_itemfeedback h3,.b_info h4,.o_form .o_info h4,.o_togglebox_wrapper div.o_togglebox_content h4,div.o_qti_item_itemfeedback h4,.b_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_info h2,.o_form .o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback .o_cal .fc-header-title h2,.o_cal .fc-header-title div.o_qti_item_itemfeedback h2,.b_info h5,.o_form .o_info h5,.o_togglebox_wrapper div.o_togglebox_content h5,div.o_qti_item_itemfeedback h5{color:#777}.o_note,.b_note,p.b_note,div.b_note,.o_form .o_desc,.o_course_run .o_statusinfo,.o_course_stats .o_desc{margin:20px 0;padding:20px;border-left:3px solid #31708f;background-color:#d9edf7}.o_note h2,.o_note h3,.o_note h4,.o_note .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_note h2,.o_note h5,.b_note h2,.o_form .o_desc h2,.o_course_run .o_statusinfo h2,.o_course_stats .o_desc h2,.b_note h3,.o_form .o_desc h3,.o_course_run .o_statusinfo h3,.o_course_stats .o_desc h3,.b_note h4,.o_form .o_desc h4,.o_course_run .o_statusinfo h4,.o_course_stats .o_desc h4,.b_note .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_note h2,.o_form .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_desc h2,.o_course_run .o_statusinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_statusinfo h2,.o_course_stats .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_stats .o_desc h2,.b_note h5,.o_form .o_desc h5,.o_course_run .o_statusinfo h5,.o_course_stats .o_desc h5{color:#31708f}.o_important,.b_important,p.b_important,div.b_important,.o_bc_empty,.o_course_run .o_no_scoreinfo{margin:20px 0;padding:20px;border-left:3px solid #F4D000;background-color:#FFF1A4}.o_important h2,.o_important h3,.o_important h4,.o_important .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_important h2,.o_important h5,.b_important h2,.o_bc_empty h2,.o_course_run .o_no_scoreinfo h2,.b_important h3,.o_bc_empty h3,.o_course_run .o_no_scoreinfo h3,.b_important h4,.o_bc_empty h4,.o_course_run .o_no_scoreinfo h4,.b_important .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_important h2,.o_bc_empty .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_bc_empty h2,.o_course_run .o_no_scoreinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_no_scoreinfo h2,.b_important h5,.o_bc_empty h5,.o_course_run .o_no_scoreinfo h5{color:#F4D000}.o_success,.b_success,p.b_success,div.b_success{margin:20px 0;padding:20px;border-left:3px solid #3c763d;background-color:#dff0d8}.o_success h2,.o_success h3,.o_success h4,.o_success .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_success h2,.o_success h5,.b_success h2,.b_success h3,.b_success h4,.b_success .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_success h2,.b_success h5{color:#3c763d}.o_warning,.b_warning,p.b_warning,div.b_warning,.o_form .o_warning{margin:20px 0;padding:20px;border-left:3px solid #8a6d3b;background-color:#fcf8e3}.o_warning h2,.o_warning h3,.o_warning h4,.o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_warning h2,.o_warning h5,.b_warning h2,.o_form .o_warning h2,.b_warning h3,.o_form .o_warning h3,.b_warning h4,.o_form .o_warning h4,.b_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_warning h2,.o_form .o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_warning h2,.b_warning h5,.o_form .o_warning h5{color:#8a6d3b}.o_error,.b_error,p.b_error,div.b_error{margin:20px 0;padding:20px;border-left:3px solid #a94442;background-color:#f2dede}.o_error h2,.o_error h3,.o_error h4,.o_error .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_error h2,.o_error h5,.b_error h2,.b_error h3,.b_error h4,.b_error .o_cal .fc-header-title h2,.o_cal .fc-header-title .b_error h2,.b_error h5{color:#a94442}div.o_callout_overlay{position:fixed;top:0;left:0;width:100%;height:100%;zoom:1;background:#000;opacity:0;filter:alpha(opacity=0)}.o_alert_info{position:fixed;top:-100%;left:0;display:none;z-index:2000;width:100%;text-align:center}.o_alert_info .alert{position:relative;width:auto;margin:0 auto;text-align:left;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.o_alert_info .alert .o_icon_close{float:right;color:#777}.o_alert_info .alert .o_icon_close:hover{color:#555}@media (min-width: 768px){.o_alert_info .alert{width:600px}}#o_msg_sticky,#o_msg_sticky_preview{position:relative;color:#a94442;background-color:#f2dede;border:1px solid #ebccd1;padding:10px 16px 10px 60px;min-height:40px;margin:-20px 0 20px 0}#o_msg_sticky .o_icon_info_msg,#o_msg_sticky_preview .o_icon_info_msg{position:absolute;left:10px;top:5px;font-size:40px}#o_msg_sticky.o_msg_sticky_fullscreen,#o_msg_sticky_preview.o_msg_sticky_fullscreen{margin-top:0}@media (min-width: 768px){.modal .o_modal_fullwidth{width:90%}}@media (min-width: 992px){.modal .o_modal_fullwidth{width:80%}}.modal .modal-header h4,.modal .modal-header .o_cal .fc-header-title h2,.o_cal .fc-header-title .modal .modal-header h2{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.o_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_tree a{color:#777;background-color:none}.o_tree a:hover,.o_tree a:focus{color:#333}.o_tree .o_tree_link{background-color:none}.o_tree .o_tree_link:hover,.o_tree .o_tree_link:focus{background-color:#f8f8f8}.o_tree .o_tree_link:first-child{background-color:transparent}.o_tree .o_tree_link:last-child:hover,.o_tree .o_tree_link:last-child:focus{background-color:#f8f8f8}.o_tree .o_insertion_point>a>span{padding:5px;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.o_tree .o_insertion_source>a>span.o_tree_item,.o_tree .o_insertion_source>a>span.o_dnd_item{border-bottom:solid #f90 4px;background-color:#fefbf6}.o_tree ul{margin:0;padding:0;list-style-type:none}.o_tree ul li{margin:0;padding:0;white-space:nowrap}.o_tree ul li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_tree ul li div.popover{position:absolute;left:auto;right:0}.o_tree ul li div a.o_tree_oc_l0{position:absolute;top:10px;left:-4px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l0,.o_tree ul .o_tree_level_close.b_tree_oc_l0{z-index:10}.o_tree ul li div a.o_tree_oc_l1{position:absolute;top:10px;left:11px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l1,.o_tree ul .o_tree_level_close.b_tree_oc_l1{z-index:10}.o_tree ul li div a.o_tree_oc_l2{position:absolute;top:10px;left:26px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l2,.o_tree ul .o_tree_level_close.b_tree_oc_l2{z-index:10}.o_tree ul li div a.o_tree_oc_l3{position:absolute;top:10px;left:41px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l3,.o_tree ul .o_tree_level_close.b_tree_oc_l3{z-index:10}.o_tree ul li div a.o_tree_oc_l4{position:absolute;top:10px;left:56px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l4,.o_tree ul .o_tree_level_close.b_tree_oc_l4{z-index:10}.o_tree ul li div a.o_tree_oc_l5{position:absolute;top:10px;left:71px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l5,.o_tree ul .o_tree_level_close.b_tree_oc_l5{z-index:10}.o_tree ul li div a.o_tree_oc_l6{position:absolute;top:10px;left:86px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l6,.o_tree ul .o_tree_level_close.b_tree_oc_l6{z-index:10}.o_tree ul li div a.o_tree_oc_l7{position:absolute;top:10px;left:101px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l7,.o_tree ul .o_tree_level_close.b_tree_oc_l7{z-index:10}.o_tree ul li div a.o_tree_oc_l8{position:absolute;top:10px;left:116px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l8,.o_tree ul .o_tree_level_close.b_tree_oc_l8{z-index:10}.o_tree ul li div a.o_tree_oc_l9{position:absolute;top:10px;left:131px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l9,.o_tree ul .o_tree_level_close.b_tree_oc_l9{z-index:10}.o_tree ul li div a.o_tree_oc_l10{position:absolute;top:10px;left:146px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l10,.o_tree ul .o_tree_level_close.b_tree_oc_l10{z-index:10}.o_tree ul li div a.o_tree_oc_l11{position:absolute;top:10px;left:161px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l11,.o_tree ul .o_tree_level_close.b_tree_oc_l11{z-index:10}.o_tree ul li div span.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_tree ul li div span.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_tree ul li div span.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_tree ul li div span.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_tree ul li div span.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_tree ul li div span.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_tree ul li div span.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_tree ul li div span.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_tree ul li div span.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_tree ul li div span.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_tree ul li div span.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_tree ul li div span.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_tree ul span.o_tree_leaf{display:none}.o_tree ul span.o_tree_link>input[type=checkbox]{margin-right:5px}.o_tree ul li .badge{position:absolute;font-size:70%}.o_tree ul li .badge:before{content:none}.o_tree ul li .badge.o_badge_1{top:3px;right:1px}.o_tree ul li .badge.o_badge_2{bottom:3px;right:1px}.o_tree ul li .badge.o_badge_3{top:3px;right:25px}.o_tree ul li .badge.o_badge_4{bottom:3px;right:25px}.o_tree ul li div.o_dnd_sibling{margin:0;padding:0;border-bottom:none}.o_tree ul li .active.o_tree_link{background-color:none;font-weight:bold}.o_tree ul li .active.o_tree_link a{color:#337ab7}.o_tree ul li .active.o_tree_link:hover,.o_tree ul li .active.o_tree_link:focus{background-color:#eee}.o_tree ul li .active.o_tree_link:hover a,.o_tree ul li .active.o_tree_link:focus a{color:#23527c}.o_tree ul li .active_parent.o_tree_link{font-weight:bold}.o_tree ul li .active_parent.o_tree_link a{color:#777}.o_tree ul li .active_parent.o_tree_link a:hover,.o_tree ul li .active_parent.o_tree_link a:focus{color:#333}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l0{left:6px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l1{left:21px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l2{left:36px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l3{left:51px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l4{left:66px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l5{left:81px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l6{left:96px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l7{left:111px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l8{left:126px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l9{left:141px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l10{left:156px}.o_tree.o_tree_root_hidden ul li div .o_tree_oc_l11{left:171px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l0{padding:10px 2px 10px 20px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l1{padding:10px 2px 10px 35px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l2{padding:10px 2px 10px 50px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l3{padding:10px 2px 10px 65px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l4{padding:10px 2px 10px 80px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l5{padding:10px 2px 10px 95px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l6{padding:10px 2px 10px 110px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l7{padding:10px 2px 10px 125px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l8{padding:10px 2px 10px 140px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l9{padding:10px 2px 10px 155px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l10{padding:10px 2px 10px 170px}.o_tree.o_tree_root_hidden ul li div span.o_tree_l11{padding:10px 2px 10px 185px}.o_tree .o_dnd_item{cursor:move;z-index:100}.o_tree .o_dnd_proxy{opacity:0.4;filter:alpha(opacity=40);background-color:#f0ad4e;padding:5px 10px 5px 10px;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.o_tree .o_dnd_item.o_dnd_over{background-color:#ffff60}.o_tree .o_dnd_sibling{height:7px;width:100%}.o_tree .o_dnd_sibling.o_dnd_over{background:transparent url(../light/images/arrow_dd.png) top left no-repeat}.o_tree .o_dnd_l1{margin-left:0 !important}.o_tree .o_dnd_l2{margin-left:1em !important}.o_tree .o_dnd_l3{margin-left:2em !important}.o_tree .o_dnd_l4{margin-left:3em !important}.o_tree .o_dnd_l5{margin-left:4em !important}.o_tree .o_dnd_l6{margin-left:5em !important}.o_tree .o_dnd_l7{margin-left:6em !important}.o_tree .o_dnd_l8{margin-left:7em !important}.o_tree .o_dnd_l9{margin-left:8em !important}.o_tree .o_dnd_l10{margin-left:9em !important}.o_tree .o_dnd_l11{margin-left:10em !important}.o_tree.o_tree_insert_tool span.o_tree_link a{display:block}.o_offcanvas .o_tree{border:0}.o_selection_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_selection_tree ul{margin:0;padding:0;list-style-type:none}.o_selection_tree li{margin:0;padding:0;white-space:nowrap}.o_selection_tree li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_selection_tree li>div>span.o_tree_l0,.o_selection_tree li>div>div.checkbox.o_tree_l0,.o_selection_tree li>div>div.radio.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_selection_tree li>div>span.o_tree_l1,.o_selection_tree li>div>div.checkbox.o_tree_l1,.o_selection_tree li>div>div.radio.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_selection_tree li>div>span.o_tree_l2,.o_selection_tree li>div>div.checkbox.o_tree_l2,.o_selection_tree li>div>div.radio.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_selection_tree li>div>span.o_tree_l3,.o_selection_tree li>div>div.checkbox.o_tree_l3,.o_selection_tree li>div>div.radio.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_selection_tree li>div>span.o_tree_l4,.o_selection_tree li>div>div.checkbox.o_tree_l4,.o_selection_tree li>div>div.radio.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_selection_tree li>div>span.o_tree_l5,.o_selection_tree li>div>div.checkbox.o_tree_l5,.o_selection_tree li>div>div.radio.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_selection_tree li>div>span.o_tree_l6,.o_selection_tree li>div>div.checkbox.o_tree_l6,.o_selection_tree li>div>div.radio.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_selection_tree li>div>span.o_tree_l7,.o_selection_tree li>div>div.checkbox.o_tree_l7,.o_selection_tree li>div>div.radio.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_selection_tree li>div>span.o_tree_l8,.o_selection_tree li>div>div.checkbox.o_tree_l8,.o_selection_tree li>div>div.radio.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_selection_tree li>div>span.o_tree_l9,.o_selection_tree li>div>div.checkbox.o_tree_l9,.o_selection_tree li>div>div.radio.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_selection_tree li>div>span.o_tree_l10,.o_selection_tree li>div>div.checkbox.o_tree_l10,.o_selection_tree li>div>div.radio.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_selection_tree li>div>span.o_tree_l11,.o_selection_tree li>div>div.checkbox.o_tree_l11,.o_selection_tree li>div>div.radio.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_breadcrumb{position:relative}.o_breadcrumb .o_breadcrumb_close{float:right;position:relative;margin:0 0 0 15px;vertical-align:middle}.o_breadcrumb .o_breadcrumb_close a{line-height:15px;color:#d9534f}.o_breadcrumb .o_breadcrumb_close a:hover{color:#b52b27}.o_breadcrumb .o_breadcrumb_close a i{font-size:16px}.o_breadcrumb .o_breadcrumb_close a span{display:none}.o_breadcrumb .o_breadcrumb_close:before{content:none}.o_form .o_icon_mandatory{margin-right:0.25em}.o_form .o_form_chelp{padding-left:0.25em;margin-right:-1.25em}.o_form .o_form_example{font-size:90%}.o_form .o_error{margin-top:1px;margin-bottom:0;padding:10px}.o_form hr.o_spacer_noline{border-top:1px solid transparent}.o_form hr.o_spacer.form,.o_form hr.o_spacer_noline.form{margin-top:0px;margin-bottom:0px}.o_form .form-group.o_omit_margin{margin-bottom:0}.o_form .o_date{position:relative;padding-right:34px}.o_form .o_date.form-inline .form-group,.o_form .o_date.o_navbar-form .form-group{margin-left:0}.o_form input.o_date_ms{width:3em}.o_form .o_date.form-inline .o_date_ms.form-group,.o_form .o_date.o_navbar-form .o_date_ms.form-group{margin-left:25px}.o_form .has-feedback .o_date.form-inline .form-control.o_date_ms,.o_form .has-feedback .o_date.o_navbar-form .form-control.o_date_ms{padding-right:0}.o_form .o_form_element.form-inline .o_form_element.form-group,.o_form .o_form_element.o_navbar-form .o_form_element.form-group{margin-left:25px}.o_form .input-group.o_date_picker{width:16em}.o_form .o_filepreview{margin-bottom:10px}.o_form .o_fileinput{cursor:pointer;position:relative}.o_form .o_fileinput .o_fakechooser{position:relative;z-index:1}.o_form .o_fileinput .o_realchooser{position:absolute;top:0;right:0;z-index:2;opacity:0;filter:alpha(opacity=0)}.o_form .o_fileinput .o_realchooser.o_chooser_with_delete{right:38px}.o_centered_form{text-align:center}.o_centered_form fieldset.o_form{display:inline-block;text-align:left}.o_choice_checkrow,.o_choice_textrow{vertical-align:text-top;padding-bottom:2px}.o_choice_textrow{padding-left:1em}.o_togglecheck a{white-space:nowrap}.o_catalog .o_catalog_delete_img{position:relative;top:-0.5em}.o_button_dirty{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_button_dirty:hover,.o_button_dirty:focus,.o_button_dirty.focus,.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{background-image:none}.o_button_dirty.disabled,.o_button_dirty.disabled:hover,.o_button_dirty.disabled:focus,.o_button_dirty.disabled.focus,.o_button_dirty.disabled:active,.o_button_dirty.disabled.active,.o_button_dirty[disabled],.o_button_dirty[disabled]:hover,.o_button_dirty[disabled]:focus,.o_button_dirty[disabled].focus,.o_button_dirty[disabled]:active,.o_button_dirty[disabled].active,fieldset[disabled] .o_button_dirty,fieldset[disabled] .o_button_dirty:hover,fieldset[disabled] .o_button_dirty:focus,fieldset[disabled] .o_button_dirty.focus,fieldset[disabled] .o_button_dirty:active,fieldset[disabled] .o_button_dirty.active{background-color:#f0ad4e;border-color:#eea236}.o_button_dirty .badge{color:#f0ad4e;background-color:#fff}.o_button_toggle{border:1px solid #777;border-top-right-radius:9px;border-top-left-radius:9px;border-bottom-right-radius:9px;border-bottom-left-radius:9px;background:#eee;display:inline-block;height:18px;line-height:16px;font-size:16px;text-align:left;padding:0 0.5em 0 0;margin:0}.o_button_toggle i{color:#777;text-shadow:1px 0 2px rgba(0,0,0,0.25)}.o_button_toggle span{line-height:16px;vertical-align:top;font-size:60%;color:#777;text-transform:uppercase}.o_button_toggle.o_on{text-align:right;padding:0 0 0 0.5em}.o_button_toggle.o_on i{color:#337ab7;text-shadow:-1px 0 2px rgba(0,0,0,0.25)}.o_table_wrapper{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_table_wrapper.o_table_flexi .o_table_body{margin-top:20px}.o_table_wrapper.o_table_flexi .table{margin-top:20px}.o_table_wrapper.o_table_flexi .table td ul{margin:0}.o_table_wrapper.o_table_edit table tbody{border-top:solid #f90 4px;background-color:#fefbf6}.o_table_wrapper .o_table_search{max-width:50em}.o_table_wrapper .o_table_footer .o_table_pagination{text-align:center}.o_table_wrapper .o_table_rows_infos{float:left;padding-left:0;padding-right:20px;margin:20px 0}.o_table_wrapper .o_row_selected td{background-color:#dff0d8 !important}.o_table_wrapper .o_table{margin-bottom:0}.o_table_wrapper .o_marked{font-weight:bold}.o_table_wrapper .table{margin-bottom:0}.o_table_wrapper th{color:#333}@media (max-width: 767px){.o_table_wrapper .o_table_rows_infos{clear:both}}a.o_orderby,a.o_orderby:hover{color:#333;text-decoration:none}a.o_orderby.o_orderby_asc,a.o_orderby.o_orderby_desc,a.o_orderby:hover.o_orderby_asc,a.o_orderby:hover.o_orderby_desc{border-bottom:1px solid #ddd}.o_table_row_count{padding-top:6px;padding-bottom:6px;vertical-align:middle}.o_table_row_details td{background-color:white !important}.o_table_config{font-size:12px}.o_table_buttons{text-align:center}.o_table_buttons input{margin-right:1em}.o_table_buttons input:last-child{margin-right:0}.o_table_tools{margin-left:6px}.o_table_tools_indications{margin-left:10px;padding-top:3px;font-size:66%}.o_table_count{max-width:20em;float:left;padding:0 15px}.o_info .table-bordered td,o_note .table-bordered td,o_important .table-bordered td,o_warning .table-bordered td,o_error .table-bordered td{border-color:#333}.panel .o_table_layout{border-top:1px solid #ddd;padding-top:6px}.panel .o_table_count{padding:0 15px}#o_navbar_imclient .o_im_messages{float:left}#o_navbar_imclient #o_im_message,#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_summary{float:left;position:relative;padding:15px 3px}#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_message{padding-left:15px}#o_navbar_imclient #o_im_summary .badge{color:#fff;background-color:#777}#o_navbar_imclient #o_im_status li>a>span{display:inline}#o_navbar_imclient #o_im_status div.o_chelp_wrapper{right:0.5em}#o_navbar_imclient #o_im_message a:hover,#o_navbar_imclient #o_im_message a:focus{text-decoration:none}#o_navbar_imclient #o_im_message .o_icon_message{color:#d9534f}#o_navbar_imclient #o_im_message .o_icon_message:hover{color:#f4c37d}.o_im_load_history{margin-bottom:6px}.o_im_load_history .o_label{font-size:12px;padding-right:0.5em;line-height:1.5em;color:#777}.o_im_chat_history{height:170px;font-size:90%;border:1px solid #eee;margin:0 0 1em 0;overflow:scroll;overflow-x:auto}.o_im_message_group{padding:3px 3px 3px 40px;min-height:40px;position:relative;border-top:1px solid #eee;background:#fff}.o_im_message_group.o_odd{background:#F4F4F4}.o_im_message_group .o_portrait{position:absolute;top:3px;left:3px}.o_im_message_group .o_im_from{color:#777;font-size:12px;font-weight:bold}.o_im_message_group .o_im_from:hover{color:#5e5e5e}.o_im_message_group div.o_im_body{padding:3px 0 3px 0;font-size:12px}.o_im_message_group div.o_im_body .o_date{float:right;color:#777;font-size:9px}.o_groupchat_roster{font-size:12px}.o_groupchat_roster li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.o_groupchat_roster li.o_vip{color:#3c763d}.o_groupchat_roster li.o_anonymous{color:#31708f}.o_im_buddieslist .o_im_buddieslist_toggler .btn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_im_buddieslist ul{font-size:12px}.o_im_buddieslist ul ul{padding-left:1em}.o_im_buddieslist ul a{color:#337ab7}.o_im_buddieslist ul a:hover{color:#23527c}.o_flag{position:relative;top:1px;display:inline-block;line-height:1;width:16px;height:16px;background-repeat:no-repeat;background-position:0 100%}option.o_with_flag{padding-left:23px;min-height:16px;background-repeat:no-repeat;background-position:2px 50%}.o_flag_en{background-image:url("../light/images/flags/gb.png")}.o_flag_de{background-image:url("../light/images/flags/de.png")}.o_flag_fr{background-image:url("../light/images/flags/fr.png")}.o_flag_it{background-image:url("../light/images/flags/it.png")}.o_flag_es{background-image:url("../light/images/flags/es.png")}.o_flag_da{background-image:url("../light/images/flags/dk.png")}.o_flag_cs{background-image:url("../light/images/flags/cz.png")}.o_flag_el{background-image:url("../light/images/flags/gr.png")}.o_flag_ee{background-image:url("../light/images/flags/ee.png")}.o_flag_ru{background-image:url("../light/images/flags/ru.png")}.o_flag_pl{background-image:url("../light/images/flags/pl.png")}.o_flag_zh_CN{background-image:url("../light/images/flags/cn.png")}.o_flag_zh_TW{background-image:url("../light/images/flags/tw.png")}.o_flag_lt{background-image:url("../light/images/flags/lt.png")}.o_flag_fa{background-image:url("../light/images/flags/ir.png")}.o_flag_pt_PT{background-image:url("../light/images/flags/pt.png")}.o_flag_pt_BR{background-image:url("../light/images/flags/br.png")}.o_flag_tr{background-image:url("../light/images/flags/tr.png")}.o_flag_hu{background-image:url("../light/images/flags/hu.png")}.o_flag_sq{background-image:url("../light/images/flags/al.png")}.o_flag_in{background-image:url("../light/images/flags/id.png")}.o_flag_ar{background-image:url("../light/images/flags/eg.png")}.o_flag_rm{background-image:url("../light/images/flags/rm.png")}.o_flag_af{background-image:url("../light/images/flags/za.png")}.o_flag_vi{background-image:url("../light/images/flags/vn.png")}.o_flag_mn{background-image:url("../light/images/flags/mn.png")}.o_flag_iw{background-image:url("../light/images/flags/il.png")}.o_flag_ko{background-image:url("../light/images/flags/kr.png")}.o_flag_nl_NL{background-image:url("../light/images/flags/nl.png")}.o_flag_jp{background-image:url("../light/images/flags/jp.png")}.o_flag_nb_NO{background-image:url("../light/images/flags/no.png")}.o_flag_et_EE{background-image:url("../light/images/flags/ee.png")}.o_flag_bg{background-image:url("../light/images/flags/bg.png")}.o_flag_hi_IN_ASIA{background-image:url("../light/images/flags/in.png")}.o_flag_ar_LB{background-image:url("../light/images/flags/lb.png")}.o_flag_gl_ES{background-image:url("../light/images/flags/galicia.png")}.o_flag_sk{background-image:url("../light/images/flags/sk.png")}.o_rating .o_rating_title{font-size:12px}.o_rating .o_rating_items{white-space:nowrap}.o_rating .o_rating_items .o_icon{color:#f0ad4e}.o_rating .o_rating_items .o_icon:hover{color:#337ab7}.o_rating .o_rating_items .o_legend{margin-left:1em;font-size:12px;line-height:normal}.o_rating .o_rating_explanation{font-size:12px;color:#777}@media (max-width: 991px){.o_rating .o_rating_title,.o_rating .o_rating_explanation{display:none}}.o_comments .o_comment_wrapper .o_avatar{float:left;margin:0 1em 0 0}.o_comments .o_comment_wrapper .o_reply,.o_comments .o_comment_wrapper .o_delete{float:right}.o_comments .o_comment_wrapper .o_comment_wrapper{margin-left:16px}.o_ratings_and_comments .o_rating_wrapper{vertical-align:middle;display:inline-block}.o_ratings_and_comments a.o_comments{margin-left:10px;position:relative;top:0.1em}.d3chart .bar{shape-rendering:crispEdges}.d3chart .bar_default_light{fill:#64a0d3}.d3chart .bar_default{fill:#337ab7}.d3chart .bar_default_dark{fill:#23527c}.d3chart .axis{font:12px sans-serif}.d3chart .axis path,.d3chart .axis line{fill:none;stroke:#000;shape-rendering:crispEdges}.o_forum_peekview .o_quote_wrapper,.o_forum_peekview .b_quote_wrapper{display:none}.o_forum_thread_sticky{font-weight:bold}.o_forum_switch{font-size:12px}.o_forum_toolbar{margin-bottom:6px;float:left}.o_forum_fulltextsearch{float:right}@media (max-width: 767px){.o_forum_fulltextsearch{float:left}.o_forum_toolbar .o_forum_tool span{display:none}}.o_forum .o_mark,.o_forum .o_ep_collect{float:right;position:relative;width:2em;margin-left:12px}.o_forum .o_portrait{float:left;margin-right:16px}.o_forum .o_portrait_avatar{width:70px;height:70px}.o_forum .o_newindicator{font-size:10px;color:#5cb85c;text-transform:uppercase;padding-left:1em;vertical-align:text-top;white-space:nowrap}.o_forum .o_author,.o_forum .o_date{display:inline-block;color:#777}.o_forum .o_date{font-size:12px}.o_forum .o_modified{color:#8a6d3b;font-size:12px;font-style:italic}.o_forum .o_forum_message{margin-bottom:20px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_forum .o_forum_message_new{-webkit-box-shadow:0 1px 10px rgba(92,184,92,0.3);box-shadow:0 1px 10px rgba(92,184,92,0.3)}.o_forum .o_forum_message_highlight{-webkit-box-shadow:0 1px 10px rgba(240,173,78,0.5);box-shadow:0 1px 10px rgba(240,173,78,0.5)}.o_forum .o_forum_message_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:3px;border-top-left-radius:3px}.o_forum .o_forum_message_title{margin-top:0}.o_forum .o_forum_message_body{padding:10px 15px}.o_forum .o_forum_message_attachments{border-top:1px solid #ddd;padding:10px 15px;font-size:12px;background-color:#f7f7f9}.o_forum .o_attachment{position:relative;max-width:250px;vertical-align:top;margin:6px 12px 10px 0}.o_forum .o_attachment img{margin-top:6px}.o_forum .o_filename{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_forum .o_icon_enlarge{position:absolute;left:1em;bottom:1em;text-shadow:1px 1px 2px #fff, -1px 1px 2px #fff, 1px -1px 2px #fff, -1px -1px 2px #fff}@media (min-width: 768px) and (max-width: 991px){.o_forum .o_attachments{font-size:10px}.o_forum .o_attachment{max-width:200px}.o_forum .o_attachment img{max-width:150px}.o_forum .o_filename{max-width:200px}}@media (max-width: 767px){.o_forum .o_attachments{font-size:9px}.o_forum .o_attachment{max-width:150px}.o_forum .o_attachment img{max-width:100px}.o_forum .o_filename{max-width:150px}}.o_quote_wrapper,.b_quote_wrapper{position:relative;margin:10px 0}.o_quote_author,.b_quote_author{color:#777;font-size:12px}.o_quote_author:before,.b_quote_author:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"";font-size:21px;padding-right:0.5em}blockquote.o_quote,blockquote.b_quote{color:#555;font-size:12px;margin-top:6px;padding:0 12px}a.o_chelp{display:inline-block;padding:1px 3px;text-align:center;vertical-align:middle;white-space:nowrap;font-size:10px;font-weight:normal;line-height:15px;color:#fff;background-color:#337ab7;border:1px solid #2e6da4;border-radius:2px;cursor:help;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a.o_chelp:active,a.o_chelp:hover,a.o_chelp:focus{text-decoration:none;color:#fff;background-color:#2a6598;border-color:#204d74}a.o_chelp i{font-size:10px !important}.o_chelp_wrapper{position:relative;float:right;display:inline-block;line-height:normal;margin-bottom:10px;margin-left:10px}.o_form_chelp,.o_chelp_tooltip{color:#737373}.o_iframedisplay iframe{width:100%}.o_singlepage .o_edit{position:absolute;top:10px;right:37px}.o_content_popup{position:absolute;top:10px;right:12px}.o_module_cp_wrapper .o_tools{position:absolute;top:10px;right:12px;text-align:right;vertical-align:middle}.o_module_cp_wrapper .o_tools .o_search_wrapper{display:inline-block;position:relative;top:-2px}ul.o_dropdown{margin:-5px -14px}ul.o_dropdown .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}ul.o_dropdown>li>a{display:block;padding:5px 14px;clear:both;font-weight:normal;line-height:1.42857;color:#333;background:#fff;white-space:nowrap}ul.o_dropdown>li>a:hover,ul.o_dropdown>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.badge.o_scorm_completed{background-color:#3c763d}.badge.o_scorm_failed{background-color:#a94442}.badge.o_scorm_incomplete{background-color:#8a6d3b}.badge.o_scorm_not_attempted{background:none}.o_bc_meta h5,.o_bc_meta .o_author,.o_bc_meta .o_comment,.tooltip h5,.tooltip .o_author,.tooltip .o_comment{color:#fff;margin:5px 0}.o_bc_meta .o_thumbnail,.tooltip .o_thumbnail{width:200px;height:200px;background-color:#fff;margin:0 -5px}.o_htmleditor .o_metadata{border:1px solid #999;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom:0;background:#eee;position:relative;top:1px;padding:5px}.o_htmleditor .o_metadata #o_filename{float:left}.o_htmleditor .o_metadata .o_lastmodified{float:right;color:#777;line-height:1.42857}.o_htmleditor #o_save{margin-top:10px;text-align:center}.o_htmleditor #o_save input{margin-right:1em}.o_htmleditor #o_save input:last-child{margin-right:0}.o_notifications_news_wrapper .o_notifications_news_subscription{margin:10px 0}.o_notifications_news_wrapper .o_notifications_news_subscription h4 i,.o_notifications_news_wrapper .o_notifications_news_subscription .o_cal .fc-header-title h2 i,.o_cal .fc-header-title .o_notifications_news_wrapper .o_notifications_news_subscription h2 i{display:none}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_context{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content{margin-left:1.5em;position:relative}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_icon{position:absolute;left:-1.5em;line-height:1.5em;top:0}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_date{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_url{margin-left:1.5em}.o_noti{margin:6px 0 6px 12px;float:right;color:#777}.o_noti .o_label{color:#777;cursor:help}@media (max-width: 767px){.o_noti .o_label span{display:none}}.panel-body .o_noti{margin:0}.o_portrait{display:inline-block}.o_portrait img{border-radius:50%;border:none;background-color:#eee;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.o_portrait_name{margin-top:6px}.o_block_inline .o_portait,.o_block_inline .o_portrait_name,.o_block_inline .o_portrait_image,.o_block_inline_right .o_portait,.o_block_inline_right .o_portrait_name,.o_block_inline_right .o_portrait_image,.o_block_inline_left .o_portait,.o_block_inline_left .o_portrait_name,.o_block_inline_left .o_portrait_image,.o_block_inline_both .o_portait,.o_block_inline_both .o_portrait_name,.o_block_inline_both .o_portrait_image{display:inline-block}.o_portrait_avatar,.o_portrait_dummy,.o_portrait_dummy_female_big,.o_portrait_dummy_male_big,.o_portrait_anonymous{width:100px;height:100px}.o_portrait_dummy{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_dummy_female_big{background-image:url("../light/images/portrait/dummy_female_big.png")}.o_portrait_dummy_male_big{background-image:url("../light/images/portrait/dummy_male_big.png")}.o_portrait_anonymous{background-image:url("../light/images/portrait/anonymous.png")}.o_portrait_avatar_small,.o_portrait_dummy_small,.o_portrait_dummy_female_small,.o_portrait_dummy_male_small,.o_portrait_anonymous_small{width:30px;height:30px}.o_portrait_dummy_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_portrait_dummy_female_small{background-image:url("../light/images/portrait/dummy_female_small.png")}.o_portrait_dummy_male_small{background-image:url("../light/images/portrait/dummy_male_small.png")}.o_portrait_anonymous_small{background-image:url("../light/images/portrait/anonymous_small.png")}.o_datecomp{position:relative;width:40px;height:52px;border:1px solid #555;margin-right:12px;text-align:center;vertical-align:middle}.o_datecomp div.o_year{position:absolute;left:0;width:100%;top:-20px;height:20px;line-height:20px;font-size:10px}.o_datecomp div.o_month{height:20px;line-height:20px;font-size:12px;background-color:#337ab7;color:#fff}.o_datecomp div.o_day{height:30px;line-height:30px;font-size:18px;border-top:1px solid #555;background-color:#fff;color:#333}.o_block_with_datecomp .o_head{position:relative;padding-left:52px}.o_block_with_datecomp .o_datecomp{position:absolute;top:0.2em;left:0}.o_block_with_datecomp .o_title{margin-top:0}.o_block_with_datecomp .o_meta{color:#777}.o_block_with_datecomp .o_content{border-left:5px solid #eee;padding:0 20px}.o_block_with_datecomp .o_block_footer{padding-left:25px}ul.o_certificates li{padding:5px 0}ul.o_certificates li a.o_sel_certificate_delete{padding-left:2em}.o_cal_toptoolbar{margin-bottom:6px}.o_cal_toptoolbar .o_cal_toptoolbar_help{float:left;margin-right:12px}.o_feed .o_date,.o_feed .o_author{color:#777}.o_feed .o_subscription a{margin-right:1.5em}.o_feed .o_subscription .form-group{margin-bottom:5px}.o_feed .o_subscription .form-control{border:0;background:none;padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper{float:left}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_title,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_explanation,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_legend{display:none}.o_feed .o_blog_posts .o_ratings_and_comments a.o_comments span{display:none}.o_feed .o_content:before,.o_feed .o_content:after{content:" ";display:table}.o_feed .o_content:after{clear:both}.o_glossary .o_register{text-align:center}.o_glossary .o_meta{font-size:90%;color:#777;font-style:italic}.o_glossary dl dt:first-letter{font-size:21px}.o_glossary dl dt small{color:#777}.o_tm_glossary{border-bottom:1px dotted #666699 !important}.o_tm_yellow{background-color:#FFFF66}.o_tm_blue{background-color:#33FFFF}.o_tm_red{background-color:#FF3333}.o_tm_green{background-color:#99FF00}.vitero_iframe{width:100%;height:100%;border:none;min-height:60em}.o_reminder_rule{padding:5px 0}.o_segments.btn-group a span{overflow:hidden;display:block;text-overflow:ellipsis}.o_segments_content{margin-top:20px}.o_tabbed_pane .o_tabbed_pane_content{padding:20px 0 6px 0}.o_togglebox_wrapper .o_opener{position:relative;left:-0.5em}.o_togglebox_wrapper div.o_togglebox_content{position:relative;margin:0}.o_togglebox_wrapper div.o_togglebox_content .o_hide{position:absolute;bottom:0.5em;right:1em}.o_toolboxes ul{margin:0 0 1.5em 0;padding:0 0 0 1.5em}.o_qrcode{width:256px;height:256px}#o_ajax_busy{position:absolute;left:50%;top:20em;margin-left:-2.5em;height:5em;width:5em;color:#fff;z-index:1201;display:none}#o_body.o_ajax_busy{cursor:busy}.o_exception .o_visual{position:relative;background-image:url("../light/images/lion-500x333.jpg");filter:grayscale(50%);-webkit-filter:grayscale(50%);-moz-filter:grayscale(50%);-ms-filter:grayscale(50%);-o-filter:grayscale(50%);width:500px;height:333px;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;margin:0 0 10px 16px}@media (min-width: 768px) and (max-width: 991px){.o_exception .o_visual{width:375px;height:249px}}@media (min-width: 500px) and (max-width: 767px){.o_exception .o_visual{width:250px;height:166px}}@media (max-width: 500px){.o_exception .o_visual{background-size:cover}}.o_exception .jumbotron h1,.o_exception .o_repo_details .o_lead h1,.o_repo_details .o_exception .o_lead h1{color:#d9534f}.tt-input{width:400px}.tt-dropdown-menu{width:400px;margin-top:6px;padding:0 0 0;color:#555;background-color:#fff;border:1px solid #66afe9;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;-webkit-box-shadow:0 0 8px rgba(102,175,233,0.6);box-shadow:0 0 8px rgba(102,175,233,0.6)}.tt-suggestion{padding:6px 12px;font-size:14px;line-height:1.42857}.tt-suggestion.tt-cursor{color:#fff;background-color:#337ab7}.tt-suggestion p{margin:0}.o_search_link_extended,.o_search_link_simple{margin-top:12px;display:inline-block}.o_search_results_stats{color:#777;padding-left:1.5em}.o_search_highlight{margin-left:12px;font-size:12px}.o_search_result_title h4,.o_search_result_title .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_search_result_title h2{display:inline-block;margin-right:12px;margin-bottom:6px}.o_search_result_highlight{font-weight:bold}.o_search_result_context{color:#3c763d}.o_search_result_excerpt{color:#555}.o_search_result_details .o_togglebox_wrapper.o_block{margin-top:0;margin-bottom:0}.o_search_result_details .o_togglebox_wrapper .o_togglebox_content{color:#777;font-size:12px;background:#fff;padding:6px 12px}@media (max-width: 767px){.o_search_result_details{display:none}}.wizard{border:1px solid #d4d4d4;border-radius:2px;background-color:#f9f9f9;position:relative;overflow:hidden;margin-bottom:15px}.wizard ul{list-style:none outside none;padding:0;margin:0;width:4000px}.wizard ul li{float:left;margin:0;padding:0 20px 0 30px;height:46px;line-height:46px;position:relative;background:#ededed;color:#333;font-size:16px;cursor:default}.wizard ul li .chevron{border:24px solid transparent;border-left:14px solid #d4d4d4;border-right:0;display:block;position:absolute;right:-14px;top:0;z-index:1}.wizard ul li .chevron:before{border:24px solid transparent;border-left:14px solid #ededed;border-right:0;content:"";display:block;position:absolute;right:1px;top:-24px}.wizard ul li.active{background:#f1f6fc;color:#333}.wizard ul li.active .chevron:before{border-left:14px solid #f1f6fc}.wizard ul li .badge{margin-right:8px}.wizard ul li:first-child{border-radius:4px 0 0 4px;padding-left:20px}.o_process{position:relative;padding-left:25px}.o_process .o_step{position:relative;height:auto;padding-top:10px;padding-left:30px;padding-bottom:10px}.o_process .o_bar{position:absolute;top:10px;left:8px;height:100%;border-left:4px solid #777}.o_process .o_bar:after{position:absolute;top:0;left:-10px;height:16px;width:16px;border:4px solid #777;border-radius:16px;background:#fff;content:" "}.o_process .o_title{margin-top:-1px;color:#777 !important}.o_process .o_title:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);position:absolute;left:-24px}.o_process .o_title a:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);content:"";width:1em}.o_process .o_title a.collapsed:before{content:""}.o_process .o_step.o_active .o_bar,.o_process .o_step.o_active .o_bar:after{border-color:#337ab7}.o_process .o_step.o_active .o_title{color:#337ab7 !important}.o_process .o_step.o_active .o_title:before{content:"";color:#337ab7}.o_process .o_step.o_done .o_bar,.o_process .o_step.o_done .o_bar:after{border-color:#5094ce}.o_process .o_step.o_done .o_title{color:#5094ce !important}.o_process .o_step.o_done .o_title:before{content:"";color:#5cb85c}.o_process .o_meta{color:#777;font-size:12px;margin-top:-0.5em}.o_cal_orange{background:#ffc266;border-color:#ff9900;color:#5D5D5D}.o_cal_orange .o_cal_wv_event_header{background:#ff9900}.o_cal_orange a{color:#5D5D5D !important}.o_cal_green{background:#66c266;border-color:#009900;color:#FFF}.o_cal_green .o_cal_wv_event_header{background:#009900}.o_cal_green a{color:#FFF !important}.o_cal_blue{background:#4d6e9f;border-color:#2e5894;color:#FFF}.o_cal_blue .o_cal_wv_event_header{background:#2e5894}.o_cal_blue a{color:#FFF !important}.o_cal_yellow{background:#ffe066;border-color:#ffcc00;color:#5D5D5D}.o_cal_yellow .o_cal_wv_event_header{background:#ffcc00}.o_cal_yellow a{color:#5D5D5D !important}.o_cal_red{background:#c26666;border-color:#990000;color:#FFF}.o_cal_red .o_cal_wv_event_header{background:#990000}.o_cal_red a{color:#FFF !important}.o_cal_rebeccapurple{background:#663399;border-color:#663399;color:#FFF}.o_cal_rebeccapurple .o_cal_wv_event_header{background:#663399}.o_cal_rebeccapurple a{color:#FFF !important}.o_cal_grey{background:#DDDAAA;border-color:#5D5D5D;color:#FFF}.o_cal_grey .o_cal_wv_event_header{background:#5D5D5D}.o_cal_grey a{color:#FFF !important}.o_sel_calendar_print_chooser{padding-right:4em}.o_cal_config_enabled,.o_cal_config_disabled{position:relative;float:left;display:inline}.o_cal_config_calendar{margin:0 5px;padding:1px 6px 1px 4px;position:relative;width:200px;overflow:hidden;float:left;display:inline}.o_cal_config_color{display:block;width:16px;height:16px;border-radius:8px}.o_cal_colorchooser_selected:before{content:""}#o_cal_colorchooser div{border:1px solid #337ab7;margin:5px;display:inline-block}#o_cal_colorchooser div:hover{border:1px solid #333}#o_cal_colorchooser a{width:20px;height:20px;display:inline-block}.fc-button{color:#333;background-color:#fff;border-color:#ccc}.fc-button:hover,.fc-button:focus,.fc-button.focus,.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{background-image:none}.fc-button.disabled,.fc-button.disabled:hover,.fc-button.disabled:focus,.fc-button.disabled.focus,.fc-button.disabled:active,.fc-button.disabled.active,.fc-button[disabled],.fc-button[disabled]:hover,.fc-button[disabled]:focus,.fc-button[disabled].focus,.fc-button[disabled]:active,.fc-button[disabled].active,fieldset[disabled] .fc-button,fieldset[disabled] .fc-button:hover,fieldset[disabled] .fc-button:focus,fieldset[disabled] .fc-button.focus,fieldset[disabled] .fc-button:active,fieldset[disabled] .fc-button.active{background-color:#fff;border-color:#ccc}.fc-button .badge{color:#fff;background-color:#333}.fc-button.fc-state-default{text-shadow:none}.fc-button.fc-state-active{color:#fff;background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active:hover,.fc-button.fc-state-active:focus,.fc-button.fc-state-active.focus,.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{background-image:none}.fc-button.fc-state-active.disabled,.fc-button.fc-state-active.disabled:hover,.fc-button.fc-state-active.disabled:focus,.fc-button.fc-state-active.disabled.focus,.fc-button.fc-state-active.disabled:active,.fc-button.fc-state-active.disabled.active,.fc-button.fc-state-active[disabled],.fc-button.fc-state-active[disabled]:hover,.fc-button.fc-state-active[disabled]:focus,.fc-button.fc-state-active[disabled].focus,.fc-button.fc-state-active[disabled]:active,.fc-button.fc-state-active[disabled].active,fieldset[disabled] .fc-button.fc-state-active,fieldset[disabled] .fc-button.fc-state-active:hover,fieldset[disabled] .fc-button.fc-state-active:focus,fieldset[disabled] .fc-button.fc-state-active.focus,fieldset[disabled] .fc-button.fc-state-active:active,fieldset[disabled] .fc-button.fc-state-active.active{background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active .badge{color:#337ab7;background-color:#fff}.o_visual{position:absolute;top:0;left:0;overflow:hidden;height:120px;width:180px;vertical-align:middle}@media (min-width: 768px) and (max-width: 991px){.o_visual{height:80px;width:120px}}@media (max-width: 767px){.o_visual{height:50px;width:75px}}.o_visual img{width:100%;height:auto}.o_visual .o_visual_not_available{width:100%;height:100%;background-image:url("../light/images/no_preview.png");background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.o_coursetable.o_rendertype_custom .o_table_row{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_coursetable.o_rendertype_custom .o_table_row .o_visual{border-right:1px solid #337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_access{position:absolute;top:0;right:0;height:120px;width:180px;overflow:hidden;border-left:1px solid #337ab7;padding-top:0.25em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{padding:0 1em;height:20px;line-height:20px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{position:relative;left:2px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score .o_label{color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social{position:absolute;width:100%;bottom:32px;height:20px;padding-left:1em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_title,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating o_rating_legend,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_explanation{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings{padding:0 0 0 1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label{margin-bottom:1em;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_methods{color:#5bc0de}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{position:absolute;display:block;bottom:0;width:90px;height:30px;line-height:30px;text-align:center}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{right:0}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start{color:#fff;background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start .badge{color:#337ab7;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book .badge{color:#f0ad4e;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:90px;color:#fff;background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details .badge{color:#5cb85c;background-color:#fff}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{height:80px;width:120px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_comments,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_label{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{width:60px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:60px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:120px;margin:0 180px 0 180px;position:relative;padding:1em 0.5em 0.25em 1em;overflow:hidden}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{margin:0;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{display:block;color:#337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover{color:#286090}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author{margin-top:0.5em;line-height:normal;font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle{position:absolute;top:5px;right:40px;font-size:90%;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active{color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active:hover{color:#2b542c}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{margin-top:0.5em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark{position:absolute;top:-1px;right:15px}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:80px;margin:0 120px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:50px;margin:0 0 0 75px;padding:0 0 0 1em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{line-height:50px}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{border-right:37px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_go_xs{position:absolute;top:0;right:0;padding:0 1em;height:50px;width:37px;line-height:50px;color:#fff;background-color:#337ab7}.o_coursetable.o_rendertype_classic .o_rating_explanation{display:none}.o_coursetable.o_rendertype_classic .o_start,.o_coursetable.o_rendertype_classic .o_book{white-space:nowrap}.o_coursetable.o_rendertype_classic .o_repoentry_type{color:#555}.o_coursetable.o_rendertype_classic .o_repoentry_ac{color:#555}.o_catalog .o_level{position:relative;margin-bottom:10px;padding:0;border-top:1px solid #337ab7;border-bottom:1px solid #337ab7}.o_catalog .o_level .o_visual{height:180px}.o_catalog .o_level .o_meta{position:relative;min-height:180px;height:180px;overflow:hidden;margin:0 0 0 180px;padding:1em 0.5em 0.5em 2em}.o_catalog .o_level .o_meta .o_title{margin:0}.o_catalog .o_level .o_meta .o_title a{display:block;color:#337ab7}.o_catalog .o_level .o_meta .o_title a:hover{color:#286090}.o_catalog .o_level .o_meta .o_desc{padding:1em 0 0.5em 0}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_level .o_visual{height:120px}.o_catalog .o_level .o_meta{min-height:120px;height:120px;margin:0 0 0 120px}}@media (max-width: 767px){.o_catalog .o_level .o_visual{height:75px}.o_catalog .o_level .o_meta{min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em}.o_catalog .o_level .o_meta .o_title{line-height:75px}.o_catalog .o_level .o_meta .o_desc{display:none}}.o_catalog .o_sublevels_list .o_sublevel{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_catalog .o_sublevels_list .o_sublevel .o_visual{height:75px;width:75px}.o_catalog .o_sublevels_list .o_sublevel .o_title{margin:0}.o_catalog .o_sublevels_list .o_sublevel .o_meta{border-left:1px solid #337ab7;min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em;overflow:hidden}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_title{line-height:75px}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_desc{display:none}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a{font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a>i,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a>i,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a>i{display:none}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels{border:1px solid transparent}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels .o_meta{border-left:1px solid transparent}.o_catalog .o_sublevels{position:relative;margin-bottom:20px}.o_catalog .o_sublevels:before,.o_catalog .o_sublevels:after{content:" ";display:table}.o_catalog .o_sublevels:after{clear:both}.o_catalog .o_sublevels .o_sublevel{position:relative;float:left;margin:0 20px 20px 0;width:180px}.o_catalog .o_sublevels .o_sublevel:last-child{margin-right:0}.o_catalog .o_sublevels .o_sublevel .o_visual{border:1px solid #337ab7;position:relative;height:180px}.o_catalog .o_sublevels .o_sublevel .o_meta{position:absolute;left:0;bottom:0;width:100%;border:1px solid #337ab7;border-top:0;background-color:rgba(255,255,255,0.8)}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title{margin:0;text-align:center;line-height:2em;height:2em;width:100%;overflow:hidden}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a{display:block;color:#337ab7;font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover{color:#286090}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a>i{display:none}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 10px 10px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (max-width: 767px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 1px 1px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px;width:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (min-width: 768px){.o_catalog .o_sublevels_list,.o_catalog .o_sublevels_compact{-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2;columns:2}}.o_repo_details{position:relative}.o_repo_details .o_lead{margin-bottom:10px}.o_repo_details .o_lead .o_author{margin-top:0.5em;margin-bottom:1em;font-size:120%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_repo_details .o_lead .o_media{float:right;margin-left:2em;margin-bottom:2em}.o_repo_details .o_lead .o_media.o_desc_empty{float:none;margin-left:0;margin-bottom:0}.o_repo_details .o_lead h1 i{display:none}.o_repo_details .o_overview i{margin-right:0.5em}.o_repo_details .o_overview div{margin-bottom:0.25em}.o_repo_details .o_start,.o_repo_details .o_book{margin:2em 0}.o_repo_details .o_social:before,.o_repo_details .o_social:after{content:" ";display:table}.o_repo_details .o_social:after{clear:both}.o_repo_details .o_social .o_rating_wrapper{float:left}.o_repo_details .o_social .o_comments{margin-left:1em}@media (max-width: 767px){.o_repo_details .o_lead p{font-size:16px}.o_repo_details .o_lead .o_media{margin-left:0;float:none;text-align:center}}@media (max-width: 613px){.o_repo_details .o_subcolumn{width:100%}}.o_meta .o_closed{padding:2px 5px;margin:5px 0}.o_overview .o_closed{padding:12px 15px;margin:15px 0}.o_ac_configuration span.o_ac_infos{font-weight:normal;color:grey}.badge.o_midpub{background-color:#3c763d}.badge.o_midwarn{background-color:#8a6d3b}.badge.o_midlock{background-color:#31708f}.badge.o_miderr{background-color:#a94442}.badge.o_middel{background-color:#777}.o_course_editor_legend .badge{font-size:80%}.o_course_editor_legend .badge:before{content:none}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#66512c}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#777}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #777}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#777}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_course_run.o_titled_wrapper>h2 i{display:none}.o_tree.o_course_menu div.o_tree_l0>a:first-child{background-color:none}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_ll_container h5{margin-bottom:5px}.o_ll_container h5 a.o_desc{color:#337ab7}.o_ll_container h5 a.o_desc small{display:none}.o_ll_container h5 a.o_desc:hover{color:#286090;text-decoration:none}.o_ll_container h5 a.o_desc:hover small{color:#5e5e5e;display:inline}.o_ll_container div.o_comment{color:#777}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:10px}.o_cmembers .o_cmember .o_portrait img{width:50px;height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}td.o_qti_item_kprim_input .radio,th.o_qti_item_kprim_input .radio{display:inline}div.o_qti_menu_section,div.o_qti_menu_section_clickable,div.o_qti_menu_section_active{margin-top:10px}div.o_qti_menu_item a,div.o_qti_menu_section a{text-decoration:none}div.o_qti_menu_item{padding:.1em}div.o_qti_menu_item_active{padding:.1em;font-weight:bold}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}div.o_qti_item_choice_option_flow{display:inline-block;padding:.5em;border:1px solid transparent}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}div.o_qti_metadatas .panel-body{border-top:none}.o_qti_menu_item_attempts:after,.o_qti_menu_item_attempts_marked:after{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_qti_menu_item_attempts:after{content:""}.o_qti_menu_item_attempts_marked:after{content:"";color:#337ab7}.onyx_iframe{width:100%;height:100%;border:none;min-height:60em}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:""}.o_ep_icon_collection:before{content:""}.o_ep_icon_page:before{content:""}.o_ep_icon_struct:before{content:""}.o_ep_icon_liveblog:before{content:""}.o_artefact_closed:before{content:""}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.o_eportfolio_page .o_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif;box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.panel-footer .o_ep_options{display:inline-block}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #efefef, #fafafa);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_map-epmst-green{background-color:#ECF69A;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_map-epmst-green2{background:#99E44D;background:#99E44D -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99E44D), to(#CBF1A5));background:#99E44D -moz-linear-gradient(43% 71% 101deg, #CBF1A5, #99E44D);background:#99E44D -o-linear-gradient(#99E44D, #CBF1A5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99E44D', EndColorStr='#CBF1A5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_map-epmst-green3{background:#DFF0C1;background:#DFF0C1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DFF0C1), to(#A0D346));background:#DFF0C1 -moz-linear-gradient(43% 71% 101deg, #A0D346, #DFF0C1);background:#DFF0C1 -o-linear-gradient(#DFF0C1, #A0D346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DFF0C1', EndColorStr='#A0D346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_map-epmst-green4{background-color:#D7DBB5;border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_map-epmst-red{background:#FFBA71;background:#FFBA71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFBA71), to(#FFBA99));background:#FFBA71 -moz-linear-gradient(43% 71% 101deg, #FFBA99, #FFBA71);background:#FFBA71 -o-linear-gradient(#FFBA71, #FFBA99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFBA71', EndColorStr='#FFBA99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_map-epmst-red2{background:#FF9772;background:#FF9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FF9772), to(#FF9780));background:#FF9772 -moz-linear-gradient(43% 71% 101deg, #FF9780, #FF9772);background:#FF9772 -o-linear-gradient(#FF9772, #FF9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FF9772', EndColorStr='#FF9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_map-epmst-red3{background:#E8AFBB;background:#E8AFBB -webkit-gradient(linear, 37% 20%, 53% 100%, from(#E8AFBB), to(#E8AFA0));background:#E8AFBB -moz-linear-gradient(43% 71% 101deg, #E8AFA0, #E8AFBB);background:#E8AFBB -o-linear-gradient(#E8AFBB, #E8AFA0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#E8AFBB', EndColorStr='#E8AFA0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_map-epmst-red4{background:#FFA800;background:#FFA800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFA800), to(#FFAF00));background:#FFA800 -moz-linear-gradient(43% 71% 101deg, #FFAF00, #FFA800);background:#FFA800 -o-linear-gradient(#FFA800, #FFAF00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFA800', EndColorStr='#FFAF00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_map-epmst-blue{background:#00D2F8;background:#00D2F8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00D2F8), to(#4A9EAD));background:#00D2F8 -moz-linear-gradient(43% 71% 101deg, #4A9EAD, #00D2F8);background:#00D2F8 -o-linear-gradient(#00D2F8, #4A9EAD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00D2F8', EndColorStr='#4A9EAD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_map-epmst-blue2{background-color:#C4F6FF;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_map-epmst-blue3{background-color:#B3E2F7;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_map-epmst-blue4{background:#DEE7F7;background:#DEE7F7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DEE7F7), to(#C1E9FD));background:#DEE7F7 -moz-linear-gradient(43% 71% 101deg, #C1E9FD, #DEE7F7);background:#DEE7F7 -o-linear-gradient(#DEE7F7, #C1E9FD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DEE7F7', EndColorStr='#C1E9FD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_userbulk_changedcell{font-style:italic;font-weight:bold}body.o_dmz{background:transparent}body.o_dmz #o_bg{position:absolute;top:0;left:0;width:100%;height:100%;border-top:50px solid transparent;border-bottom:70px solid transparent;background:url("../light/images/learn-bg.jpg");background-size:cover;background-position:center center;background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=1 )}body.o_dmz #o_bg:after{content:" ";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(to right, rgba(255,255,255,0.1) 0.2%, rgba(255,255,255,0.6) 60%, rgba(255,255,255,0.8) 100%);background-size:cover;background-position:center center;background-repeat:no-repeat}body.o_dmz #o_toplink{display:none}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-bottom:20px;padding-left:10%;padding-right:10%;text-align:right}.o_login .o_login_intro{padding-left:10%}.o_login .o_login_intro h1{margin-bottom:40px;color:#337ab7}.o_login .o_login_intro .lead{color:#333}.o_login .o_login_intro .lead h1,.o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h3,.o_login .o_login_intro .lead h4,.o_login .o_login_intro .lead .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h5{margin-bottom:20px;color:#337ab7}.o_login .o_login_messages,.o_login .o_login_box{display:inline-block;width:400px;text-align:left}.o_login .o_login_messages .o_infomessage_wrapper{background:rgba(255,255,255,0.5);border:1px solid transparent;border-radius:4px;padding:6px 12px}.o_login .o_login_messages .o_infomessage_wrapper .o_info,.o_login .o_login_messages .o_infomessage_wrapper .o_warning,.o_login .o_login_messages .o_infomessage_wrapper .o_note{margin:0}.o_login .o_login_box{padding-top:10px}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_providers .o_icon_provider_olat{font-size:1em}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_form .o_form .o_desc{margin:0 0 30px 0;padding:0;border-left:0;background-color:transparent}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register.focus,.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled.focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled].focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register.focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}.o_login .o_login_social{position:relative;padding:10px 12px}.o_login .o_login_social li{padding:10px 12px}.o_login .o_login_social li>a{display:block;line-height:2em;text-align:center;font-size:18px;border-radius:4px;padding:10px 12px}.o_login .o_login_social .btn-default.o_sel_auth_facebook{color:#fff;background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{color:#fff;background-color:#37538d;border-color:#2d4374}.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled],.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.active{background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook .badge{color:#4568b2;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_twitter{color:#fff;background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{color:#fff;background-color:#00b4f8;border-color:#009ad4}.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled],.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.active{background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter .badge{color:#2cc5ff;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_google{color:#fff;background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google:hover,.o_login .o_login_social .btn-default.o_sel_auth_google:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.focus,.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{color:#fff;background-color:#d83825;border-color:#ba3120}.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_google.disabled,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled],.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.active{background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google .badge{color:#e15f4f;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_linkedin{color:#fff;background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{color:#fff;background-color:#015e8a;border-color:#014667}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled],.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.active{background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin .badge{color:#0181bd;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_adfs{color:#fff;background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{color:#fff;background-color:#010101;border-color:#000}.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled],.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.active{background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs .badge{color:#1a1a1a;background-color:#fff}@media (max-width: 767px){body.o_dmz #o_bg{background:none;display:none}.o_login{padding:0}.o_login .o_login_intro{padding:0;text-align:left}.o_login .o_login_box_wrapper{text-align:center;padding:0}.o_login .o_login_box{padding-left:0;padding-right:0}.o_login .o_login_box .o_login_providers,.o_login .o_login_box .o_login_provider{-webkit-box-shadow:none;box-shadow:none}.o_login .o_login_messages,.o_login .o_login_box{width:100%;display:block}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px;margin-top:10px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.o_library_icon:before{content:""}.o_library ul{list-style:none;margin:0 0 15px 0;padding:0}.o_library ul ul{margin:0}.o_library_overview .o_library_newest_files ul li{float:left;margin-right:15px}.o_library_item{margin-bottom:10px;position:relative}.o_library_item .o_library_visual,.o_library_item .o_library_extra,.o_library_item .o_library_meta{margin-top:15px}.o_library_item .o_library_visual{float:left;background-color:#fff;border-radius:4px;border:1px solid #ddd}.o_library_item .o_library_visual .o_thumbnail_available,.o_library_item .o_library_visual .o_thumbnail_unavailable{background-size:146px auto;width:150px !important;height:150px !important;background-repeat:no-repeat;background-position:50% 50%}.o_library_item .o_library_visual .o_thumbnail_available:before,.o_library_item .o_library_visual .o_thumbnail_unavailable:before{content:none}.o_library_item .o_library_visual .o_thumbnail_available{background-size:146px auto}.o_library_item .o_library_visual .o_thumbnail_unavailable{display:none}.o_library_item .o_library_extra{float:right;width:200px}.o_library_item .o_library_meta{clear:both}.o_library_item .o_library_meta .o_library_desc{padding-bottom:10px}.o_library_item .o_library_meta small{display:block;word-wrap:break-word}.o_library_item h4,.o_library_item .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item h2{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:normal}.o_library_item .btn{display:block;margin-bottom:0.5em}.o_library_item .o_comments{display:inline-block}.o_library_item .table{table-layout:fixed;word-wrap:break-word;margin-bottom:0}.o_library_item p.o_library_show_more{text-align:right;margin:0;padding-top:20px}.o_library_item .o_library_more{padding-top:20px;display:none}.o_library_folder{margin-top:-20px}.o_ratings_and_comments .o_rating_title,.o_ratings_and_comments .o_rating_explanation{display:none}@media (min-width: 768px){.o_library_item .o_library_meta{clear:none;margin-left:150px;margin-right:200px;padding:0 10px}.o_library_item .o_library_more{display:none}.o_library_item .o_library_more table tbody{vertical-align:top}.o_library_item .o_library_more table tr,.o_library_item .o_library_more table th,.o_library_item .o_library_more table td{display:inline-block}.o_library_item .o_library_more table tr{width:49%}.o_library_item .o_library_more table th{width:30%}.o_library_item .o_library_more table td{width:70%}}.o_library_item_compact .o_library_extra{width:auto}.o_library_item_compact .o_library_meta{padding:0 10px 0 0;margin:0;overflow:hidden}.o_library_item_compact .btn{display:inline-block}.o_library_item_compact h4,.o_library_item_compact .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item_compact h2{overflow:hidden;margin-right:70px}.o_library_item_compact h4 a,.o_library_item_compact .o_cal .fc-header-title h2 a,.o_cal .fc-header-title .o_library_item_compact h2 a{text-overflow:ellipsis;white-space:nowrap}.o_library_item_compact p.o_library_show_more{padding:20px;position:absolute;top:0;right:0}span.o_translation_i18nitem{position:relative !important}span.o_translation_i18nitem a.o_translation_i18nitem_launcher{position:absolute !important;z-index:100 !important;width:18px !important;height:20px !important;top:0 !important;left:5px !important;background:#fff;border:1px solid #337ab7 !important;border-radius:3px;text-align:center;padding:0 !important}.o_user_infos{position:relative}.o_user_infos .o_user_portrait{position:absolute;top:0;left:15px;width:100px;height:100px}.o_user_infos .o_user_infos_inner{margin:0 30px 0 100px}.o_user_infos .o_user_infos_inner table{margin:0 30px 15px 30px}.o_members_pagination{text-align:center}.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:66px;height:66px;margin-right:10px}@media (max-width: 767px){.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:50px;height:50px;margin:5px 5px 0 0}}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon,.ui-state-default .ui-icon,.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-active .ui-icon,.ui-state-highlight .ui-icon,.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background:none;background-image:none}.ui-dialog{-webkit-box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-dialog-title{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close:before{content:"" !important}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;font-size:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close span{display:none}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important;float:right}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px;overflow:auto;background:white !important}.ui-dialog .ui-dialog-titlebar{padding:4px 7px 4px 7px;background-color:#eee !important}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{z-index:2000 !important;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #2e6da4;background:#337ab7;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent}label.mce-label{display:inline;max-width:150px;margin-bottom:0;font-weight:normal}i.mce-ico.mce-i-media,i.mce-ico.mce-i-movie,i.mce-ico.mce-i-help{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}i.mce-ico.mce-i-media:before{content:""}i.mce-ico.mce-i-movie:before{content:""}i.mce-ico.mce-i-help{width:9px;height:9px;padding-top:1px}i.mce-ico.mce-i-help:before{content:"";color:white}.mce-tabs span.o_chelp_wrapper{float:right;margin:5px}@media print{a[href]:after{content:""}#o_header_wrapper,#o_offcanvas_right,#o_navbar_wrapper,#o_footer_wrapper,#o_toplink,#o_main_left,#o_main_right,#o_main_toolbar,#jsMath_PrintWarning,.o_noti,.o_opener,.o_hide,.o_noprint{display:none !important}.o_print_break_avoid{page-break-inside:avoid}.o_print_break_before{page-break-before:always}body.o_dmz{background:white !important}.progress{-webkit-print-color-adjust:exact;background-color:rgba(0,0,0,0.1) !important;border:1px solid rgba(0,0,0,0.5)}.progress-bar{-webkit-print-color-adjust:exact;background-color:#000 !important;border:10px solid #000}}body.o_browser_ie7 #o_offcanvas_right,body.o_browser_ie8 #o_offcanvas_right{right:0px}
 /*# sourceMappingURL=theme.css.map */
diff --git a/src/main/webapp/static/themes/light/theme.css.map b/src/main/webapp/static/themes/light/theme.css.map
index 5d49e652be2..a6d5b543d02 100644
--- a/src/main/webapp/static/themes/light/theme.css.map
+++ b/src/main/webapp/static/themes/light/theme.css.map
@@ -1,6 +1,6 @@
 {
 "version": 3,
-"mappings": "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",
+"mappings": "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",
 "sources": ["../../bootstrap/stylesheets/bootstrap/_normalize.scss","../../bootstrap/stylesheets/bootstrap/_print.scss","../../bootstrap/stylesheets/bootstrap/_scaffolding.scss","../../bootstrap/stylesheets/bootstrap/mixins/_vendor-prefixes.scss","_config.scss","../../bootstrap/stylesheets/bootstrap/_variables.scss","../../bootstrap/stylesheets/bootstrap/mixins/_tab-focus.scss","../../bootstrap/stylesheets/bootstrap/mixins/_image.scss","../../bootstrap/stylesheets/bootstrap/_type.scss","../../bootstrap/stylesheets/bootstrap/mixins/_text-emphasis.scss","../../bootstrap/stylesheets/bootstrap/mixins/_background-variant.scss","../../bootstrap/stylesheets/bootstrap/mixins/_clearfix.scss","../../bootstrap/stylesheets/bootstrap/mixins/_text-overflow.scss","../../bootstrap/stylesheets/bootstrap/_code.scss","../../bootstrap/stylesheets/bootstrap/_grid.scss","../../bootstrap/stylesheets/bootstrap/mixins/_grid.scss","../../bootstrap/stylesheets/bootstrap/mixins/_grid-framework.scss","../../bootstrap/stylesheets/bootstrap/_tables.scss","../../bootstrap/stylesheets/bootstrap/mixins/_table-row.scss","../../bootstrap/stylesheets/bootstrap/_forms.scss","../../bootstrap/stylesheets/bootstrap/mixins/_forms.scss","../../bootstrap/stylesheets/bootstrap/_buttons.scss","../../bootstrap/stylesheets/bootstrap/mixins/_buttons.scss","../../bootstrap/stylesheets/bootstrap/mixins/_opacity.scss","../../bootstrap/stylesheets/bootstrap/_component-animations.scss","../../bootstrap/stylesheets/bootstrap/_dropdowns.scss","../../bootstrap/stylesheets/bootstrap/mixins/_nav-divider.scss","../../bootstrap/stylesheets/bootstrap/mixins/_reset-filter.scss","../../bootstrap/stylesheets/bootstrap/_button-groups.scss","../../bootstrap/stylesheets/bootstrap/mixins/_border-radius.scss","../../bootstrap/stylesheets/bootstrap/_input-groups.scss","../../bootstrap/stylesheets/bootstrap/_navs.scss","../../bootstrap/stylesheets/bootstrap/_navbar.scss","../../bootstrap/stylesheets/bootstrap/mixins/_nav-vertical-align.scss","../../bootstrap/stylesheets/bootstrap/_breadcrumbs.scss","../../bootstrap/stylesheets/bootstrap/_pagination.scss","../../bootstrap/stylesheets/bootstrap/mixins/_pagination.scss","../../bootstrap/stylesheets/bootstrap/_pager.scss","../../bootstrap/stylesheets/bootstrap/_labels.scss","../../bootstrap/stylesheets/bootstrap/mixins/_labels.scss","../../bootstrap/stylesheets/bootstrap/_badges.scss","../../bootstrap/stylesheets/bootstrap/_jumbotron.scss","../../bootstrap/stylesheets/bootstrap/_thumbnails.scss","../../bootstrap/stylesheets/bootstrap/_alerts.scss","../../bootstrap/stylesheets/bootstrap/mixins/_alerts.scss","../../bootstrap/stylesheets/bootstrap/_progress-bars.scss","../../bootstrap/stylesheets/bootstrap/mixins/_gradients.scss","../../bootstrap/stylesheets/bootstrap/mixins/_progress-bar.scss","../../bootstrap/stylesheets/bootstrap/_media.scss","../../bootstrap/stylesheets/bootstrap/_list-group.scss","../../bootstrap/stylesheets/bootstrap/mixins/_list-group.scss","../../bootstrap/stylesheets/bootstrap/_panels.scss","../../bootstrap/stylesheets/bootstrap/mixins/_panels.scss","../../bootstrap/stylesheets/bootstrap/_responsive-embed.scss","../../bootstrap/stylesheets/bootstrap/_wells.scss","../../bootstrap/stylesheets/bootstrap/_close.scss","../../bootstrap/stylesheets/bootstrap/_modals.scss","../../bootstrap/stylesheets/bootstrap/_tooltip.scss","../../bootstrap/stylesheets/bootstrap/_popovers.scss","../../bootstrap/stylesheets/bootstrap/_utilities.scss","../../bootstrap/stylesheets/bootstrap/mixins/_center-block.scss","../../bootstrap/stylesheets/bootstrap/mixins/_hide-text.scss","../../bootstrap/stylesheets/bootstrap/_responsive-utilities.scss","../../bootstrap/stylesheets/bootstrap/mixins/_responsive-visibility.scss","modules/_bootstrap.scss","modules/_fonts.scss","../../font-awesome/scss/_path.scss","../../font-awesome/scss/_core.scss","../../font-awesome/scss/_larger.scss","../../font-awesome/scss/_fixed-width.scss","../../font-awesome/scss/_list.scss","../../font-awesome/scss/_variables.scss","../../font-awesome/scss/_bordered-pulled.scss","../../font-awesome/scss/_animated.scss","../../font-awesome/scss/_rotated-flipped.scss","../../font-awesome/scss/_mixins.scss","../../font-awesome/scss/_stacked.scss","modules/_icons.scss","modules/_emoticons.scss","modules/_helpers.scss","modules/_type.scss","modules/_content_embedded.scss","modules/_mixins.scss","modules/_layout.scss","modules/_main.scss","modules/_footer.scss","modules/_navbar.scss","modules/_toolbar.scss","modules/_offcanvas.scss","modules/_dialog.scss","modules/_tree.scss","modules/_breadcrumb.scss","modules/_form.scss","modules/_table.scss","modules/_im.scss","modules/_flags.scss","modules/_rating_and_comments.scss","modules/_chart.scss","modules/_forum.scss","modules/_various_modules.scss","modules/_autocomplete.scss","modules/_search.scss","modules/_wizard.scss","modules/_process.scss","modules/_cal.scss","modules/_coursesite.scss","modules/_repository.scss","modules/_course.scss","modules/_qti.scss","modules/_devel.scss","modules/_wiki.scss","modules/_portfolio.scss","modules/_portfoliomaps/_epmst_default.scss","modules/_portfoliomaps/_mixins.scss","modules/_portfoliomaps/_epmst_comic.scss","modules/_portfoliomaps/_epmst_leather.scss","modules/_portfoliomaps/_epmst_green.scss","modules/_portfoliomaps/_epmst_green2.scss","modules/_portfoliomaps/_epmst_green3.scss","modules/_portfoliomaps/_epmst_green4.scss","modules/_portfoliomaps/_epmst_red.scss","modules/_portfoliomaps/_epmst_red2.scss","modules/_portfoliomaps/_epmst_red3.scss","modules/_portfoliomaps/_epmst_red4.scss","modules/_portfoliomaps/_epmst_blue.scss","modules/_portfoliomaps/_epmst_blue2.scss","modules/_portfoliomaps/_epmst_blue3.scss","modules/_portfoliomaps/_epmst_blue4.scss","modules/_admin.scss","modules/_dmz.scss","modules/_portal.scss","modules/_library.scss","modules/_translationtool.scss","modules/_user.scss","modules/_members.scss","modules/_thirdparty.scss","modules/_print.scss","_patches.scss"],
 "names": [],
 "file": "theme.css"
diff --git a/src/main/webapp/static/themes/light/theme_ie_completions.css b/src/main/webapp/static/themes/light/theme_ie_completions.css
index 8dbcf8e97af..8724a631907 100644
--- a/src/main/webapp/static/themes/light/theme_ie_completions.css
+++ b/src/main/webapp/static/themes/light/theme_ie_completions.css
@@ -1 +1 @@
-.o_block_inline .o_portait,.o_block_inline .o_portrait_name,.o_block_inline .o_portrait_image,.o_block_inline_right .o_portait,.o_block_inline_right .o_portrait_name,.o_block_inline_right .o_portrait_image,.o_block_inline_left .o_portait,.o_block_inline_left .o_portrait_name,.o_block_inline_left .o_portrait_image,.o_block_inline_both .o_portait,.o_block_inline_both .o_portrait_name,.o_block_inline_both .o_portrait_image{display:inline-block}.o_portrait_avatar,.o_portrait_dummy,.o_portrait_dummy_female_big,.o_portrait_dummy_male_big,.o_portrait_anonymous{width:100px;height:100px}.o_portrait_dummy{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_dummy_female_big{background-image:url("../light/images/portrait/dummy_female_big.png")}.o_portrait_dummy_male_big{background-image:url("../light/images/portrait/dummy_male_big.png")}.o_portrait_anonymous{background-image:url("../light/images/portrait/anonymous.png")}.o_portrait_avatar_small,.o_portrait_dummy_small,.o_portrait_dummy_female_small,.o_portrait_dummy_male_small,.o_portrait_anonymous_small{width:30px;height:30px}.o_portrait_dummy_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_portrait_dummy_female_small{background-image:url("../light/images/portrait/dummy_female_small.png")}.o_portrait_dummy_male_small{background-image:url("../light/images/portrait/dummy_male_small.png")}.o_portrait_anonymous_small{background-image:url("../light/images/portrait/anonymous_small.png")}.o_datecomp{position:relative;width:40px;height:52px;border:1px solid #555;margin-right:12px;text-align:center;vertical-align:middle}.o_datecomp div.o_year{position:absolute;left:0;width:100%;top:-20px;height:20px;line-height:20px;font-size:10px}.o_datecomp div.o_month{height:20px;line-height:20px;font-size:12px;background-color:#337ab7;color:#fff}.o_datecomp div.o_day{height:30px;line-height:30px;font-size:18px;border-top:1px solid #555;background-color:#fff;color:#333}.o_block_with_datecomp .o_head{position:relative;padding-left:52px}.o_block_with_datecomp .o_datecomp{position:absolute;top:0.2em;left:0}.o_block_with_datecomp .o_title{margin-top:0}.o_block_with_datecomp .o_meta{color:#777}.o_block_with_datecomp .o_content{border-left:5px solid #eee;padding:0 20px}.o_block_with_datecomp .o_block_footer{padding-left:25px}ul.o_certificates li{padding:5px 0}ul.o_certificates li a.o_sel_certificate_delete{padding-left:2em}.o_cal_toptoolbar{margin-bottom:6px}.o_cal_toptoolbar .o_cal_toptoolbar_help{float:left;margin-right:12px}.o_feed .o_date,.o_feed .o_author{color:#777}.o_feed .o_subscription a{margin-right:1.5em}.o_feed .o_subscription .form-group{margin-bottom:5px}.o_feed .o_subscription .form-control{border:0;background:none;padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper{float:left}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_title,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_explanation,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_legend{display:none}.o_feed .o_blog_posts .o_ratings_and_comments a.o_comments span{display:none}.o_feed .o_content:before,.o_feed .o_content:after{content:" ";display:table}.o_feed .o_content:after{clear:both}.o_glossary .o_register{text-align:center}.o_glossary .o_meta{font-size:90%;color:#777;font-style:italic}.o_glossary dl dt:first-letter{font-size:21px}.o_glossary dl dt small{color:#777}.o_tm_glossary{border-bottom:1px dotted #666699 !important}.o_tm_yellow{background-color:#FFFF66}.o_tm_blue{background-color:#33FFFF}.o_tm_red{background-color:#FF3333}.o_tm_green{background-color:#99FF00}.vitero_iframe{width:100%;height:100%;border:none;min-height:60em}.o_reminder_rule{padding:5px 0}.o_segments.btn-group a span{overflow:hidden;display:block;text-overflow:ellipsis}.o_segments_content{margin-top:20px}.o_tabbed_pane .o_tabbed_pane_content{padding:20px 0 6px 0}.o_togglebox_wrapper .o_opener{position:relative;left:-0.5em}.o_togglebox_wrapper div.o_togglebox_content{position:relative;margin:0}.o_togglebox_wrapper div.o_togglebox_content .o_hide{position:absolute;bottom:0.5em;right:1em}.o_toolboxes ul{margin:0 0 1.5em 0;padding:0 0 0 1.5em}.o_qrcode{width:256px;height:256px}#o_ajax_busy{position:absolute;left:50%;top:20em;margin-left:-2.5em;height:5em;width:5em;color:#fff;z-index:1201;display:none}#o_body.o_ajax_busy{cursor:busy}.o_exception .o_visual{position:relative;background-image:url("../light/images/lion-500x333.jpg");filter:grayscale(50%);-webkit-filter:grayscale(50%);-moz-filter:grayscale(50%);-ms-filter:grayscale(50%);-o-filter:grayscale(50%);width:500px;height:333px;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;margin:0 0 10px 16px}@media (min-width: 768px) and (max-width: 991px){.o_exception .o_visual{width:375px;height:249px}}@media (min-width: 500px) and (max-width: 767px){.o_exception .o_visual{width:250px;height:166px}}@media (max-width: 500px){.o_exception .o_visual{background-size:cover}}.o_exception .jumbotron h1,.o_exception .o_repo_details .o_lead h1,.o_repo_details .o_exception .o_lead h1{color:#d9534f}.tt-input{width:400px}.tt-dropdown-menu{width:400px;margin-top:6px;padding:0 0 0;color:#555;background-color:#fff;border:1px solid #66afe9;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;-webkit-box-shadow:0 0 8px rgba(102,175,233,0.6);box-shadow:0 0 8px rgba(102,175,233,0.6)}.tt-suggestion{padding:6px 12px;font-size:14px;line-height:1.42857}.tt-suggestion.tt-cursor{color:#fff;background-color:#337ab7}.tt-suggestion p{margin:0}.o_search_link_extended,.o_search_link_simple{margin-top:12px;display:inline-block}.o_search_results_stats{color:#777;padding-left:1.5em}.o_search_highlight{margin-left:12px;font-size:12px}.o_search_result_title h4,.o_search_result_title .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_search_result_title h2{display:inline-block;margin-right:12px;margin-bottom:6px}.o_search_result_highlight{font-weight:bold}.o_search_result_context{color:#3c763d}.o_search_result_excerpt{color:#555}.o_search_result_details .o_togglebox_wrapper.o_block{margin-top:0;margin-bottom:0}.o_search_result_details .o_togglebox_wrapper .o_togglebox_content{color:#777;font-size:12px;background:#fff;padding:6px 12px}@media (max-width: 767px){.o_search_result_details{display:none}}.wizard{border:1px solid #d4d4d4;border-radius:2px;background-color:#f9f9f9;position:relative;overflow:hidden;margin-bottom:15px}.wizard ul{list-style:none outside none;padding:0;margin:0;width:4000px}.wizard ul li{float:left;margin:0;padding:0 20px 0 30px;height:46px;line-height:46px;position:relative;background:#ededed;color:#333;font-size:16px;cursor:default}.wizard ul li .chevron{border:24px solid transparent;border-left:14px solid #d4d4d4;border-right:0;display:block;position:absolute;right:-14px;top:0;z-index:1}.wizard ul li .chevron:before{border:24px solid transparent;border-left:14px solid #ededed;border-right:0;content:"";display:block;position:absolute;right:1px;top:-24px}.wizard ul li.active{background:#f1f6fc;color:#333}.wizard ul li.active .chevron:before{border-left:14px solid #f1f6fc}.wizard ul li .badge{margin-right:8px}.wizard ul li:first-child{border-radius:4px 0 0 4px;padding-left:20px}.o_process{position:relative;padding-left:25px}.o_process .o_step{position:relative;height:auto;padding-top:10px;padding-left:30px;padding-bottom:10px}.o_process .o_bar{position:absolute;top:10px;left:8px;height:100%;border-left:4px solid #777}.o_process .o_bar:after{position:absolute;top:0;left:-10px;height:16px;width:16px;border:4px solid #777;border-radius:16px;background:#fff;content:" "}.o_process .o_title{margin-top:-1px;color:#777 !important}.o_process .o_title:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);position:absolute;left:-24px}.o_process .o_title a:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);content:"";width:1em}.o_process .o_title a.collapsed:before{content:""}.o_process .o_step.o_active .o_bar,.o_process .o_step.o_active .o_bar:after{border-color:#337ab7}.o_process .o_step.o_active .o_title{color:#337ab7 !important}.o_process .o_step.o_active .o_title:before{content:"";color:#337ab7}.o_process .o_step.o_done .o_bar,.o_process .o_step.o_done .o_bar:after{border-color:#5094ce}.o_process .o_step.o_done .o_title{color:#5094ce !important}.o_process .o_step.o_done .o_title:before{content:"";color:#5cb85c}.o_process .o_meta{color:#777;font-size:12px;margin-top:-0.5em}.o_cal_orange{background:#ffc266;border-color:#ff9900;color:#5D5D5D}.o_cal_orange .o_cal_wv_event_header{background:#ff9900}.o_cal_orange a{color:#5D5D5D !important}.o_cal_green{background:#66c266;border-color:#009900;color:#FFF}.o_cal_green .o_cal_wv_event_header{background:#009900}.o_cal_green a{color:#FFF !important}.o_cal_blue{background:#4d6e9f;border-color:#2e5894;color:#FFF}.o_cal_blue .o_cal_wv_event_header{background:#2e5894}.o_cal_blue a{color:#FFF !important}.o_cal_yellow{background:#ffe066;border-color:#ffcc00;color:#5D5D5D}.o_cal_yellow .o_cal_wv_event_header{background:#ffcc00}.o_cal_yellow a{color:#5D5D5D !important}.o_cal_red{background:#c26666;border-color:#990000;color:#FFF}.o_cal_red .o_cal_wv_event_header{background:#990000}.o_cal_red a{color:#FFF !important}.o_cal_rebeccapurple{background:#663399;border-color:#663399;color:#FFF}.o_cal_rebeccapurple .o_cal_wv_event_header{background:#663399}.o_cal_rebeccapurple a{color:#FFF !important}.o_cal_grey{background:#DDDAAA;border-color:#5D5D5D;color:#FFF}.o_cal_grey .o_cal_wv_event_header{background:#5D5D5D}.o_cal_grey a{color:#FFF !important}.o_sel_calendar_print_chooser{padding-right:4em}.o_cal_config_enabled,.o_cal_config_disabled{position:relative;float:left;display:inline}.o_cal_config_calendar{margin:0 5px;padding:1px 6px 1px 4px;position:relative;width:200px;overflow:hidden;float:left;display:inline}.o_cal_config_color{display:block;width:16px;height:16px;border-radius:8px}.o_cal_colorchooser_selected:before{content:""}#o_cal_colorchooser div{border:1px solid #337ab7;margin:5px;display:inline-block}#o_cal_colorchooser div:hover{border:1px solid #333}#o_cal_colorchooser a{width:20px;height:20px;display:inline-block}.fc-button{color:#333;background-color:#fff;border-color:#ccc}.fc-button:hover,.fc-button:focus,.fc-button.focus,.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{background-image:none}.fc-button.disabled,.fc-button.disabled:hover,.fc-button.disabled:focus,.fc-button.disabled.focus,.fc-button.disabled:active,.fc-button.disabled.active,.fc-button[disabled],.fc-button[disabled]:hover,.fc-button[disabled]:focus,.fc-button[disabled].focus,.fc-button[disabled]:active,.fc-button[disabled].active,fieldset[disabled] .fc-button,fieldset[disabled] .fc-button:hover,fieldset[disabled] .fc-button:focus,fieldset[disabled] .fc-button.focus,fieldset[disabled] .fc-button:active,fieldset[disabled] .fc-button.active{background-color:#fff;border-color:#ccc}.fc-button .badge{color:#fff;background-color:#333}.fc-button.fc-state-default{text-shadow:none}.fc-button.fc-state-active{color:#fff;background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active:hover,.fc-button.fc-state-active:focus,.fc-button.fc-state-active.focus,.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{background-image:none}.fc-button.fc-state-active.disabled,.fc-button.fc-state-active.disabled:hover,.fc-button.fc-state-active.disabled:focus,.fc-button.fc-state-active.disabled.focus,.fc-button.fc-state-active.disabled:active,.fc-button.fc-state-active.disabled.active,.fc-button.fc-state-active[disabled],.fc-button.fc-state-active[disabled]:hover,.fc-button.fc-state-active[disabled]:focus,.fc-button.fc-state-active[disabled].focus,.fc-button.fc-state-active[disabled]:active,.fc-button.fc-state-active[disabled].active,fieldset[disabled] .fc-button.fc-state-active,fieldset[disabled] .fc-button.fc-state-active:hover,fieldset[disabled] .fc-button.fc-state-active:focus,fieldset[disabled] .fc-button.fc-state-active.focus,fieldset[disabled] .fc-button.fc-state-active:active,fieldset[disabled] .fc-button.fc-state-active.active{background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active .badge{color:#337ab7;background-color:#fff}.o_visual{position:absolute;top:0;left:0;overflow:hidden;height:120px;width:180px;vertical-align:middle}@media (min-width: 768px) and (max-width: 991px){.o_visual{height:80px;width:120px}}@media (max-width: 767px){.o_visual{height:50px;width:75px}}.o_visual img{width:100%;height:auto}.o_visual .o_visual_not_available{width:100%;height:100%;background-image:url("../light/images/no_preview.png");background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.o_coursetable.o_rendertype_custom .o_table_row{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_coursetable.o_rendertype_custom .o_table_row .o_visual{border-right:1px solid #337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_access{position:absolute;top:0;right:0;height:120px;width:180px;overflow:hidden;border-left:1px solid #337ab7;padding-top:0.25em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{padding:0 1em;height:20px;line-height:20px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{position:relative;left:2px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score .o_label{color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social{position:absolute;width:100%;bottom:32px;height:20px;padding-left:1em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_title,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating o_rating_legend,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_explanation{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings{padding:0 0 0 1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label{margin-bottom:1em;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_methods{color:#5bc0de}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{position:absolute;display:block;bottom:0;width:90px;height:30px;line-height:30px;text-align:center}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{right:0}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start{color:#fff;background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start .badge{color:#337ab7;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book .badge{color:#f0ad4e;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:90px;color:#fff;background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details .badge{color:#5cb85c;background-color:#fff}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{height:80px;width:120px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_comments,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_label{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{width:60px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:60px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:120px;margin:0 180px 0 180px;position:relative;padding:1em 0.5em 0.25em 1em;overflow:hidden}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{margin:0;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{display:block;color:#337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover{color:#286090}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author{margin-top:0.5em;line-height:normal;font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle{position:absolute;top:5px;right:40px;font-size:90%;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active{color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active:hover{color:#2b542c}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{margin-top:0.5em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark{position:absolute;top:-1px;right:15px}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:80px;margin:0 120px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:50px;margin:0 0 0 75px;padding:0 0 0 1em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{line-height:50px}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{border-right:37px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_go_xs{position:absolute;top:0;right:0;padding:0 1em;height:50px;width:37px;line-height:50px;color:#fff;background-color:#337ab7}.o_coursetable.o_rendertype_classic .o_rating_explanation{display:none}.o_coursetable.o_rendertype_classic .o_start,.o_coursetable.o_rendertype_classic .o_book{white-space:nowrap}.o_coursetable.o_rendertype_classic .o_repoentry_type{color:#555}.o_coursetable.o_rendertype_classic .o_repoentry_ac{color:#555}.o_catalog .o_level{position:relative;margin-bottom:10px;padding:0;border-top:1px solid #337ab7;border-bottom:1px solid #337ab7}.o_catalog .o_level .o_visual{height:180px}.o_catalog .o_level .o_meta{position:relative;min-height:180px;height:180px;overflow:hidden;margin:0 0 0 180px;padding:1em 0.5em 0.5em 2em}.o_catalog .o_level .o_meta .o_title{margin:0}.o_catalog .o_level .o_meta .o_title a{display:block;color:#337ab7}.o_catalog .o_level .o_meta .o_title a:hover{color:#286090}.o_catalog .o_level .o_meta .o_desc{padding:1em 0 0.5em 0}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_level .o_visual{height:120px}.o_catalog .o_level .o_meta{min-height:120px;height:120px;margin:0 0 0 120px}}@media (max-width: 767px){.o_catalog .o_level .o_visual{height:75px}.o_catalog .o_level .o_meta{min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em}.o_catalog .o_level .o_meta .o_title{line-height:75px}.o_catalog .o_level .o_meta .o_desc{display:none}}.o_catalog .o_sublevels_list .o_sublevel{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_catalog .o_sublevels_list .o_sublevel .o_visual{height:75px;width:75px}.o_catalog .o_sublevels_list .o_sublevel .o_title{margin:0}.o_catalog .o_sublevels_list .o_sublevel .o_meta{border-left:1px solid #337ab7;min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em;overflow:hidden}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_title{line-height:75px}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_desc{display:none}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a{font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a>i,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a>i,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a>i{display:none}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels{border:1px solid transparent}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels .o_meta{border-left:1px solid transparent}.o_catalog .o_sublevels{position:relative;margin-bottom:20px}.o_catalog .o_sublevels:before,.o_catalog .o_sublevels:after{content:" ";display:table}.o_catalog .o_sublevels:after{clear:both}.o_catalog .o_sublevels .o_sublevel{position:relative;float:left;margin:0 20px 20px 0;width:180px}.o_catalog .o_sublevels .o_sublevel:last-child{margin-right:0}.o_catalog .o_sublevels .o_sublevel .o_visual{border:1px solid #337ab7;position:relative;height:180px}.o_catalog .o_sublevels .o_sublevel .o_meta{position:absolute;left:0;bottom:0;width:100%;border:1px solid #337ab7;border-top:0;background-color:rgba(255,255,255,0.8)}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title{margin:0;text-align:center;line-height:2em;height:2em;width:100%;overflow:hidden}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a{display:block;color:#337ab7;font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover{color:#286090}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a>i{display:none}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 10px 10px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (max-width: 767px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 1px 1px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px;width:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (min-width: 768px){.o_catalog .o_sublevels_list,.o_catalog .o_sublevels_compact{-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2;columns:2}}.o_repo_details{position:relative}.o_repo_details .o_lead{margin-bottom:10px}.o_repo_details .o_lead .o_author{margin-top:0.5em;margin-bottom:1em;font-size:120%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_repo_details .o_lead .o_media{float:right;margin-left:2em;margin-bottom:2em}.o_repo_details .o_lead .o_media.o_desc_empty{float:none;margin-left:0;margin-bottom:0}.o_repo_details .o_lead h1 i{display:none}.o_repo_details .o_overview i{margin-right:0.5em}.o_repo_details .o_overview div{margin-bottom:0.25em}.o_repo_details .o_start,.o_repo_details .o_book{margin:2em 0}.o_repo_details .o_social:before,.o_repo_details .o_social:after{content:" ";display:table}.o_repo_details .o_social:after{clear:both}.o_repo_details .o_social .o_rating_wrapper{float:left}.o_repo_details .o_social .o_comments{margin-left:1em}@media (max-width: 767px){.o_repo_details .o_lead p{font-size:16px}.o_repo_details .o_lead .o_media{margin-left:0;float:none;text-align:center}}@media (max-width: 613px){.o_repo_details .o_subcolumn{width:100%}}.o_meta .o_closed{padding:2px 5px;margin:5px 0}.o_overview .o_closed{padding:12px 15px;margin:15px 0}.o_ac_configuration span.o_ac_infos{font-weight:normal;color:grey}.badge.o_midpub{background-color:#3c763d}.badge.o_midwarn{background-color:#8a6d3b}.badge.o_midlock{background-color:#31708f}.badge.o_miderr{background-color:#a94442}.badge.o_middel{background-color:#777}.o_course_editor_legend .badge{font-size:80%}.o_course_editor_legend .badge:before{content:none}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#66512c}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#777}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #777}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#777}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_course_run.o_titled_wrapper>h2 i{display:none}.o_tree.o_course_menu div.o_tree_l0>a:first-child{background-color:none}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_ll_container h5{margin-bottom:5px}.o_ll_container h5 a.o_desc{color:#337ab7}.o_ll_container h5 a.o_desc small{display:none}.o_ll_container h5 a.o_desc:hover{color:#286090;text-decoration:none}.o_ll_container h5 a.o_desc:hover small{color:#5e5e5e;display:inline}.o_ll_container div.o_comment{color:#777}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:10px}.o_cmembers .o_cmember .o_portrait img{width:50px;height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}td.o_qti_item_kprim_input .radio,th.o_qti_item_kprim_input .radio{display:inline}div.o_qti_menu_section,div.o_qti_menu_section_clickable,div.o_qti_menu_section_active{margin-top:10px}div.o_qti_menu_item a,div.o_qti_menu_section a{text-decoration:none}div.o_qti_menu_item{padding:.1em}div.o_qti_menu_item_active{padding:.1em;font-weight:bold}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}div.o_qti_item_choice_option_flow{display:inline-block;padding:.5em;border:1px solid transparent}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}div.o_qti_metadatas .panel-body{border-top:none}.o_qti_menu_item_attempts:after,.o_qti_menu_item_attempts_marked:after{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_qti_menu_item_attempts:after{content:""}.o_qti_menu_item_attempts_marked:after{content:"";color:#337ab7}.onyx_iframe{width:100%;height:100%;border:none;min-height:60em}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:""}.o_ep_icon_collection:before{content:""}.o_ep_icon_page:before{content:""}.o_ep_icon_struct:before{content:""}.o_ep_icon_liveblog:before{content:""}.o_artefact_closed:before{content:""}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.o_eportfolio_page .o_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif;box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.panel-footer .o_ep_options{display:inline-block}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #efefef, #fafafa);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_map-epmst-green{background-color:#ECF69A;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_map-epmst-green2{background:#99E44D;background:#99E44D -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99E44D), to(#CBF1A5));background:#99E44D -moz-linear-gradient(43% 71% 101deg, #CBF1A5, #99E44D);background:#99E44D -o-linear-gradient(#99E44D, #CBF1A5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99E44D', EndColorStr='#CBF1A5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_map-epmst-green3{background:#DFF0C1;background:#DFF0C1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DFF0C1), to(#A0D346));background:#DFF0C1 -moz-linear-gradient(43% 71% 101deg, #A0D346, #DFF0C1);background:#DFF0C1 -o-linear-gradient(#DFF0C1, #A0D346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DFF0C1', EndColorStr='#A0D346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_map-epmst-green4{background-color:#D7DBB5;border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_map-epmst-red{background:#FFBA71;background:#FFBA71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFBA71), to(#FFBA99));background:#FFBA71 -moz-linear-gradient(43% 71% 101deg, #FFBA99, #FFBA71);background:#FFBA71 -o-linear-gradient(#FFBA71, #FFBA99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFBA71', EndColorStr='#FFBA99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_map-epmst-red2{background:#FF9772;background:#FF9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FF9772), to(#FF9780));background:#FF9772 -moz-linear-gradient(43% 71% 101deg, #FF9780, #FF9772);background:#FF9772 -o-linear-gradient(#FF9772, #FF9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FF9772', EndColorStr='#FF9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_map-epmst-red3{background:#E8AFBB;background:#E8AFBB -webkit-gradient(linear, 37% 20%, 53% 100%, from(#E8AFBB), to(#E8AFA0));background:#E8AFBB -moz-linear-gradient(43% 71% 101deg, #E8AFA0, #E8AFBB);background:#E8AFBB -o-linear-gradient(#E8AFBB, #E8AFA0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#E8AFBB', EndColorStr='#E8AFA0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_map-epmst-red4{background:#FFA800;background:#FFA800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFA800), to(#FFAF00));background:#FFA800 -moz-linear-gradient(43% 71% 101deg, #FFAF00, #FFA800);background:#FFA800 -o-linear-gradient(#FFA800, #FFAF00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFA800', EndColorStr='#FFAF00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_map-epmst-blue{background:#00D2F8;background:#00D2F8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00D2F8), to(#4A9EAD));background:#00D2F8 -moz-linear-gradient(43% 71% 101deg, #4A9EAD, #00D2F8);background:#00D2F8 -o-linear-gradient(#00D2F8, #4A9EAD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00D2F8', EndColorStr='#4A9EAD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_map-epmst-blue2{background-color:#C4F6FF;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_map-epmst-blue3{background-color:#B3E2F7;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_map-epmst-blue4{background:#DEE7F7;background:#DEE7F7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DEE7F7), to(#C1E9FD));background:#DEE7F7 -moz-linear-gradient(43% 71% 101deg, #C1E9FD, #DEE7F7);background:#DEE7F7 -o-linear-gradient(#DEE7F7, #C1E9FD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DEE7F7', EndColorStr='#C1E9FD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_userbulk_changedcell{font-style:italic;font-weight:bold}body.o_dmz{background:transparent}body.o_dmz #o_bg{position:absolute;top:0;left:0;width:100%;height:100%;border-top:50px solid transparent;border-bottom:70px solid transparent;background:url("../light/images/learn-bg.jpg");background-size:cover;background-position:center center;background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=1 )}body.o_dmz #o_bg:after{content:" ";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(to right, rgba(255,255,255,0.1) 0.2%, rgba(255,255,255,0.6) 60%, rgba(255,255,255,0.8) 100%);background-size:cover;background-position:center center;background-repeat:no-repeat}body.o_dmz #o_toplink{display:none}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-bottom:20px;padding-left:10%;padding-right:10%;text-align:right}.o_login .o_login_intro{padding-left:10%}.o_login .o_login_intro h1{margin-bottom:40px;color:#337ab7}.o_login .o_login_intro .lead{color:#333}.o_login .o_login_intro .lead h1,.o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h3,.o_login .o_login_intro .lead h4,.o_login .o_login_intro .lead .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h5{margin-bottom:20px;color:#337ab7}.o_login .o_login_messages,.o_login .o_login_box{display:inline-block;width:400px;text-align:left}.o_login .o_login_messages .o_infomessage_wrapper{background:rgba(255,255,255,0.5);border:1px solid transparent;border-radius:4px;padding:6px 12px}.o_login .o_login_messages .o_infomessage_wrapper .o_info,.o_login .o_login_messages .o_infomessage_wrapper .o_warning,.o_login .o_login_messages .o_infomessage_wrapper .o_note{margin:0}.o_login .o_login_box{padding-top:10px}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_providers .o_icon_provider_olat{font-size:1em}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_form .o_form .o_desc{margin:0 0 30px 0;padding:0;border-left:0;background-color:transparent}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register.focus,.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled.focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled].focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register.focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}.o_login .o_login_social{position:relative;padding:10px 12px}.o_login .o_login_social li{padding:10px 12px}.o_login .o_login_social li>a{display:block;line-height:2em;text-align:center;font-size:18px;border-radius:4px;padding:10px 12px}.o_login .o_login_social .btn-default.o_sel_auth_facebook{color:#fff;background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{color:#fff;background-color:#37538d;border-color:#2d4374}.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled],.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.active{background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook .badge{color:#4568b2;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_twitter{color:#fff;background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{color:#fff;background-color:#00b4f8;border-color:#009ad4}.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled],.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.active{background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter .badge{color:#2cc5ff;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_google{color:#fff;background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google:hover,.o_login .o_login_social .btn-default.o_sel_auth_google:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.focus,.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{color:#fff;background-color:#d83825;border-color:#ba3120}.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_google.disabled,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled],.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.active{background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google .badge{color:#e15f4f;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_linkedin{color:#fff;background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{color:#fff;background-color:#015e8a;border-color:#014667}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled],.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.active{background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin .badge{color:#0181bd;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_adfs{color:#fff;background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{color:#fff;background-color:#010101;border-color:#000}.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled],.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.active{background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs .badge{color:#1a1a1a;background-color:#fff}@media (max-width: 767px){body.o_dmz #o_bg{background:none;display:none}.o_login{padding:0}.o_login .o_login_intro{padding:0;text-align:left}.o_login .o_login_box_wrapper{text-align:center;padding:0}.o_login .o_login_box{padding-left:0;padding-right:0}.o_login .o_login_box .o_login_providers,.o_login .o_login_box .o_login_provider{-webkit-box-shadow:none;box-shadow:none}.o_login .o_login_messages,.o_login .o_login_box{width:100%;display:block}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px;margin-top:10px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.o_library_icon:before{content:""}.o_library ul{list-style:none;margin:0 0 15px 0;padding:0}.o_library ul ul{margin:0}.o_library_overview .o_library_newest_files ul li{float:left;margin-right:15px}.o_library_item{margin-bottom:10px;position:relative}.o_library_item .o_library_visual,.o_library_item .o_library_extra,.o_library_item .o_library_meta{margin-top:15px}.o_library_item .o_library_visual{float:left;background-color:#fff;border-radius:4px;border:1px solid #ddd}.o_library_item .o_library_visual .o_thumbnail_available,.o_library_item .o_library_visual .o_thumbnail_unavailable{background-size:146px auto;width:150px !important;height:150px !important;background-repeat:no-repeat;background-position:50% 50%}.o_library_item .o_library_visual .o_thumbnail_available:before,.o_library_item .o_library_visual .o_thumbnail_unavailable:before{content:none}.o_library_item .o_library_visual .o_thumbnail_available{background-size:146px auto}.o_library_item .o_library_visual .o_thumbnail_unavailable{display:none}.o_library_item .o_library_extra{float:right;width:200px}.o_library_item .o_library_meta{clear:both}.o_library_item .o_library_meta .o_library_desc{padding-bottom:10px}.o_library_item .o_library_meta small{display:block;word-wrap:break-word}.o_library_item h4,.o_library_item .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item h2{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:normal}.o_library_item .btn{display:block;margin-bottom:0.5em}.o_library_item .o_comments{display:inline-block}.o_library_item .table{table-layout:fixed;word-wrap:break-word;margin-bottom:0}.o_library_item p.o_library_show_more{text-align:right;margin:0;padding-top:20px}.o_library_item .o_library_more{padding-top:20px;display:none}.o_library_folder{margin-top:-20px}.o_ratings_and_comments .o_rating_title,.o_ratings_and_comments .o_rating_explanation{display:none}@media (min-width: 768px){.o_library_item .o_library_meta{clear:none;margin-left:150px;margin-right:200px;padding:0 10px}.o_library_item .o_library_more{display:none}.o_library_item .o_library_more table tbody{vertical-align:top}.o_library_item .o_library_more table tr,.o_library_item .o_library_more table th,.o_library_item .o_library_more table td{display:inline-block}.o_library_item .o_library_more table tr{width:49%}.o_library_item .o_library_more table th{width:30%}.o_library_item .o_library_more table td{width:70%}}.o_library_item_compact .o_library_extra{width:auto}.o_library_item_compact .o_library_meta{padding:0 10px 0 0;margin:0;overflow:hidden}.o_library_item_compact .btn{display:inline-block}.o_library_item_compact h4,.o_library_item_compact .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item_compact h2{overflow:hidden;margin-right:70px}.o_library_item_compact h4 a,.o_library_item_compact .o_cal .fc-header-title h2 a,.o_cal .fc-header-title .o_library_item_compact h2 a{text-overflow:ellipsis;white-space:nowrap}.o_library_item_compact p.o_library_show_more{padding:20px;position:absolute;top:0;right:0}span.o_translation_i18nitem{position:relative !important}span.o_translation_i18nitem a.o_translation_i18nitem_launcher{position:absolute !important;z-index:100 !important;width:18px !important;height:20px !important;top:0 !important;left:5px !important;background:#fff;border:1px solid #337ab7 !important;border-radius:3px;text-align:center;padding:0 !important}.o_user_infos{position:relative}.o_user_infos .o_user_portrait{position:absolute;top:0;left:15px;width:100px;height:100px}.o_user_infos .o_user_infos_inner{margin:0 30px 0 100px}.o_user_infos .o_user_infos_inner table{margin:0 30px 15px 30px}.o_members_pagination{text-align:center}.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:66px;height:66px;margin-right:10px}@media (max-width: 767px){.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:50px;height:50px;margin:5px 5px 0 0}}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon,.ui-state-default .ui-icon,.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-active .ui-icon,.ui-state-highlight .ui-icon,.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background:none;background-image:none}.ui-dialog{-webkit-box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-dialog-title{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close:before{content:"" !important}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;font-size:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close span{display:none}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important;float:right}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px;overflow:auto;background:white !important}.ui-dialog .ui-dialog-titlebar{padding:4px 7px 4px 7px;background-color:#eee !important}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{z-index:2000 !important;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #2e6da4;background:#337ab7;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent}label.mce-label{display:inline;max-width:150px;margin-bottom:0;font-weight:normal}i.mce-ico.mce-i-media,i.mce-ico.mce-i-movie,i.mce-ico.mce-i-help{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}i.mce-ico.mce-i-media:before{content:""}i.mce-ico.mce-i-movie:before{content:""}i.mce-ico.mce-i-help{width:9px;height:9px;padding-top:1px}i.mce-ico.mce-i-help:before{content:"";color:white}.mce-tabs span.o_chelp_wrapper{float:right;margin:5px}@media print{a[href]:after{content:""}#o_header_wrapper,#o_offcanvas_right,#o_navbar_wrapper,#o_footer_wrapper,#o_toplink,#o_main_left,#o_main_right,#o_main_toolbar,#jsMath_PrintWarning,.o_noti,.o_opener,.o_hide,.o_noprint{display:none !important}.o_print_break_avoid{page-break-inside:avoid}.o_print_break_before{page-break-before:always}body.o_dmz{background:white !important}.progress{-webkit-print-color-adjust:exact;background-color:rgba(0,0,0,0.1) !important;border:1px solid rgba(0,0,0,0.5)}.progress-bar{-webkit-print-color-adjust:exact;background-color:#000 !important;border:10px solid #000}}body.o_browser_ie7 #o_offcanvas_right,body.o_browser_ie8 #o_offcanvas_right{right:0px}
\ No newline at end of file
+@media (max-width: 767px){.o_noti .o_label span{display:none}}.panel-body .o_noti{margin:0}.o_portrait{display:inline-block}.o_portrait img{border-radius:50%;border:none;background-color:#eee;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.o_portrait_name{margin-top:6px}.o_block_inline .o_portait,.o_block_inline .o_portrait_name,.o_block_inline .o_portrait_image,.o_block_inline_right .o_portait,.o_block_inline_right .o_portrait_name,.o_block_inline_right .o_portrait_image,.o_block_inline_left .o_portait,.o_block_inline_left .o_portrait_name,.o_block_inline_left .o_portrait_image,.o_block_inline_both .o_portait,.o_block_inline_both .o_portrait_name,.o_block_inline_both .o_portrait_image{display:inline-block}.o_portrait_avatar,.o_portrait_dummy,.o_portrait_dummy_female_big,.o_portrait_dummy_male_big,.o_portrait_anonymous{width:100px;height:100px}.o_portrait_dummy{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_dummy_female_big{background-image:url("../light/images/portrait/dummy_female_big.png")}.o_portrait_dummy_male_big{background-image:url("../light/images/portrait/dummy_male_big.png")}.o_portrait_anonymous{background-image:url("../light/images/portrait/anonymous.png")}.o_portrait_avatar_small,.o_portrait_dummy_small,.o_portrait_dummy_female_small,.o_portrait_dummy_male_small,.o_portrait_anonymous_small{width:30px;height:30px}.o_portrait_dummy_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_portrait_dummy_female_small{background-image:url("../light/images/portrait/dummy_female_small.png")}.o_portrait_dummy_male_small{background-image:url("../light/images/portrait/dummy_male_small.png")}.o_portrait_anonymous_small{background-image:url("../light/images/portrait/anonymous_small.png")}.o_datecomp{position:relative;width:40px;height:52px;border:1px solid #555;margin-right:12px;text-align:center;vertical-align:middle}.o_datecomp div.o_year{position:absolute;left:0;width:100%;top:-20px;height:20px;line-height:20px;font-size:10px}.o_datecomp div.o_month{height:20px;line-height:20px;font-size:12px;background-color:#337ab7;color:#fff}.o_datecomp div.o_day{height:30px;line-height:30px;font-size:18px;border-top:1px solid #555;background-color:#fff;color:#333}.o_block_with_datecomp .o_head{position:relative;padding-left:52px}.o_block_with_datecomp .o_datecomp{position:absolute;top:0.2em;left:0}.o_block_with_datecomp .o_title{margin-top:0}.o_block_with_datecomp .o_meta{color:#777}.o_block_with_datecomp .o_content{border-left:5px solid #eee;padding:0 20px}.o_block_with_datecomp .o_block_footer{padding-left:25px}ul.o_certificates li{padding:5px 0}ul.o_certificates li a.o_sel_certificate_delete{padding-left:2em}.o_cal_toptoolbar{margin-bottom:6px}.o_cal_toptoolbar .o_cal_toptoolbar_help{float:left;margin-right:12px}.o_feed .o_date,.o_feed .o_author{color:#777}.o_feed .o_subscription a{margin-right:1.5em}.o_feed .o_subscription .form-group{margin-bottom:5px}.o_feed .o_subscription .form-control{border:0;background:none;padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper{float:left}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_title,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_explanation,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_legend{display:none}.o_feed .o_blog_posts .o_ratings_and_comments a.o_comments span{display:none}.o_feed .o_content:before,.o_feed .o_content:after{content:" ";display:table}.o_feed .o_content:after{clear:both}.o_glossary .o_register{text-align:center}.o_glossary .o_meta{font-size:90%;color:#777;font-style:italic}.o_glossary dl dt:first-letter{font-size:21px}.o_glossary dl dt small{color:#777}.o_tm_glossary{border-bottom:1px dotted #666699 !important}.o_tm_yellow{background-color:#FFFF66}.o_tm_blue{background-color:#33FFFF}.o_tm_red{background-color:#FF3333}.o_tm_green{background-color:#99FF00}.vitero_iframe{width:100%;height:100%;border:none;min-height:60em}.o_reminder_rule{padding:5px 0}.o_segments.btn-group a span{overflow:hidden;display:block;text-overflow:ellipsis}.o_segments_content{margin-top:20px}.o_tabbed_pane .o_tabbed_pane_content{padding:20px 0 6px 0}.o_togglebox_wrapper .o_opener{position:relative;left:-0.5em}.o_togglebox_wrapper div.o_togglebox_content{position:relative;margin:0}.o_togglebox_wrapper div.o_togglebox_content .o_hide{position:absolute;bottom:0.5em;right:1em}.o_toolboxes ul{margin:0 0 1.5em 0;padding:0 0 0 1.5em}.o_qrcode{width:256px;height:256px}#o_ajax_busy{position:absolute;left:50%;top:20em;margin-left:-2.5em;height:5em;width:5em;color:#fff;z-index:1201;display:none}#o_body.o_ajax_busy{cursor:busy}.o_exception .o_visual{position:relative;background-image:url("../light/images/lion-500x333.jpg");filter:grayscale(50%);-webkit-filter:grayscale(50%);-moz-filter:grayscale(50%);-ms-filter:grayscale(50%);-o-filter:grayscale(50%);width:500px;height:333px;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;margin:0 0 10px 16px}@media (min-width: 768px) and (max-width: 991px){.o_exception .o_visual{width:375px;height:249px}}@media (min-width: 500px) and (max-width: 767px){.o_exception .o_visual{width:250px;height:166px}}@media (max-width: 500px){.o_exception .o_visual{background-size:cover}}.o_exception .jumbotron h1,.o_exception .o_repo_details .o_lead h1,.o_repo_details .o_exception .o_lead h1{color:#d9534f}.tt-input{width:400px}.tt-dropdown-menu{width:400px;margin-top:6px;padding:0 0 0;color:#555;background-color:#fff;border:1px solid #66afe9;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;-webkit-box-shadow:0 0 8px rgba(102,175,233,0.6);box-shadow:0 0 8px rgba(102,175,233,0.6)}.tt-suggestion{padding:6px 12px;font-size:14px;line-height:1.42857}.tt-suggestion.tt-cursor{color:#fff;background-color:#337ab7}.tt-suggestion p{margin:0}.o_search_link_extended,.o_search_link_simple{margin-top:12px;display:inline-block}.o_search_results_stats{color:#777;padding-left:1.5em}.o_search_highlight{margin-left:12px;font-size:12px}.o_search_result_title h4,.o_search_result_title .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_search_result_title h2{display:inline-block;margin-right:12px;margin-bottom:6px}.o_search_result_highlight{font-weight:bold}.o_search_result_context{color:#3c763d}.o_search_result_excerpt{color:#555}.o_search_result_details .o_togglebox_wrapper.o_block{margin-top:0;margin-bottom:0}.o_search_result_details .o_togglebox_wrapper .o_togglebox_content{color:#777;font-size:12px;background:#fff;padding:6px 12px}@media (max-width: 767px){.o_search_result_details{display:none}}.wizard{border:1px solid #d4d4d4;border-radius:2px;background-color:#f9f9f9;position:relative;overflow:hidden;margin-bottom:15px}.wizard ul{list-style:none outside none;padding:0;margin:0;width:4000px}.wizard ul li{float:left;margin:0;padding:0 20px 0 30px;height:46px;line-height:46px;position:relative;background:#ededed;color:#333;font-size:16px;cursor:default}.wizard ul li .chevron{border:24px solid transparent;border-left:14px solid #d4d4d4;border-right:0;display:block;position:absolute;right:-14px;top:0;z-index:1}.wizard ul li .chevron:before{border:24px solid transparent;border-left:14px solid #ededed;border-right:0;content:"";display:block;position:absolute;right:1px;top:-24px}.wizard ul li.active{background:#f1f6fc;color:#333}.wizard ul li.active .chevron:before{border-left:14px solid #f1f6fc}.wizard ul li .badge{margin-right:8px}.wizard ul li:first-child{border-radius:4px 0 0 4px;padding-left:20px}.o_process{position:relative;padding-left:25px}.o_process .o_step{position:relative;height:auto;padding-top:10px;padding-left:30px;padding-bottom:10px}.o_process .o_bar{position:absolute;top:10px;left:8px;height:100%;border-left:4px solid #777}.o_process .o_bar:after{position:absolute;top:0;left:-10px;height:16px;width:16px;border:4px solid #777;border-radius:16px;background:#fff;content:" "}.o_process .o_title{margin-top:-1px;color:#777 !important}.o_process .o_title:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);position:absolute;left:-24px}.o_process .o_title a:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0);content:"";width:1em}.o_process .o_title a.collapsed:before{content:""}.o_process .o_step.o_active .o_bar,.o_process .o_step.o_active .o_bar:after{border-color:#337ab7}.o_process .o_step.o_active .o_title{color:#337ab7 !important}.o_process .o_step.o_active .o_title:before{content:"";color:#337ab7}.o_process .o_step.o_done .o_bar,.o_process .o_step.o_done .o_bar:after{border-color:#5094ce}.o_process .o_step.o_done .o_title{color:#5094ce !important}.o_process .o_step.o_done .o_title:before{content:"";color:#5cb85c}.o_process .o_meta{color:#777;font-size:12px;margin-top:-0.5em}.o_cal_orange{background:#ffc266;border-color:#ff9900;color:#5D5D5D}.o_cal_orange .o_cal_wv_event_header{background:#ff9900}.o_cal_orange a{color:#5D5D5D !important}.o_cal_green{background:#66c266;border-color:#009900;color:#FFF}.o_cal_green .o_cal_wv_event_header{background:#009900}.o_cal_green a{color:#FFF !important}.o_cal_blue{background:#4d6e9f;border-color:#2e5894;color:#FFF}.o_cal_blue .o_cal_wv_event_header{background:#2e5894}.o_cal_blue a{color:#FFF !important}.o_cal_yellow{background:#ffe066;border-color:#ffcc00;color:#5D5D5D}.o_cal_yellow .o_cal_wv_event_header{background:#ffcc00}.o_cal_yellow a{color:#5D5D5D !important}.o_cal_red{background:#c26666;border-color:#990000;color:#FFF}.o_cal_red .o_cal_wv_event_header{background:#990000}.o_cal_red a{color:#FFF !important}.o_cal_rebeccapurple{background:#663399;border-color:#663399;color:#FFF}.o_cal_rebeccapurple .o_cal_wv_event_header{background:#663399}.o_cal_rebeccapurple a{color:#FFF !important}.o_cal_grey{background:#DDDAAA;border-color:#5D5D5D;color:#FFF}.o_cal_grey .o_cal_wv_event_header{background:#5D5D5D}.o_cal_grey a{color:#FFF !important}.o_sel_calendar_print_chooser{padding-right:4em}.o_cal_config_enabled,.o_cal_config_disabled{position:relative;float:left;display:inline}.o_cal_config_calendar{margin:0 5px;padding:1px 6px 1px 4px;position:relative;width:200px;overflow:hidden;float:left;display:inline}.o_cal_config_color{display:block;width:16px;height:16px;border-radius:8px}.o_cal_colorchooser_selected:before{content:""}#o_cal_colorchooser div{border:1px solid #337ab7;margin:5px;display:inline-block}#o_cal_colorchooser div:hover{border:1px solid #333}#o_cal_colorchooser a{width:20px;height:20px;display:inline-block}.fc-button{color:#333;background-color:#fff;border-color:#ccc}.fc-button:hover,.fc-button:focus,.fc-button.focus,.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.fc-button:active,.fc-button.active,.open>.fc-button.dropdown-toggle{background-image:none}.fc-button.disabled,.fc-button.disabled:hover,.fc-button.disabled:focus,.fc-button.disabled.focus,.fc-button.disabled:active,.fc-button.disabled.active,.fc-button[disabled],.fc-button[disabled]:hover,.fc-button[disabled]:focus,.fc-button[disabled].focus,.fc-button[disabled]:active,.fc-button[disabled].active,fieldset[disabled] .fc-button,fieldset[disabled] .fc-button:hover,fieldset[disabled] .fc-button:focus,fieldset[disabled] .fc-button.focus,fieldset[disabled] .fc-button:active,fieldset[disabled] .fc-button.active{background-color:#fff;border-color:#ccc}.fc-button .badge{color:#fff;background-color:#333}.fc-button.fc-state-default{text-shadow:none}.fc-button.fc-state-active{color:#fff;background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active:hover,.fc-button.fc-state-active:focus,.fc-button.fc-state-active.focus,.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.fc-button.fc-state-active:active,.fc-button.fc-state-active.active,.open>.fc-button.fc-state-active.dropdown-toggle{background-image:none}.fc-button.fc-state-active.disabled,.fc-button.fc-state-active.disabled:hover,.fc-button.fc-state-active.disabled:focus,.fc-button.fc-state-active.disabled.focus,.fc-button.fc-state-active.disabled:active,.fc-button.fc-state-active.disabled.active,.fc-button.fc-state-active[disabled],.fc-button.fc-state-active[disabled]:hover,.fc-button.fc-state-active[disabled]:focus,.fc-button.fc-state-active[disabled].focus,.fc-button.fc-state-active[disabled]:active,.fc-button.fc-state-active[disabled].active,fieldset[disabled] .fc-button.fc-state-active,fieldset[disabled] .fc-button.fc-state-active:hover,fieldset[disabled] .fc-button.fc-state-active:focus,fieldset[disabled] .fc-button.fc-state-active.focus,fieldset[disabled] .fc-button.fc-state-active:active,fieldset[disabled] .fc-button.fc-state-active.active{background-color:#337ab7;border-color:#2e6da4}.fc-button.fc-state-active .badge{color:#337ab7;background-color:#fff}.o_visual{position:absolute;top:0;left:0;overflow:hidden;height:120px;width:180px;vertical-align:middle}@media (min-width: 768px) and (max-width: 991px){.o_visual{height:80px;width:120px}}@media (max-width: 767px){.o_visual{height:50px;width:75px}}.o_visual img{width:100%;height:auto}.o_visual .o_visual_not_available{width:100%;height:100%;background-image:url("../light/images/no_preview.png");background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.o_coursetable.o_rendertype_custom .o_table_row{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_coursetable.o_rendertype_custom .o_table_row .o_visual{border-right:1px solid #337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_access{position:absolute;top:0;right:0;height:120px;width:180px;overflow:hidden;border-left:1px solid #337ab7;padding-top:0.25em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{padding:0 1em;height:20px;line-height:20px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{position:relative;left:2px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score .o_label{color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social{position:absolute;width:100%;bottom:32px;height:20px;padding-left:1em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_title,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating o_rating_legend,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_explanation{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings{padding:0 0 0 1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label{margin-bottom:1em;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_methods{color:#5bc0de}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{position:absolute;display:block;bottom:0;width:90px;height:30px;line-height:30px;text-align:center}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{right:0}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start{color:#fff;background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-color:#337ab7;border-color:#2e6da4}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start .badge{color:#337ab7;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book .badge{color:#f0ad4e;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:90px;color:#fff;background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active,.open>.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details .badge{color:#5cb85c;background-color:#fff}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{height:80px;width:120px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_comments,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_label{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{width:60px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:60px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:120px;margin:0 180px 0 180px;position:relative;padding:1em 0.5em 0.25em 1em;overflow:hidden}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{margin:0;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{display:block;color:#337ab7}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover{color:#286090}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author{margin-top:0.5em;line-height:normal;font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle{position:absolute;top:5px;right:40px;font-size:90%;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#777}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active{color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active:hover{color:#2b542c}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{margin-top:0.5em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark{position:absolute;top:-1px;right:15px}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:80px;margin:0 120px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:50px;margin:0 0 0 75px;padding:0 0 0 1em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{line-height:50px}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{border-right:37px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_go_xs{position:absolute;top:0;right:0;padding:0 1em;height:50px;width:37px;line-height:50px;color:#fff;background-color:#337ab7}.o_coursetable.o_rendertype_classic .o_rating_explanation{display:none}.o_coursetable.o_rendertype_classic .o_start,.o_coursetable.o_rendertype_classic .o_book{white-space:nowrap}.o_coursetable.o_rendertype_classic .o_repoentry_type{color:#555}.o_coursetable.o_rendertype_classic .o_repoentry_ac{color:#555}.o_catalog .o_level{position:relative;margin-bottom:10px;padding:0;border-top:1px solid #337ab7;border-bottom:1px solid #337ab7}.o_catalog .o_level .o_visual{height:180px}.o_catalog .o_level .o_meta{position:relative;min-height:180px;height:180px;overflow:hidden;margin:0 0 0 180px;padding:1em 0.5em 0.5em 2em}.o_catalog .o_level .o_meta .o_title{margin:0}.o_catalog .o_level .o_meta .o_title a{display:block;color:#337ab7}.o_catalog .o_level .o_meta .o_title a:hover{color:#286090}.o_catalog .o_level .o_meta .o_desc{padding:1em 0 0.5em 0}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_level .o_visual{height:120px}.o_catalog .o_level .o_meta{min-height:120px;height:120px;margin:0 0 0 120px}}@media (max-width: 767px){.o_catalog .o_level .o_visual{height:75px}.o_catalog .o_level .o_meta{min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em}.o_catalog .o_level .o_meta .o_title{line-height:75px}.o_catalog .o_level .o_meta .o_desc{display:none}}.o_catalog .o_sublevels_list .o_sublevel{position:relative;border:1px solid #337ab7;margin-bottom:10px}.o_catalog .o_sublevels_list .o_sublevel .o_visual{height:75px;width:75px}.o_catalog .o_sublevels_list .o_sublevel .o_title{margin:0}.o_catalog .o_sublevels_list .o_sublevel .o_meta{border-left:1px solid #337ab7;min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em;overflow:hidden}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_title{line-height:75px}.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_desc{display:none}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a{font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels_list .o_sublevel .o_meta h4.o_title>a>i,.o_catalog .o_sublevels_list .o_sublevel .o_meta .o_cal .fc-header-title h2.o_title>a>i,.o_cal .fc-header-title .o_catalog .o_sublevels_list .o_sublevel .o_meta h2.o_title>a>i{display:none}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels{border:1px solid transparent}.o_catalog .o_sublevels_list .o_sublevel.o_fill_sublevels .o_meta{border-left:1px solid transparent}.o_catalog .o_sublevels{position:relative;margin-bottom:20px}.o_catalog .o_sublevels:before,.o_catalog .o_sublevels:after{content:" ";display:table}.o_catalog .o_sublevels:after{clear:both}.o_catalog .o_sublevels .o_sublevel{position:relative;float:left;margin:0 20px 20px 0;width:180px}.o_catalog .o_sublevels .o_sublevel:last-child{margin-right:0}.o_catalog .o_sublevels .o_sublevel .o_visual{border:1px solid #337ab7;position:relative;height:180px}.o_catalog .o_sublevels .o_sublevel .o_meta{position:absolute;left:0;bottom:0;width:100%;border:1px solid #337ab7;border-top:0;background-color:rgba(255,255,255,0.8)}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title{margin:0;text-align:center;line-height:2em;height:2em;width:100%;overflow:hidden}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a{display:block;color:#337ab7;font-family:inherit;font-weight:inherit}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover{color:#286090}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a>i{display:none}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 10px 10px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (max-width: 767px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 1px 1px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px;width:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (min-width: 768px){.o_catalog .o_sublevels_list,.o_catalog .o_sublevels_compact{-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2;columns:2}}.o_repo_details{position:relative}.o_repo_details .o_lead{margin-bottom:10px}.o_repo_details .o_lead .o_author{margin-top:0.5em;margin-bottom:1em;font-size:120%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_repo_details .o_lead .o_media{float:right;margin-left:2em;margin-bottom:2em}.o_repo_details .o_lead .o_media.o_desc_empty{float:none;margin-left:0;margin-bottom:0}.o_repo_details .o_lead h1 i{display:none}.o_repo_details .o_overview i{margin-right:0.5em}.o_repo_details .o_overview div{margin-bottom:0.25em}.o_repo_details .o_start,.o_repo_details .o_book{margin:2em 0}.o_repo_details .o_social:before,.o_repo_details .o_social:after{content:" ";display:table}.o_repo_details .o_social:after{clear:both}.o_repo_details .o_social .o_rating_wrapper{float:left}.o_repo_details .o_social .o_comments{margin-left:1em}@media (max-width: 767px){.o_repo_details .o_lead p{font-size:16px}.o_repo_details .o_lead .o_media{margin-left:0;float:none;text-align:center}}@media (max-width: 613px){.o_repo_details .o_subcolumn{width:100%}}.o_meta .o_closed{padding:2px 5px;margin:5px 0}.o_overview .o_closed{padding:12px 15px;margin:15px 0}.o_ac_configuration span.o_ac_infos{font-weight:normal;color:grey}.badge.o_midpub{background-color:#3c763d}.badge.o_midwarn{background-color:#8a6d3b}.badge.o_midlock{background-color:#31708f}.badge.o_miderr{background-color:#a94442}.badge.o_middel{background-color:#777}.o_course_editor_legend .badge{font-size:80%}.o_course_editor_legend .badge:before{content:none}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#66512c}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#777}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #777}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#777}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_course_run.o_titled_wrapper>h2 i{display:none}.o_tree.o_course_menu div.o_tree_l0>a:first-child{background-color:none}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_ll_container h5{margin-bottom:5px}.o_ll_container h5 a.o_desc{color:#337ab7}.o_ll_container h5 a.o_desc small{display:none}.o_ll_container h5 a.o_desc:hover{color:#286090;text-decoration:none}.o_ll_container h5 a.o_desc:hover small{color:#5e5e5e;display:inline}.o_ll_container div.o_comment{color:#777}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:10px}.o_cmembers .o_cmember .o_portrait img{width:50px;height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:50px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}td.o_qti_item_kprim_input .radio,th.o_qti_item_kprim_input .radio{display:inline}div.o_qti_menu_section,div.o_qti_menu_section_clickable,div.o_qti_menu_section_active{margin-top:10px}div.o_qti_menu_item a,div.o_qti_menu_section a{text-decoration:none}div.o_qti_menu_item{padding:.1em}div.o_qti_menu_item_active{padding:.1em;font-weight:bold}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}div.o_qti_item_choice_option_flow{display:inline-block;padding:.5em;border:1px solid transparent}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}div.o_qti_metadatas .panel-body{border-top:none}.o_qti_menu_item_attempts:after,.o_qti_menu_item_attempts_marked:after{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_qti_menu_item_attempts:after{content:""}.o_qti_menu_item_attempts_marked:after{content:"";color:#337ab7}.onyx_iframe{width:100%;height:100%;border:none;min-height:60em}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:""}.o_ep_icon_collection:before{content:""}.o_ep_icon_page:before{content:""}.o_ep_icon_struct:before{content:""}.o_ep_icon_liveblog:before{content:""}.o_artefact_closed:before{content:""}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.o_eportfolio_page .o_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif;box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.panel-footer .o_ep_options{display:inline-block}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #efefef, #fafafa);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_map-epmst-green{background-color:#ECF69A;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_map-epmst-green2{background:#99E44D;background:#99E44D -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99E44D), to(#CBF1A5));background:#99E44D -moz-linear-gradient(43% 71% 101deg, #CBF1A5, #99E44D);background:#99E44D -o-linear-gradient(#99E44D, #CBF1A5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99E44D', EndColorStr='#CBF1A5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_map-epmst-green3{background:#DFF0C1;background:#DFF0C1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DFF0C1), to(#A0D346));background:#DFF0C1 -moz-linear-gradient(43% 71% 101deg, #A0D346, #DFF0C1);background:#DFF0C1 -o-linear-gradient(#DFF0C1, #A0D346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DFF0C1', EndColorStr='#A0D346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_map-epmst-green4{background-color:#D7DBB5;border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_map-epmst-red{background:#FFBA71;background:#FFBA71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFBA71), to(#FFBA99));background:#FFBA71 -moz-linear-gradient(43% 71% 101deg, #FFBA99, #FFBA71);background:#FFBA71 -o-linear-gradient(#FFBA71, #FFBA99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFBA71', EndColorStr='#FFBA99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_map-epmst-red2{background:#FF9772;background:#FF9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FF9772), to(#FF9780));background:#FF9772 -moz-linear-gradient(43% 71% 101deg, #FF9780, #FF9772);background:#FF9772 -o-linear-gradient(#FF9772, #FF9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FF9772', EndColorStr='#FF9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_map-epmst-red3{background:#E8AFBB;background:#E8AFBB -webkit-gradient(linear, 37% 20%, 53% 100%, from(#E8AFBB), to(#E8AFA0));background:#E8AFBB -moz-linear-gradient(43% 71% 101deg, #E8AFA0, #E8AFBB);background:#E8AFBB -o-linear-gradient(#E8AFBB, #E8AFA0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#E8AFBB', EndColorStr='#E8AFA0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_map-epmst-red4{background:#FFA800;background:#FFA800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#FFA800), to(#FFAF00));background:#FFA800 -moz-linear-gradient(43% 71% 101deg, #FFAF00, #FFA800);background:#FFA800 -o-linear-gradient(#FFA800, #FFAF00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFA800', EndColorStr='#FFAF00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_map-epmst-blue{background:#00D2F8;background:#00D2F8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00D2F8), to(#4A9EAD));background:#00D2F8 -moz-linear-gradient(43% 71% 101deg, #4A9EAD, #00D2F8);background:#00D2F8 -o-linear-gradient(#00D2F8, #4A9EAD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00D2F8', EndColorStr='#4A9EAD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_map-epmst-blue2{background-color:#C4F6FF;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_map-epmst-blue3{background-color:#B3E2F7;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_map-epmst-blue4{background:#DEE7F7;background:#DEE7F7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#DEE7F7), to(#C1E9FD));background:#DEE7F7 -moz-linear-gradient(43% 71% 101deg, #C1E9FD, #DEE7F7);background:#DEE7F7 -o-linear-gradient(#DEE7F7, #C1E9FD);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#DEE7F7', EndColorStr='#C1E9FD');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_userbulk_changedcell{font-style:italic;font-weight:bold}body.o_dmz{background:transparent}body.o_dmz #o_bg{position:absolute;top:0;left:0;width:100%;height:100%;border-top:50px solid transparent;border-bottom:70px solid transparent;background:url("../light/images/learn-bg.jpg");background-size:cover;background-position:center center;background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=1 )}body.o_dmz #o_bg:after{content:" ";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(to right, rgba(255,255,255,0.1) 0.2%, rgba(255,255,255,0.6) 60%, rgba(255,255,255,0.8) 100%);background-size:cover;background-position:center center;background-repeat:no-repeat}body.o_dmz #o_toplink{display:none}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-bottom:20px;padding-left:10%;padding-right:10%;text-align:right}.o_login .o_login_intro{padding-left:10%}.o_login .o_login_intro h1{margin-bottom:40px;color:#337ab7}.o_login .o_login_intro .lead{color:#333}.o_login .o_login_intro .lead h1,.o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h3,.o_login .o_login_intro .lead h4,.o_login .o_login_intro .lead .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_login .o_login_intro .lead h2,.o_login .o_login_intro .lead h5{margin-bottom:20px;color:#337ab7}.o_login .o_login_messages,.o_login .o_login_box{display:inline-block;width:400px;text-align:left}.o_login .o_login_messages .o_infomessage_wrapper{background:rgba(255,255,255,0.5);border:1px solid transparent;border-radius:4px;padding:6px 12px}.o_login .o_login_messages .o_infomessage_wrapper .o_info,.o_login .o_login_messages .o_infomessage_wrapper .o_warning,.o_login .o_login_messages .o_infomessage_wrapper .o_note{margin:0}.o_login .o_login_box{padding-top:10px}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_providers .o_icon_provider_olat{font-size:1em}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3);box-shadow:0px 1px 10px -1px rgba(0,0,0,0.3)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_form .o_form .o_desc{margin:0 0 30px 0;padding:0;border-left:0;background-color:transparent}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register.focus,.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active,.open>.o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled.focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled].focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register.focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}.o_login .o_login_social{position:relative;padding:10px 12px}.o_login .o_login_social li{padding:10px 12px}.o_login .o_login_social li>a{display:block;line-height:2em;text-align:center;font-size:18px;border-radius:4px;padding:10px 12px}.o_login .o_login_social .btn-default.o_sel_auth_facebook{color:#fff;background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{color:#fff;background-color:#37538d;border-color:#2d4374}.o_login .o_login_social .btn-default.o_sel_auth_facebook:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_facebook.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled],.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_facebook[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_facebook.active{background-color:#4568b2;border-color:#3e5da0}.o_login .o_login_social .btn-default.o_sel_auth_facebook .badge{color:#4568b2;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_twitter{color:#fff;background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{color:#fff;background-color:#00b4f8;border-color:#009ad4}.o_login .o_login_social .btn-default.o_sel_auth_twitter:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_twitter.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled],.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_twitter[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_twitter.active{background-color:#2cc5ff;border-color:#13beff}.o_login .o_login_social .btn-default.o_sel_auth_twitter .badge{color:#2cc5ff;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_google{color:#fff;background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google:hover,.o_login .o_login_social .btn-default.o_sel_auth_google:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.focus,.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{color:#fff;background-color:#d83825;border-color:#ba3120}.o_login .o_login_social .btn-default.o_sel_auth_google:active,.o_login .o_login_social .btn-default.o_sel_auth_google.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_google.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_google.disabled,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_google.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled],.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_google[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_google.active{background-color:#e15f4f;border-color:#dd4b39}.o_login .o_login_social .btn-default.o_sel_auth_google .badge{color:#e15f4f;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_linkedin{color:#fff;background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{color:#fff;background-color:#015e8a;border-color:#014667}.o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_linkedin.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled],.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_linkedin[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_linkedin.active{background-color:#0181bd;border-color:#0170a4}.o_login .o_login_social .btn-default.o_sel_auth_linkedin .badge{color:#0181bd;background-color:#fff}.o_login .o_login_social .btn-default.o_sel_auth_adfs{color:#fff;background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{color:#fff;background-color:#010101;border-color:#000}.o_login .o_login_social .btn-default.o_sel_auth_adfs:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.active,.open>.o_login .o_login_social .btn-default.o_sel_auth_adfs.dropdown-toggle{background-image:none}.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs.disabled.active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled],.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:hover,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].focus,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled]:active,.o_login .o_login_social .btn-default.o_sel_auth_adfs[disabled].active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:hover,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.focus,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs:active,fieldset[disabled] .o_login .o_login_social .btn-default.o_sel_auth_adfs.active{background-color:#1a1a1a;border-color:#0d0d0d}.o_login .o_login_social .btn-default.o_sel_auth_adfs .badge{color:#1a1a1a;background-color:#fff}@media (max-width: 767px){body.o_dmz #o_bg{background:none;display:none}.o_login{padding:0}.o_login .o_login_intro{padding:0;text-align:left}.o_login .o_login_box_wrapper{text-align:center;padding:0}.o_login .o_login_box{padding-left:0;padding-right:0}.o_login .o_login_box .o_login_providers,.o_login .o_login_box .o_login_provider{-webkit-box-shadow:none;box-shadow:none}.o_login .o_login_messages,.o_login .o_login_box{width:100%;display:block}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px;margin-top:10px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.o_library_icon:before{content:""}.o_library ul{list-style:none;margin:0 0 15px 0;padding:0}.o_library ul ul{margin:0}.o_library_overview .o_library_newest_files ul li{float:left;margin-right:15px}.o_library_item{margin-bottom:10px;position:relative}.o_library_item .o_library_visual,.o_library_item .o_library_extra,.o_library_item .o_library_meta{margin-top:15px}.o_library_item .o_library_visual{float:left;background-color:#fff;border-radius:4px;border:1px solid #ddd}.o_library_item .o_library_visual .o_thumbnail_available,.o_library_item .o_library_visual .o_thumbnail_unavailable{background-size:146px auto;width:150px !important;height:150px !important;background-repeat:no-repeat;background-position:50% 50%}.o_library_item .o_library_visual .o_thumbnail_available:before,.o_library_item .o_library_visual .o_thumbnail_unavailable:before{content:none}.o_library_item .o_library_visual .o_thumbnail_available{background-size:146px auto}.o_library_item .o_library_visual .o_thumbnail_unavailable{display:none}.o_library_item .o_library_extra{float:right;width:200px}.o_library_item .o_library_meta{clear:both}.o_library_item .o_library_meta .o_library_desc{padding-bottom:10px}.o_library_item .o_library_meta small{display:block;word-wrap:break-word}.o_library_item h4,.o_library_item .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item h2{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:normal}.o_library_item .btn{display:block;margin-bottom:0.5em}.o_library_item .o_comments{display:inline-block}.o_library_item .table{table-layout:fixed;word-wrap:break-word;margin-bottom:0}.o_library_item p.o_library_show_more{text-align:right;margin:0;padding-top:20px}.o_library_item .o_library_more{padding-top:20px;display:none}.o_library_folder{margin-top:-20px}.o_ratings_and_comments .o_rating_title,.o_ratings_and_comments .o_rating_explanation{display:none}@media (min-width: 768px){.o_library_item .o_library_meta{clear:none;margin-left:150px;margin-right:200px;padding:0 10px}.o_library_item .o_library_more{display:none}.o_library_item .o_library_more table tbody{vertical-align:top}.o_library_item .o_library_more table tr,.o_library_item .o_library_more table th,.o_library_item .o_library_more table td{display:inline-block}.o_library_item .o_library_more table tr{width:49%}.o_library_item .o_library_more table th{width:30%}.o_library_item .o_library_more table td{width:70%}}.o_library_item_compact .o_library_extra{width:auto}.o_library_item_compact .o_library_meta{padding:0 10px 0 0;margin:0;overflow:hidden}.o_library_item_compact .btn{display:inline-block}.o_library_item_compact h4,.o_library_item_compact .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_library_item_compact h2{overflow:hidden;margin-right:70px}.o_library_item_compact h4 a,.o_library_item_compact .o_cal .fc-header-title h2 a,.o_cal .fc-header-title .o_library_item_compact h2 a{text-overflow:ellipsis;white-space:nowrap}.o_library_item_compact p.o_library_show_more{padding:20px;position:absolute;top:0;right:0}span.o_translation_i18nitem{position:relative !important}span.o_translation_i18nitem a.o_translation_i18nitem_launcher{position:absolute !important;z-index:100 !important;width:18px !important;height:20px !important;top:0 !important;left:5px !important;background:#fff;border:1px solid #337ab7 !important;border-radius:3px;text-align:center;padding:0 !important}.o_user_infos{position:relative}.o_user_infos .o_user_portrait{position:absolute;top:0;left:15px;width:100px;height:100px}.o_user_infos .o_user_infos_inner{margin:0 30px 0 100px}.o_user_infos .o_user_infos_inner table{margin:0 30px 15px 30px}.o_members_pagination{text-align:center}.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:66px;height:66px;margin-right:10px}@media (max-width: 767px){.o_visitingcard .o_portrait_avatar,.o_visitingcard .o_portrait_dummy,.o_visitingcard .o_portrait_dummy_female_big,.o_visitingcard .o_portrait_dummy_male_big,.o_visitingcard .o_portrait_anonymous{width:50px;height:50px;margin:5px 5px 0 0}}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-icon,.ui-widget-content .ui-icon,.ui-widget-header .ui-icon,.ui-state-default .ui-icon,.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-active .ui-icon,.ui-state-highlight .ui-icon,.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background:none;background-image:none}.ui-dialog{-webkit-box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);box-shadow:0px 1px 8px -1px rgba(0,0,0,0.35);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-dialog-title{color:#337ab7;font-weight:500;font-family:inherit;line-height:1.1}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close:before{content:"" !important}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;font-size:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ui-dialog .ui-widget-header .ui-dialog-titlebar-close span{display:none}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important;float:right}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px;overflow:auto;background:white !important}.ui-dialog .ui-dialog-titlebar{padding:4px 7px 4px 7px;background-color:#eee !important}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{z-index:2000 !important;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #2e6da4;background:#337ab7;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent}label.mce-label{display:inline;max-width:150px;margin-bottom:0;font-weight:normal}i.mce-ico.mce-i-media,i.mce-ico.mce-i-movie,i.mce-ico.mce-i-help{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}i.mce-ico.mce-i-media:before{content:""}i.mce-ico.mce-i-movie:before{content:""}i.mce-ico.mce-i-help{width:9px;height:9px;padding-top:1px}i.mce-ico.mce-i-help:before{content:"";color:white}.mce-tabs span.o_chelp_wrapper{float:right;margin:5px}@media print{a[href]:after{content:""}#o_header_wrapper,#o_offcanvas_right,#o_navbar_wrapper,#o_footer_wrapper,#o_toplink,#o_main_left,#o_main_right,#o_main_toolbar,#jsMath_PrintWarning,.o_noti,.o_opener,.o_hide,.o_noprint{display:none !important}.o_print_break_avoid{page-break-inside:avoid}.o_print_break_before{page-break-before:always}body.o_dmz{background:white !important}.progress{-webkit-print-color-adjust:exact;background-color:rgba(0,0,0,0.1) !important;border:1px solid rgba(0,0,0,0.5)}.progress-bar{-webkit-print-color-adjust:exact;background-color:#000 !important;border:10px solid #000}}body.o_browser_ie7 #o_offcanvas_right,body.o_browser_ie8 #o_offcanvas_right{right:0px}
\ No newline at end of file
diff --git a/src/test/java/org/olat/modules/fo/ForumManagerTest.java b/src/test/java/org/olat/modules/fo/ForumManagerTest.java
index de98ba2a21d..fc2eaed4454 100644
--- a/src/test/java/org/olat/modules/fo/ForumManagerTest.java
+++ b/src/test/java/org/olat/modules/fo/ForumManagerTest.java
@@ -26,160 +26,210 @@
 
 package org.olat.modules.fo;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
 import java.util.Calendar;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 
-import org.junit.Before;
+import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.olat.user.UserManager;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
+ * 
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  * @author Felix Jost
+ *
  */
-
 public class ForumManagerTest extends OlatTestCase {
 
-	private static OLog log = Tracing.createLoggerFor(ForumManagerTest.class); 
-
-	public Identity u1;
-	public Identity u2;
-	public Identity u3;
-	public UserManager um1;
-	
-	public ForumManager fm1;
-	public Forum fo;
-	
-  private Message message1, m3;
-  
-
-	/**
-	 * SetUp is called before each test
-	 */
-	@Before public void setup(){
-		// create some users with user manager
-		try{		
-			log.info("setUp start ------------------------");
-			
-			um1 = UserManager.getInstance();
-			//um1.resetSession(sess);
-			u1 = JunitTestHelper.createAndPersistIdentityAsUser("felix");
-			u2 = JunitTestHelper.createAndPersistIdentityAsUser("migros");
-			u3 = JunitTestHelper.createAndPersistIdentityAsUser("salat");
-			
-			fm1 = ForumManager.getInstance();
-			fo = fm1.addAForum();
-			
-			message1 = new MessageImpl();
-			message1.setTitle("stufe 0: subject 0");
-			message1.setBody("body/n dep 0");
-			
-			Message m2 = new MessageImpl();
-			m2.setTitle("stufe 0: subject 1");
-			m2.setBody("body 2 /n dep 0");
-			
-			m3 = new MessageImpl();
-			m3.setTitle("stufe 1: subject 2");
-			m3.setBody("body 21 /n dep 1");
-			
-			Message m4 = new MessageImpl();
-			m4.setTitle("stufe 1: subject 3");
-			m4.setBody("body 211 /n dep 2");
-			
-			fm1.addTopMessage(u1, fo, message1);
-			fm1.addTopMessage(u2, fo, m2);
-			
-			fm1.replyToMessage(m3, u3, m2);
-			fm1.replyToMessage(m4, u1, m3);			
-			
-			for (int i=0; i<10;i++) {
-				Message m = new MessageImpl();
-				m.setTitle("Title" + i);
-				m.setBody("Body" + i);
-				fm1.replyToMessage(m,u1,m4);
-			}
-			log.info("setUp done ------------------------");
-		}
-		catch(Exception e){
-		 	log.error("Exception in setUp(): "+e);	
-		}
-	}
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	public UserManager userManager;
+	@Autowired
+	public ForumManager forumManager;
 	
 	@Test
-	public void testGetMessagesByForumID() throws Exception {
-		log.debug("Start testGetMessagesByForumID()");
+	public void testGetThread() {
+		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-4");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message message = forumManager.createMessage(fo, id, false);
+		message.setTitle("stufe 0: subject 0");
+		message.setBody("body/n dep 0");
+		forumManager.addTopMessage(message);
+		dbInstance.commit();
+
+		Long messageTopThread = message.getKey();
+		List<Message> threadMessageList = forumManager.getThread(messageTopThread);
+		Assert.assertEquals("Not the right number of messages for this forum", 1, threadMessageList.size());
 		
-		ForumManager foma = ForumManager.getInstance();
-		long start = System.currentTimeMillis();
-		Forum forum = foma.loadForum(fo.getKey());
-		List<Message> messageList = foma.getMessagesByForum(forum);
-		long stop = System.currentTimeMillis();		
-		assertNotNull(messageList);			
-		log.debug("time:"+(stop-start));
-		Iterator<Message> it = messageList.iterator();
-		while (it.hasNext()) {
-			Object o =  it.next();
-			log.debug("object:"+o);
-			Message msg = (Message)o;
-			log.debug("msg:"+msg.getTitle());
+		// lookup for a none existing thread
+		List<Message> noneThreadMessageList = forumManager.getThread(1234l);
+		Assert.assertEquals("Not the right number of messages for this forum", 0, noneThreadMessageList.size());
+	}
+
+	@Test
+	public void testCreateAndGetMessages_loadForumID() throws Exception {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("stufe 0: subject 0");
+		topMessage.setBody("body/n dep 0");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("stufe 0: subject 0");
+		reply.setBody("body/n dep 0");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commitAndCloseSession();
+
+		//load the forum
+		Forum forum = forumManager.loadForum(fo.getKey());
+		List<Message> messageList = forumManager.getMessagesByForum(forum);
+		Assert.assertNotNull(messageList);			
+		for(Message msg: messageList) {
+			Assert.assertNotNull(msg);
 		}
-		assertEquals("Not the right number of messages for this forum",14,messageList.size());
+		
+		Assert.assertEquals("Not the right number of messages for this forum", 2, messageList.size());
 	}
 	
-	@Test public void testCountMessagesByForumID() {
-		log.debug("Start testCountMessagesByForumID()");
-		ForumManager foma = ForumManager.getInstance();
-		assertEquals("Not the right number of messages for this forum",14,foma.countMessagesByForumID(fo.getKey()).intValue());
-	}
+	@Test
+	public void testCountMessagesByForumID() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
 
-	@Test public void testGetThread() {
-		log.debug("Start testGetThread()");
-		ForumManager foma = ForumManager.getInstance();
-		Long msgidTopThread = message1.getKey();
-		List<Message> threadMessageList = foma.getThread(msgidTopThread);
-		log.debug("threadMessageList.size()=" + threadMessageList.size());
-		assertEquals("Not the right number of messages for this forum",1,threadMessageList.size());
-		// lookup for 
-		Long notExistingTopThread = new Long(1234);
-		threadMessageList = foma.getThread(notExistingTopThread);
-		log.debug("threadMessageList.size()=" + threadMessageList.size());
-		assertEquals("Not the right number of messages for this forum",0,threadMessageList.size());
-	
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("stufe 0: subject 0");
+		topMessage.setBody("body/n dep 0");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("stufe 1: subject 0");
+		reply.setBody("body/n dep 0");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commit();
+		
+		Message reply2 = forumManager.createMessage(fo, id1, false);
+		reply2.setTitle("stufe 1: subject 0");
+		reply2.setBody("body/n dep 0");
+		forumManager.replyToMessage(reply2, reply);
+		dbInstance.commit();
+		
+		int numOfMessages = forumManager.countMessagesByForumID(fo.getKey());
+		Assert.assertEquals("Not the right number of messages for this forum", 3, numOfMessages);
 	}
 	
-	@Test public void testGetNewMessageInfo() {
-		log.debug("Start testGetNewMessageInfo()");
-		ForumManager foma = ForumManager.getInstance();
-		
+	@Test
+	public void testGetNewMessageInfo() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-5");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-6");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("New message 1");
+		topMessage.setBody("The newest stuff");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("New message 2");
+		reply.setBody("The more newest stuff");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commit();
+
 		sleep(1500);//we must ensure a lap of 1 second
+		
+		//check the newest messages, limit now
 		Calendar cal = Calendar.getInstance();
 		cal.setTime(new Date());
-		List<Message> msgList = foma.getNewMessageInfo(fo.getKey(), cal.getTime());
-		assertEquals(0, msgList.size());
+		List<Message> newestMessages = forumManager.getNewMessageInfo(fo.getKey(), cal.getTime());
+		Assert.assertEquals(0, newestMessages.size());
+		
+		//check the newest messages, limit one hour in past
 		cal.add(Calendar.HOUR_OF_DAY, - 1);
-		msgList = foma.getNewMessageInfo(fo.getKey(), cal.getTime());
-		assertEquals(14, msgList.size());
+		List<Message> olderLastMessages = forumManager.getNewMessageInfo(fo.getKey(), cal.getTime());
+		Assert.assertEquals(2, olderLastMessages.size());
 	}
 	
-	@Test public void testDeleteMessageTree() {
-		log.debug("Start testDeleteMessageTree()");
-		ForumManager foma = ForumManager.getInstance();
-		foma.deleteMessageTree(fo.getKey(), m3); // throws Exception when failed		
+	@Test
+	public void testDeleteMessageTree() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-5");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-6");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("Future deleted message 1");
+		topMessage.setBody("Future deleted  stuff");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("Future deleted 2");
+		reply.setBody("Future deleted  stuff");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commit();
+		
+		Message reply2 = forumManager.createMessage(fo, id1, false);
+		reply2.setTitle("Future deleted 3");
+		reply2.setBody("Future deleted  stuff");
+		forumManager.replyToMessage(reply2, reply);
+		dbInstance.commit();
+		
+		//delete a message
+		forumManager.deleteMessageTree(fo.getKey(), reply2);
+		dbInstance.commitAndCloseSession();
+		
+		//delete a top message
+		forumManager.deleteMessageTree(fo.getKey(), topMessage);
+		dbInstance.commitAndCloseSession();
 	}
 	
-	@Test public void testDeleteForum() {
-		log.debug("Start testDeleteForum()");
-		ForumManager foma = ForumManager.getInstance();
-		foma.deleteForum(fo.getKey()); // throws Exception when failed
+	@Ignore @Test
+	public void testDeleteForum() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-7");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-8");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("Future deleted forum part. 1");
+		topMessage.setBody("Future deleted  stuff");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("Future deleted forum part. 2");
+		reply.setBody("Future deleted  stuff");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commit();
+		
+		Message reply2 = forumManager.createMessage(fo, id1, false);
+		reply2.setTitle("Future deleted forum part. 3");
+		reply2.setBody("Future deleted  stuff");
+		forumManager.replyToMessage(reply2, reply);
+		dbInstance.commitAndCloseSession();
+
+		//delete the forum
+		forumManager.deleteForum(fo.getKey());
+		dbInstance.commit();
 	}
-    
 }
diff --git a/src/test/java/org/olat/restapi/ForumTest.java b/src/test/java/org/olat/restapi/ForumTest.java
index 43dd7fcfa7e..33b4f7894aa 100644
--- a/src/test/java/org/olat/restapi/ForumTest.java
+++ b/src/test/java/org/olat/restapi/ForumTest.java
@@ -64,8 +64,8 @@ import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.fo.restapi.MessageVO;
 import org.olat.modules.fo.restapi.MessageVOes;
 import org.olat.modules.fo.restapi.ReplyVO;
@@ -92,32 +92,32 @@ public class ForumTest extends OlatJerseyTestCase {
 		
 		forum = forumManager.addAForum();
 		
-		m1 = forumManager.createMessage();
+		m1 = forumManager.createMessage(forum, id1, false);
 		m1.setTitle("Thread-1");
 		m1.setBody("Body of Thread-1");
-		forumManager.addTopMessage(id1, forum, m1);
+		forumManager.addTopMessage(m1);
 		
-		m2 = forumManager.createMessage();
+		m2 = forumManager.createMessage(forum, id1, false);
 		m2.setTitle("Thread-2");
 		m2.setBody("Body of Thread-2");
-		forumManager.addTopMessage(id1, forum, m2);
+		forumManager.addTopMessage(m2);
 		
 		DBFactory.getInstance().intermediateCommit();
 		
-		m3 = forumManager.createMessage();
+		m3 = forumManager.createMessage(forum, id1, false);
 		m3.setTitle("Message-1.1");
 		m3.setBody("Body of Message-1.1");
-		forumManager.replyToMessage(m3, id1, m1);
+		forumManager.replyToMessage(m3, m1);
 		
-		m4 = forumManager.createMessage();
+		m4 = forumManager.createMessage(forum, id1, false);
 		m4.setTitle("Message-1.1.1");
 		m4.setBody("Body of Message-1.1.1");
-		forumManager.replyToMessage(m4, id1, m3);
+		forumManager.replyToMessage(m4, m3);
 		
-		m5 = forumManager.createMessage();
+		m5 = forumManager.createMessage(forum, id1, false);
 		m5.setTitle("Message-1.2");
 		m5.setBody("Body of Message-1.2");
-		forumManager.replyToMessage(m5, id1, m1);
+		forumManager.replyToMessage(m5, m1);
 
 		DBFactory.getInstance().intermediateCommit();
 	}
diff --git a/src/test/java/org/olat/restapi/GroupMgmtTest.java b/src/test/java/org/olat/restapi/GroupMgmtTest.java
index 4b47671f48a..ce875fff383 100644
--- a/src/test/java/org/olat/restapi/GroupMgmtTest.java
+++ b/src/test/java/org/olat/restapi/GroupMgmtTest.java
@@ -68,8 +68,8 @@ import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.manager.BusinessGroupRelationDAO;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.fo.restapi.MessageVO;
 import org.olat.properties.NarrowedPropertyManager;
 import org.olat.properties.Property;
@@ -192,32 +192,32 @@ public class GroupMgmtTest extends OlatJerseyTestCase {
 		ForumManager fm = ForumManager.getInstance();
 		Forum forum = fm.loadForum(forumKeyProperty.getLongValue());
 		
-		m1 = fm.createMessage();
+		m1 = fm.createMessage(forum, owner1, false);
 		m1.setTitle("Thread-1");
 		m1.setBody("Body of Thread-1");
-		fm.addTopMessage(owner1, forum, m1);
+		fm.addTopMessage(m1);
 		
-		m2 = fm.createMessage();
+		m2 = fm.createMessage(forum, owner2, false);
 		m2.setTitle("Thread-2");
 		m2.setBody("Body of Thread-2");
-		fm.addTopMessage(owner2, forum, m2);
+		fm.addTopMessage(m2);
 		
 		DBFactory.getInstance().intermediateCommit();
 		
-		m3 = fm.createMessage();
+		m3 = fm.createMessage(forum, owner3, false);
 		m3.setTitle("Message-1.1");
 		m3.setBody("Body of Message-1.1");
-		fm.replyToMessage(m3, owner3, m1);
+		fm.replyToMessage(m3, m1);
 		
-		m4 = fm.createMessage();
+		m4 = fm.createMessage(forum, part1, false);
 		m4.setTitle("Message-1.1.1");
 		m4.setBody("Body of Message-1.1.1");
-		fm.replyToMessage(m4, part1, m3);
+		fm.replyToMessage(m4, m3);
 		
-		m5 = fm.createMessage();
+		m5 = fm.createMessage(forum, part2, false);
 		m5.setTitle("Message-1.2");
 		m5.setBody("Body of Message-1.2");
-		fm.replyToMessage(m5, part2, m1);
+		fm.replyToMessage(m5, m1);
 
 		DBFactory.getInstance().intermediateCommit();
 	}
diff --git a/src/test/java/org/olat/restapi/NotificationsTest.java b/src/test/java/org/olat/restapi/NotificationsTest.java
index dfb507cc753..f098a5cc150 100644
--- a/src/test/java/org/olat/restapi/NotificationsTest.java
+++ b/src/test/java/org/olat/restapi/NotificationsTest.java
@@ -76,8 +76,8 @@ import org.olat.course.nodes.FOCourseNode;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.restapi.repository.course.CoursesWebService;
@@ -461,10 +461,10 @@ public class NotificationsTest extends OlatJerseyTestCase {
 	
 	private Message createMessage(Identity id, Forum fo) {
 		ForumManager fm = ForumManager.getInstance();
-		Message m1 = fm.createMessage();
+		Message m1 = fm.createMessage(fo, id, false);
 		m1.setTitle("Thread-1");
 		m1.setBody("Body of Thread-1");
-		fm.addTopMessage(id, fo, m1);
+		fm.addTopMessage(m1);
 		return m1;
 	}
 	
diff --git a/src/test/java/org/olat/restapi/UserMgmtTest.java b/src/test/java/org/olat/restapi/UserMgmtTest.java
index 367ceb0b347..2efa7c59c72 100644
--- a/src/test/java/org/olat/restapi/UserMgmtTest.java
+++ b/src/test/java/org/olat/restapi/UserMgmtTest.java
@@ -90,8 +90,8 @@ import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.manager.BusinessGroupRelationDAO;
 import org.olat.modules.fo.Forum;
-import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.modules.fo.manager.ForumManager;
 import org.olat.modules.fo.restapi.ForumVO;
 import org.olat.modules.fo.restapi.ForumVOes;
 import org.olat.modules.fo.restapi.MessageVOes;
@@ -219,10 +219,10 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 		CollaborationTools g1CTSMngr = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(g1);
 		g1CTSMngr.setToolEnabled(CollaborationTools.TOOL_FORUM, true);
 		Forum g1Forum = g1CTSMngr.getForum();//create the forum
-		Message m1 = ForumManager.getInstance().createMessage();
+		Message m1 = ForumManager.getInstance().createMessage(g1Forum, id1, false);
 		m1.setTitle("Thread-1");
 		m1.setBody("Body of Thread-1");
-		ForumManager.getInstance().addTopMessage(id1, g1Forum, m1);
+		ForumManager.getInstance().addTopMessage(m1);
 		
 		dbInstance.commitAndCloseSession();
 		
@@ -255,10 +255,10 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 					if(demoForumNode == null) {
 						demoForumNode = (FOCourseNode)node;
 						Forum courseForum = demoForumNode.loadOrCreateForum(demoCourse.getCourseEnvironment());
-						Message message1 = ForumManager.getInstance().createMessage();
+						Message message1 = ForumManager.getInstance().createMessage(courseForum, id1, false);
 						message1.setTitle("Thread-1");
 						message1.setBody("Body of Thread-1");
-						ForumManager.getInstance().addTopMessage(id1, courseForum, message1);
+						ForumManager.getInstance().addTopMessage(message1);
 					}	
 				} else if (node instanceof BCCourseNode) {
 					if(demoBCCourseNode == null) {
-- 
GitLab